私はmatlabのドキュメントと、インタフェースを作るためにmatlabの継承とクラスコンストラクタを使うことについての以前の質問を見つけるのが困難でした。それをパッケージ内できれいにする。次のようにする代わりに、私のコードをドラッグするのスーパーコンストラクタとサブクラスコンストラクタとのインタフェース
私はそれを凝縮することができます
スーパーSuper
といくつかのサブクラスSub1 Sub2
を持って+MyPkg
パッケージを...私のプロパティとメソッドのほとんどは、スーパーで定義されているようにSub1
とSub2
は実際には単純なルーチンのためにコンストラクタを使うか、おそらく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
次は、その後、これを使用するには:他の誰かが、これらの問題は、することができ、あなたの質問に関しては
ご回答いただきありがとうございます。最後の文章で何を意味するのかをさらに説明できますか? –
確かに。構成には、あるオブジェクトが別のオブジェクトを「含む」ことがあります。 Class1はClass2のプロパティに保持され、Class2はClass1を「ブラックボックス」として使用します。これは、クラスを「装飾する」、つまり、その上に別のインタフェースを配置するためによく使用されます。ここで大きな議論があります:http://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/ – Marc
私がよく使った最終的な判断者は、実行時にあるクラスを別のクラスに置き換える必要があるかどうかを自問してください。 GUIからの良い例:単純なGUIには、 'Window'親と、' Modal'と 'NonModal'ダイアログの2つのサブタイプがあります。スクリーン上に描画するためには、「Windows」のリストを保持しなければならず、どのタイプのものであっても気にしないと想像できるでしょう。継承を使用してコードと機能を共有している場合は、おそらく構成が好きでしょう。 – Marc