我在matlab文檔中找到幫助時遇到了困難,以前有關使用matlab繼承和類構造函數來創建接口的問題。爲了使它整潔,在一個包中。與超類和子類構造函數接口
而不是通過我的代碼拖着我可以凝聚,如下所示:
+MyPkg
具有超Super
和幾個子類Sub1 Sub2
一包......我的大部分屬性和方法在中超是如此定義的Sub1
和Sub2
真的只存在於使用它們的構造函數進行簡單的例程或者可能從Super中重載的一些方法。
那麼,如何去寫的classdefs和施工支持的接口,我可以使用下面的調用:
a = MyPkg.Super(args).Sub1(args)
b = MyPkg.Super(args).Sub1(args).Sub1Method
在這種情況下,我想保持與超級參數除了相關參數Sub1的可讀性和組織性。
歡迎提問。
編輯:
考慮下面的接受的答案和一些瀏覽後,我得出一個結論,上面顯示的界面是不是真的在OO的精神,併爲它我的數據分析應用更合適的方式來的方法,它將由一個句柄類構成,該構造函數填充對象屬性的對象或單元數組。因爲類是句柄類,所以可以使用它的方法來生成所需的方法。即以下
% in +MyPkg\
classdef Super < handle
properties
outputArray
end
methods
function self = Super(args)
self.outputArray=load_values(args);
end
function out = do_analysis(self,params)
% do some analysis
end
end
end
然後使用此:
data1 = MyPkg.Super(args)
% Populate the outputArray
analysis1 = data1.do_analysis(params)
等,
希望幫助別人處理這些問題
感謝您的回覆,您能解釋一下您在最後一句話中的含義嗎? –
當然。構圖是有一個對象「包含」另一個。 Class1被保存在Class2的屬性中,Class2使用Class1作爲「黑盒子」。這通常用於「裝飾」一個類,即將一個不同的接口置於其上。這裏有一個很好的討論:http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance和在這裏:http://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/ – Marc
我經常使用的一個終極決策者是問自己,是否需要在運行時用一個類替換另一個類。 GUI的一個很好的例子:一個簡單的GUI可能有一個'Window'父類和兩個子類型:'Modal'和'NonModal'對話框。人們可以想象,在屏幕上繪圖時,必須保留一個「Windows」列表,而不會在乎它們是什麼類型。如果你使用繼承來共享代碼和功能,你應該更喜歡組合。 – Marc