类是描述现实世界中真实对象的代码集合。类相当于模板,提供对真实对象的主要静态特征(属性)和动态特征(方法)的描述。用类模板生成实例,就是对象。这个对象是真实对象基于类代码的抽象。可以生成很多对象,给每个对象赋予不同的属性就可以模拟现实世界中不同的真实对象,结合方法、事件可以模拟现实世界他们之间的相互关系。[大谦MATLAB,dqmatlab点com]
MATLAB类用代码块进行定义。
生成类的块
MATLAB组织类的时候,将代码组织成块,如下所示,每个块以关键词开始,以end语句结束:
classdef…end:定义所有类组件。
properties…end:声明属性名,定义属性并指定默认值。
methods…end:声明方法签名,定义方法和函数代码。
enumeration…end:声明枚举类的成员和值。
properties, methods和enumeration都是关键字,它们只用在calssdef块中。
类定义块
类文件中的classdef块包含类的定义代码,以classdef关键字开始,以end语句结束。
classdef(ClassAttributes) ClassName < SuperClass
...
end
ClassAttributes定义类的特性,SuperClass定义类的父类,即继承性。如果有多个父类,各父类名称之间用“&”连接。例如下面的LinkedList类继承自Array类和handle类。
classdef LinkedList < Array & handle
...
end
例如,下面的classdef定义一个名为Myclass的类,它继承自handle类,但是不能用作其它类的父类。
classdef(Sealed) MyClass < handle
...
end
一个类文件只能定义一个类,但是,可以向包含classdef块的文件添加本地函数。本地函数的作用范围仅限于该类文件,它可以访问私有和受保护的类成员。
classdef ClassName
...
end
function localFunction
...
end
属性块
属性块包含属性的定义代码,以properties关键字开始,以end语句结束。
classdef ClassName
properties(PropertyAttributes)
...
end
...
end
例如,下面的类定义一个名为Prop1的私有属性,默认值等于date函数的输出,即当前日期。
classdef MyClass
properties(Access=private)
Prop1=date
end
...
end
下面的代码定义3个属性。Model和Color属性使用默认值,作为公共接口可读可写。SerialNumber是只读属性,给该属性赋值只能在本类的构造函数或其它类方法中进行。
classdefNewCar
properties
Model
Color
end
properties(SetAccess=private,GetAccess=public)
SerialNumber
end
methods
...
end
end
使用点标记可以获取属性的值。
A=NewCar
A =
NewCar with properties:
Model: []
Color: []
SerialNumber: []
设置Model和Color属性的值。
A.Model='XGT7000';
A.Color='Red';
给NewCar类添加一个构造函数,设置属性值。
classdef NewCar
properties
Model
Color
end
properties(SetAccess=private,GetAccess=public)
SerialNumber
end
methods
function obj=NewCar(model,color)
obj.Model=model;
obj.Color=color;
obj.SerialNumber=datenum(datetime('now'));
end
end
end
在MATLAB命令窗口键入:
A=NewCar('XGT7000','Red')
返回
A=
NewCarwithproperties:
Model:'XGT7000'
Color:'Red'
SerialNumber:7.362456078531134e+05
方法块
方法块包含定义类方法的函数,以methods关键字开始,以end语句结束。
classdef ClassName
properties
PropertyName
end
methods
function obj=ClassName(arg1,...)
obj.PropertyName=arg1;
...
end
function ordinaryMethod(obj,arg1,...)
...
end
end
methods(Static)
function staticMethod(arg1,...)
...
end
end
end
上面代码中,有Static的为静态方法,没有的为一般方法。方法不同,调用的方法也有所不同。对于下面代码定义的一般方法:
classdef MyClass
methods
function out=ordinaryMethod(obj,arg1)
...
end
end
end
可以用MATLAB函数语法或点标记两种方式调用一般方法:
obj=MyClass;
r=ordinaryMethod(obj,arg1);
r=obj.ordinaryMethod(arg1);
一个完整的类
下面列出的是一个完整的类的定义,包含上面各种块的组合。
classdef(Sealed)MyClass<handle
properties(Access=private)
Prop1=datenum(date)
end
properties
Prop2
end
methods
function obj=MyClass(x)
obj.Prop2=x;
end
end
methods(Access={?MyOtherClass})
function d=myMethod(obj)
d=obj.Prop1+x;
end
end
end
枚举类
MATLAB中用enumeration块定义枚举,以enumeration关键字开始,以end语句结束。
classdef ClassName < SuperClass
enumeration
EnumerationMember
end
...
end
例如,下面的类定义两个枚举成员,表示逻辑上的false和true。
classdef Boolean < logical
enumeration
No(0)
Yes(1)
end
end