无需关注,原文查看
在一般情况下,定义类的属性和方法的时候,方法需要在类体中定义。但是当函数体过长会使得类的定义显得十分臃肿,所以需要将一些方法单独拿出来,而且在一个程序中可能需要很多类,不应该将所有类都放在当前路径上,需要进行包装。
假设我们需要定义一个基类 Point,除了构造函数还有一个类方法为 normalize(), 和display(),那么组织结构为:
放置类体的文件夹为 @+类名,在文件夹下可以放置类相关的函数和类的定义。
% Point.m
classdef Point < handle
properties
x = 0
y = 0
end
properties (Hidden,Dependent)
r
end
methods
normalize(obj); % normalize的定义在外面
function obj = Point(x,y) % 可以使用nargin得到复杂初始化
obj.x = x;
obj.y = y ;
end
function disp(obj) % 自定义显示方法
disp('------------------');
s = sprintf('坐标为(%3.3d,%3.3d)\n',obj.x,obj.y);
disp( [s 'obj.disp was called.'])
end
function r = get.r(obj) % get方法获取r的信息
r = sqrt(obj.x^2+obj.y^2);
end
end
end
在上面的代码中,只在methods当中声明了函数,但是没有给出具体定义,在同一路径下再定义一函数normalize.m有:
% normalize.m
function normalize(obj)
obj.x = obj.x/r;
obj.y = obj.y/r;
end
这两个文件都在文件夹@point中,然后main函数与@point在同一路径中,即可使用。
当有多个类时,同样可以分多个文件夹
当程序更复杂的时候可以考虑使用包package
这样的话,在使用包中的类时,需要加上包名,比如:
classdef Point2 < myPackage.Point
a = myPackage.Point2()
如果要导入包中的所有类,可以用import导入,比如:
import myPackage.*
a = Point2();