私は、既存の MATLAB スクリプト コードを書き直さなければならない、より大きなプロジェクトの開始時です。私は、MATLAB のオブジェクト指向プログラミング サポートを使用して、より柔軟で堅牢なプログラムを作成するよう依頼されました。私は、さまざまなサブクラスのオブジェクトが通信できるようにする方法、またはそれを改善する方法を疑問に思ったところに到達しました。それを行うための最良または最もエレガント/効率的/ユーザーフレンドリーな方法は何ですか.
例:
スーパークラス A (ハンドル クラス):
classdef A < handle
properties
myvar
end
methods (Access = protected)
function calc_myvar(obj)
%calculate myvar with some code
obj.myvar=...;
end
end
end
サブクラス B:
classdef B < A
properties
subclassvar
end
methods (Access = protected)
function calc_subclassvar(obj)
%calculate subclassvar with some code
%needs myvar of an object of class C
%C.myvar
obj.subclassvar=...;
end
end
end
サブクラス C:
classdef C < A
properties
%some other properties
end
methods
%some other methods
end
end
したがって、サブクラス B には、A で定義されたサブクラス C の変数が必要です。現時点では、常に C のオブジェクトを追加の入力パラメーターとして関数に渡します。さらに、 C.myvar に既に値があるかどうかもわかりません。
現在の実装:
function calc_subclassvar(obj,C)
if isempty(C.myvar)
C.calc_myvar;
end
obj.subclassvar = do_something_with_C.myvar;
end
別のより良い方法はありますか?関数のオーバーロードについて読んだget
ので、変数が存在するかどうかを毎回確認する必要はありませんか? また、イベントとリスナーについて読みましたが、満足に機能させることができませんでした。たとえば、リスナーを C に追加したい場合、A のどの特定のオブジェクトからイベントが送信されたかを知る必要があります。または、C が A の任意のオブジェクトをリッスンする方法はありますか?
別の方法を知っているかもしれません。ややこしいですね。=)