2015-04-06 20 views
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_PosPOS = 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範例相沖突?爲什麼?
  • 如何以優雅的方式解決此問題?也許需要重新設計... 無論如何,我的問題可能看起來微不足道,但我正在尋找最佳實踐/設計,因爲我的項目會隨着時間的推移而逐漸增大。任何幫助深表感謝! 謝謝!

回答

1

A 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) 

但是我個人更喜歡把它分成兩部分m明確區分兩者。例如。通過使用X0_Pos或類似的屬性的「靜態」版本和X_Pos作爲時間依賴的一個。在這種情況下,你可以例如使用依賴屬性返回static_obj.X_Pos(0)static_obj.X0_Pos

function x0_pos = X0_Pos(this) 
    x0_pos = this.X_Pos(0); 
end 
+0

但有一個問題:如果有一個屬性命名X_POS你不能使用該名稱的方法!當你寫obj.X_Pos時,我不知道你要查詢哪一個。謝謝你的時間! – 2015-04-08 07:46:15

+0

嗯,當然是。我並不是建議使用方法和屬性 - 而是一種方法而不是屬性。由於調用無參數方法在語法上與訪問屬性相同,因此不會造成任何損害。 – sebastian 2015-04-08 07:53:25