Oop 在Matlab中使用抽象类(无属性)
让我们有一个抽象类:Oop 在Matlab中使用抽象类(无属性),oop,matlab,Oop,Matlab,让我们有一个抽象类: classdef ACalculation < handle methods (Abstract) [result] = calculate (this, data); plot (this, data, limX, limY); end end 使用继承是一种糟糕的方式吗? 我是否应该忽略matlab将函数更改为静态的建议? 我还能在这里做什么?如果calculate是一个静态的Maximum方法,您可以使用'
classdef ACalculation < handle
methods (Abstract)
[result] = calculate (this, data);
plot (this, data, limX, limY);
end
end
使用继承是一种糟糕的方式吗?
我是否应该忽略matlab将函数更改为静态的建议?
我还能在这里做什么?如果
calculate
是一个静态的Maximum方法,您可以使用'result=Maximum.calculate(data)
来调用它,而不必实例化标准
使用继承或来自MATLAB的错误建议(不一定)是一种不好的方式。我认为在这种情况下,静态接口实现是一种非常好的模式。
按以下方式定义类:
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
然后创建一个Maximum
空实例并将其传递给foo
:
foo ( Maximum.empty(0), [1 2 3]);
如果要更改计算方法,请调用
foo ( Minimum.empty(0), [1 2 3]);
当你说这样的模式行不通时,你的想法就像Java/C#/C++开发者一样。但是与C++中静态和虚拟关键字不能共存的情况不同,Matlab没有这样的限制,因为所有的操作都是在运行时完成的,并且一个“实例”可以是空的,或者是一个代码< n>代码>元素的数组。< /p>但是如果我还有其他类(最小,平均等)我想在一开始的某个地方选择使用哪种类型,然后使用抽象类的某个对象,而不说它到底是哪个类。在这种情况下,我不能使用static,不是吗?
function foo(acalc,data)
assert(isa(acalc,'ACalculation'));
acalc.calculate(data);
acalc.plot(data,[100 200]);
end
foo ( Maximum.empty(0), [1 2 3]);
foo ( Minimum.empty(0), [1 2 3]);