1
我正在开发一个matlab OOP项目,我需要一个带有一个参数的getter方法。既然我不想让这个问题非常具体,我想概括一下。所以这里的上下文: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的干将不能有其他参数。
- 一个解决方案是将时间变量作为空间对象的内部空间,但是我有强大的设计约束让时间变量在所有对象的外部。
- 另一种解决方案是使用函数而不是名为Get_X_Pos的getter,但我想保持与其他静态对象(X_Pos和Y_Pos是不变的)保持一致。我想避免混合签名像space_obj.Get_X_Pos(1)和other_obj.X_Pos。但这意味着我需要为所有其他对象编写Get_X_Pos函数,即使它不是必需的。
所以这里的问题是由具有外部依赖性的类属性给出的。所以我的问题是:
- 为什么Matlab不允许getter方法的其他参数?这个需求是否与一些OOP范例相冲突?为什么?
- 如何以优雅的方式解决此问题?也许需要重新设计... 无论如何,我的问题可能看起来微不足道,但我正在寻找最佳实践/设计,因为我的项目会随着时间的推移而逐渐增大。任何帮助深表感谢! 谢谢!
但有一个问题:如果有一个属性命名X_POS你不能使用该名称的方法!当你写obj.X_Pos时,我不知道你要查询哪一个。谢谢你的时间! – 2015-04-08 07:46:15
嗯,当然是。我并不是建议使用方法和属性 - 而是一种方法而不是属性。由于调用无参数方法在语法上与访问属性相同,因此不会造成任何损害。 – sebastian 2015-04-08 07:53:25