2012-01-24 152 views
4

我在matlab文檔中找到幫助時遇到了困難,以前有關使用matlab繼承和類構造函數來創建接口的問題。爲了使它整潔,在一個包中。與超類和子類構造函數接口

而不是通過我的代碼拖着我可以凝聚,如下所示:

+MyPkg具有超Super和幾個子類Sub1 Sub2一包......我的大部分屬性和方法在中超是如此定義的Sub1Sub2真的只存在於使用它們的構造函數進行簡單的例程或者可能從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) 

等,

希望幫助別人處理這些問題

回答

2

對於你的問題,你可以如果你使用繼承的話。只有直接的超類構造函數可以從子類調用,並且只能從子類調用超類構造函數。 Ref.

揭示這樣的超類真的打破了繼承的基礎。如果你需要那種訪問,也許你應該考慮另一種模式,也許組合(「有一個」而不是「是」)?

+0

感謝您的回覆,您能解釋一下您在最後一句話中的含義嗎? –

+2

當然。構圖是有一個對象「包含」另一個。 Class1被保存在Class2的屬性中,Class2使用Class1作爲「黑盒子」。這通常用於「裝飾」一個類,即將一個不同的接口置於其上。這裏有一個很好的討論:http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance和在這裏:http://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/ – Marc

+0

我經常使用的一個終極決策者是問自己,是否需要在運行時用一個類替換另一個類。 GUI的一個很好的例子:一個簡單的GUI可能有一個'Window'父類和兩個子類型:'Modal'和'NonModal'對話框。人們可以想象,在屏幕上繪圖時,必須保留一個「Windows」列表,而不會在乎它們是什麼類型。如果你使用繼承來共享代碼和功能,你應該更喜歡組合。 – Marc

相關問題