Matlab OOP - getter方法有参数吗?

时间:2015-04-06 11:54:39

标签: matlab oop

我正在开发一个matlab OOP项目,我需要一个带有一个参数的getter方法。由于我不想让问题非常具体,我想概括一下。所以这里是上下文:

  • 我有一个2D空间对象(SpaceObject),其中包含以下字段:X_Pos,Y_Pos和Movement_Model。
  • X_Pos和Y_Pos描述空间对象在XY平面中的位置。
  • Movement_Model是描述空间对象在XY平面中的移动的对象。该字段初始化为空[],因此可以定义或未定义。
  • 当Movement_Model字段对象未定义时,约定是X_Pos和Y_Pos是时不变的。通过编写 pos = space_obj.X_Pos
  • 隐式地获取这些属性
  • 当定义Movement_Model字段对象时,约定是X_Pos和Y_Pos成为时变。但是这次getter方法需要与Movement_Model字段对象结合的时间值/值来计算任何时刻的空间位置。所以我想要这样的东西: pos = space_obj.X_Pos pos = space_obj.X_Pos(1) pos = space_obj.X_Pos([1: 1:10])但是Matlab getter不能有其他参数。
  • 一种解决方案是将时间变量设置在空间对象的内部,但我有强大的设计约束,以使时间变量在所有对象外部。
  • 另一种解决方案是使用函数而不是名为Get_X_Pos的getter,但我想保持与其他静态对象(X_Pos和Y_Pos是时不变的)的一致性。我想避免使用像space_obj.Get_X_Pos(1)和other_obj.X_Pos这样的混合签名。但这意味着我需要为所有其他对象编写Get_X_Pos函数,即使它不是必需的。

所以这里的问题是由具有外部依赖性的类属性给出的。所以我的问题是:

  • 为什么Matlab不允许其他参数用于getter方法?这个要求是否与某些OOP范式相冲突?为什么?
  • 如何以优雅的方式解决这个问题?也许需要重新设计...... 无论如何,我的问题似乎微不足道,但我正在寻找最佳实践/设计,因为我的项目将随着时间的推移而变大。任何帮助深表感谢! 谢谢!

1 个答案:

答案 0 :(得分:1)

带有一个(或多个参数)的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

matlab执行函数的事实,即使它们被引用而没有空括号,然后让你结合两种情况:

x_static = space_obj.X_Pos

x_at_t1 = space_obj.X_Pos(t1)

然而,我个人赞成将其分为两部分,以明确区分两者。例如。通过对此属性的“静态”版本使用X0_Pos或类似的东西,并使用X_Pos作为时间依赖的版本。在这种情况下你可以,例如使用依赖属性返回static_obj.X_Pos(0)的{​​{1}}:

static_obj.X0_Pos