2012-01-24 10 views
4

私はmatlabのドキュメントと、インタフェースを作るためにmatlabの継承とクラスコンストラクタを使うことについての以前の質問を見つけるのが困難でした。それをパッケージ内できれいにする。次のようにする代わりに、私のコードをドラッグするのスーパーコンストラクタとサブクラスコンストラクタとのインタフェース

私はそれを凝縮することができます

スーパーSuperといくつかのサブクラスSub1 Sub2を持って+MyPkgパッケージを...私のプロパティとメソッドのほとんどは、スーパーで定義されているようにSub1Sub2は実際には単純なルーチンのためにコンストラクタを使うか、おそらくSuperからオーバーロードされたいくつかのメソッドしか存在しません。

それでは、どのように私は、次の呼び出しに使用できるインターフェースをサポートするためにclassdefsおよびコンストラクタを書いて行くのです。この場合

a = MyPkg.Super(args).Sub1(args) 
b = MyPkg.Super(args).Sub1(args).Sub1Method 

を私はに関連した引数から離れてスーパーに関連する引数を維持したいです可読性と構成のためにSub1。

質問は歓迎します。

EDIT:

下記の受け入れ答えといくつかのブラウジングを検討した後、私は上に示したインターフェースが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 

次は、その後、これを使用するには:他の誰かが、これらの問題は、することができ、あなたの質問に関しては

答えて

2

を扱うことができます

data1 = MyPkg.Super(args) 
% Populate the outputArray 
analysis1 = data1.do_analysis(params) 

など、

・ホープあなたが継承を使うならば、直接スーパークラスのコンストラクタのみがサブクラスから呼び出され、サブクラスからはスーパークラスのコンストラクタを呼び出すことができます。 Ref.

スーパークラスを公開すると、本当に継承の基礎が崩れます。そのようなアクセスが必要な場合は、別のモデル、おそらく構成(「a」の代わりに「a」を持っています)を考えるべきでしょうか?

+0

ご回答いただきありがとうございます。最後の文章で何を意味するのかをさらに説明できますか? –

+2

確かに。構成には、あるオブジェクトが別のオブジェクトを「含む」ことがあります。 Class1はClass2のプロパティに保持され、Class2はClass1を「ブラックボックス」として使用します。これは、クラスを「装飾する」、つまり、その上に別のインタフェースを配置するためによく使用されます。ここで大きな議論があります:http://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/ – Marc

+0

私がよく使った最終的な判断者は、実行時にあるクラスを別のクラスに置き換える必要があるかどうかを自問してください。 GUIからの良い例:単純なGUIには、 'Window'親と、' Modal'と 'NonModal'ダイアログの2つのサブタイプがあります。スクリーン上に描画するためには、「Windows」のリストを保持しなければならず、どのタイプのものであっても気にしないと想像できるでしょう。継承を使用してコードと機能を共有している場合は、おそらく構成が好きでしょう。 – Marc

関連する問題