Matlab OOP-getter方法可以有参数吗?
我正在做一个MatlabOOP项目,我需要一个带一个参数的getter方法。因为我不想把这个问题说得很具体,所以我想概括一下。所以这里是上下文:Matlab OOP-getter方法可以有参数吗?,matlab,oop,Matlab,Oop,我正在做一个MatlabOOP项目,我需要一个带一个参数的getter方法。因为我不想把这个问题说得很具体,所以我想概括一下。所以这里是上下文: 我有一个2D空间对象(SpaceObject),具有以下字段:X_Pos、Y_Pos和Movement_Model X_位置和Y_位置描述空间对象在XY平面中的位置 运动模型是描述空间对象在XY平面上运动的对象。此字段初始化为空[],因此可以定义或取消定义 当未定义“移动”模型字段对象时,约定为X_位置和Y_位置是时不变的。通过编写pos=space
- 我有一个2D空间对象(SpaceObject),具有以下字段:X_Pos、Y_Pos和Movement_Model李>
- X_位置和Y_位置描述空间对象在XY平面中的位置
- 运动模型是描述空间对象在XY平面上运动的对象。此字段初始化为空[],因此可以定义或取消定义
- 当未定义“移动”模型字段对象时,约定为X_位置和Y_位置是时不变的。通过编写pos=space\u obj.X\u pos隐式地获取这些属性
- 定义“移动”模型字段对象时,惯例是X位置和Y位置随时间变化。但这一次,getter方法需要时间值/值与Movement_Model field对象结合,以计算在任何时刻的空间位置。所以我想要这样的东西:pos=space\u obj.X\u pos或pos=space\u obj.X\u pos(1)或pos=space\u obj.X\u pos([1:1:10]),但是Matlab getters不能有其他参数
- 一种解决方案是将时间变量设置为空间对象的内部,但我有很强的设计约束,将时间变量设置为所有对象的外部
- 另一种解决方案是使用一个函数代替名为Get_X_Pos的getter,但我希望与其他静态对象保持一致(对于这些静态对象,X_Pos和Y_Pos是时不变的)。我希望避免像space_obj.Get_X_Pos(1)和other_obj.X_Pos这样的混合签名。但这意味着我需要为所有其他对象编写Get_X_Pos函数,即使它不是必需的李>
- 为什么Matlab不允许getter方法使用其他参数?这个需求是否与一些OOP范例相冲突?为什么?
- 我怎样才能优雅地解决这个问题?也许需要重新设计。。。
不管怎么说,我的问题似乎微不足道,但我正在寻找最佳实践/设计,因为我的项目将随着时间的推移而变得越来越大。非常感谢您的帮助!
谢谢李>
getter
方法不再是经典的getter
方法-它只是一个普通的方法
使用普通方法,您可以实现两个用例:
function x_pos = X_Pos(this, t)
if nargin < 2
% handle space_obj.X_Pos case
else
% handle space_obj.X_Pos(1) case
end
end
或
不过,我个人倾向于将其分为两部分,以明确区分两者。例如,对该属性的“静态”版本使用X0_Pos
或类似的东西,并将X_Pos
作为时间相关版本。在这种情况下,您可以使用从属属性为静态对象X0\u位置返回静态对象X0\u位置(0)
:
function x0_pos = X0_Pos(this)
x0_pos = this.X_Pos(0);
end
但有一个问题:如果有一个名为X_Pos的属性,则不能有一个具有此名称的方法!我想,当你写obj.X_Pos时,全班同学都不知道你问的是哪一个。谢谢你抽出时间!当然可以。我不是建议使用方法和属性,而是使用方法而不是属性。由于调用无参数方法在语法上与访问属性完全相同,因此不会造成任何伤害。
x_at_t1 = space_obj.X_Pos(t1)
function x0_pos = X0_Pos(this)
x0_pos = this.X_Pos(0);
end