我正处于一个更大项目的开始,我必须重写现有的 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 的任何对象?
也许你知道另一种方式。这有点令人困惑。=)