2012-03-20 14 views
7

我々は1つの抽象クラスを持ってみましょう:実装クラスの機能に(プロパティなし)MATLABで抽象クラスを使用して

classdef ACalculation < handle 

    methods (Abstract) 
     [result] = calculate (this, data); 

     plot (this, data, limX, limY); 
    end 

end 

そしてACalculation

classdef Maximum < ACalculation 

    methods 
     function [result] = calculate (this, data) 
      %... 
     end 

     function plot (this, data, limX, limY) 
      %... 
     end 
end 

を実装し、いくつかの他のクラス私はすべての必要な情報を与えますだから私はどんなプロパティも必要ありません。 静的なクラスが必要なようです。しかし、静的なクラスがある場合、私はこの関数を呼び出す際に問題があります。 私はそのような何かをしたいと思います:

criteria = Maximum(); 
%...... 
result = criteria.calculate(data); 

は、それが継承を使用するには悪い方法ですか? 機能を静的に変更するためのmatlabアドバイスを無視すべきですか? ここで他に何ができますか?

答えて

5

私はこの場合、静的インタフェースの実装はかなり良いパターンだと思います。 次のように自分のクラスを定義します。次に

function foo(acalc,data) 
     assert(isa(acalc,'ACalculation')); 
     acalc.calculate(data); 
     acalc.plot(data,[100 200]); 
end 

Maximum空のインスタンスを作成し、fooに渡し:

classdef ACalculation < handle 

    methods (Abstract,Public,Static) 
     [result] = calculate (data);  
     plot (data, limX, limY); 
    end 

end 

classdef Maximum < ACalculation 

    methods (Public,Static) 
     function [result] = calculate (data) 
      %... 
     end 

     function plot (data, limX, limY) 
      %... 
     end 
end 

その後、あなたはACalculationタイプが期待する機能を書くことができます

foo (Maximum.empty(0), [1 2 3]); 

計算方法を変更する場合は、

foo (Minimum.empty(0), [1 2 3]); 

このようなパターンがうまくいかないと言うと、あなたはJava/C#/ C++開発者のように思っています。しかし、のスタティックのバーチャルのキーワードは共存できません。すべてが実行時に実行され、 "インスタンス"は空またはnエレメントの配列になるため、このような制限はありません。

+0

それは、ありがとう! – Lex

0

calculateは、criteriaにインスタンス化せずにMaximum‘, you would use ‘result = Maximum.calculate(data)という静的メソッドを呼び出す場合です。

MATLABの継承または悪いアドバイスを使用するのは必ずしも悪い方法ではありません。

+0

しかし、他のクラス(最小値、平均値など)を使用している場合は、タイプが使用された後、抽象クラスのオブジェクトを使用して、最初のどこかを選択したいと思います。この場合、私は静的を使用することはできませんか? – Lex

関連する問題