文章目录
5 MATLAB的类文件的组织结构
5.1 如何使用其他文件夹中类的定义
- 添加路径
addpath函数
添加路径,调用其他路径的类
addpath('Z:\folder1\...');
p1 = Point(1.2,10);
5.2 类的定义和成员方法分开
当一个类的方法过多时,可以将类定义和成员方法定义放在同一个以@开头,类名为文件名的文件夹中。例如:@Point
classdef Point < handle
properties(Access = private)
x
y
end
methods
function obj = Point(x,y)
obj.x = x;
obj.y = y;
end
[norm] = normalize(obj);
display1(obj); % display 与内置函数冲突
end
end
function [norm] = normalize(obj)
norm = sqrt(obj.x^2+obj.y^2);
obj.x = obj.x/norm;
obj.y = obj.y/norm;
end
function display1(obj)
disp(['x = ',num2str(obj.x)]);
disp(['y = ',num2str(obj.y)]);
end
此类方法可以访问类的私有数据,其他的普通方法并不行。成员方法的声明同样需要放置在method block中。
- 构造方法和析构方法只能放置在类定义中,不能剥离
- set和get方法同样只能放置在类定义中。
- static方法同理
使用类文件中的类定义,一般与脚本放置在同一文件夹即可。
更常用的方法是通过addpath进行调用。
5.3 类的局部函数
局部函数放置在classdef…end之后,作为工具(Utility)函数,提供一些功能,外部不可见。
在类定义中的类方法可以调用局部函数,在同一文件夹中的类方法则不行,但其自身可以定义局部函数。
classdef Point < handle
properties(Access = private)
x
y
end
methods
function obj = Point(x,y)
obj.x = x;
obj.y = y;
end
[norm] = normalize(obj);
display1(obj); % display 与内置函数冲突
end
end
% 局部函数
function [x,y] = localUtility()
%...
end
5.4 使用package文件夹管理类
package文件夹以“+”开头,可以包括各个类的文件夹,类之间可以有继承关系。但其继承类之前需要加上文件名。
凡是使用基类均需要加文件名,形如
classdef Point3D < MyPointPackage.Point2D
obj = obj@MyPointPackage.Point2D(x,y)
display@MyPointPackage.Point2D(obj)
同样的,使用某个类时,需要加上其文件名
p1 = MyPointPackage.Point2D(1,1);
p2 = MyPointPackage.Point2D(3,5);
导入此文件夹中的所有类的方法
import MyPointPackage.*;
此时不在需要添加文件夹名称即可调用相关的类。
5.5 类方法和函数重名的调用规则
其各自函数的调用规则不同,不会出现函数冲突。
5.6 同名函数优先级
直接路径优先级一般最高。