Matlab面向对象程序入门
2008a以后的MATLAB开始项用户提供新的面向对象的变成方法,用户可以在MATLAB中定义自己的类。
1、最简单的定义类的语法
classdef Point2D < handle
properties % 属性 block 开始
% ...
end % 属性 block 结束
methods % 方法 block 开始
% ...
end % 方法 block 开始
end
说明:
(1)任何MATLABClass的定义都是由关键词classdef开始,end结束。
(2)classdef后面紧跟类的名字,在这里是Point2D。
(3)类名后面有一个< handle,会在第3章中具体解释,现在先规定,所有的类的定义后面都要加上<hande,并且本书中的绝大多数类都是这样定义的。
(4)一个类定义中包含属性block 和方法block。
举个栗子(Point2D二位点类的定义)
classdef Point2D < handle
properties
x=0;
y
end
methods
function obj = Point2D(x0,y0) % Point2D类的构造函数
obj.x=x0;
obj.y=y0;
end
function normalize(obj) % Point2D坐标的归一化方法
r = sqrt(obj.x^2+obj.y^2);
obj.x = obj.x/r;
obj.y = obj.y/r;
end
end
end
说明:
(1)因为这个类用来表示二维坐标轴上的点,所以property block 中首先定义了该类的两个成员属性,分别是x和y的坐标。
(2)method block中定义了两个方法:第一个是Constructor(构造方法),负责产生并且返回该Point2D的对象,这是由用户显式定义的类的构造函数;第二个方法叫做normalize,负责把x和y的长度归一化。
上述成员方法normalize中的第一个参数是obj,用来把对象当做参数传入normalize方法中,从接受参数的方法上来说,类的成员方法和普通的函数没有太大的不同。
2、如何创建一个对象
method block中有一个和class 同名的方法,叫做Constructor(构造函数,或者构造方法)。Constructor 是一个特殊的方法,它负责创建类的对象,通常它还可以用来初始化对象的属性,即给属性赋初值。
**创建对象的方式是直接调用类的 Constructor。**比如下面的Script 创建出了两个对象pl和p2,并且初始化了对象p1和p2的属性。
保存好上述例子代码后,运行下述代码,即可创建两个对象
p1=Point2D(1.0,1.0);
p2=Point2D(2.0,2.5);
创建的两个对象中包含两个属性x,y
Point2D是一个类的Constructor,并且返回值是一个对象。
3、类的属性(Property)
(1)如何访问对象的属性
这种普通属性的访问和赋值,其使用方法和结构体类似。在工程科学计算中,还可以声明一些具有特殊性质的属性,这就是下面几节要介绍的内容。
(2)属性的默认值(Default Value)
在MATLAB类的Property Block 定义中,可以为属性直接赋给一个值。通过这种方法提供的值,叫做属性的默认值(Default Value):
(3)常数(Constant)属性
常量(Constant)属性,就是在对象生存周期中值保持不变的属性。无论在类内部或者外部对该属性进行修改都将报错。定义Constant property 需要使用Constant关键词。例如下面的代码中,第3行的Constant值必须要在类的定义体内指定:
定义类:
classdef A < handle
properties(Constant)
R=pi/180;
end
end
如果不显式(Explicitly)地给定被声明成常量的属性一个特定的值,那么默认的Constant值是empty double。Constant property 的另一个用处是存储/封装一些常用的常量,以便在程序中可以不用创建出一个对象就直接使用类中的常量。比如,查询A类中常量成员R: