本系列内容为《MATLAB面向对象编程–从入门到设计模式》学习笔记,特此说明。
定义类的方法
类的方法(Method)一般用来查询(Query)对象的状态,或者向对象发出一个命令(Command),比如操作对象中的数据。在MATLAB面向对象编程中,类方法的定义要放在method block中,和一般函数定义类似,方法的定义以关键词function开始,以关键词end结束。
......
methods
function [returnValue]=functionName(arguments)
......
end
end
若成员方法代码量比较大,可以在类定义中仅给出函数的声明,把函数实现放到一个独立的文件中。
说明:
- 这种方法需要创建一个@classname的文件夹,然后把类的定义和方法的实现都放到该文件夹中,然后在@classname的外部调用该类的构造函数。
- 某些函数不能采用这种方式,比如类的Constructor和Destructor(析构函数),以及Static方法,都必须在类的定义中实现。
调用类的方法
点调用方式:obj.memberFunction(arg1,arg2)
函数调用方式:memberFunction(obj,arg1,arg2)
点调用和函数调用类方法的区别
虽然两种方法基本等价,但仍有一些细微的区别:
- 使用点调用方式符合面向对象的风格,程序的可读性高,这是施加在对象上的一种操作。使用函数调用方式满足传统的面向过程的编程习惯,在某些情况下,兼容旧的MATLAB代码。
- 使用点调用可以清楚的表示MATLAB调用的时成员方法还是函数。
类的构造函数
构造函数(Constructor)是一种特殊的成员方法:
- Constructor和类的名称相同,用来创造类的实例。
- MATLAB类定义中只能有1个Constructor·。
- Constructor有且只能有一个返回值,且必须是新创建的对象,这是唯一创建一个新的对象的方式。
classdef Point2D < handle
properties
x
y
end
methods
function obj = Point2D(x0,y0) %返回值必须是一个obj
obj.x=x0;
obj.y=y0;
end
end
end
>> clear classes;
>> p1=Point2D(1.0,2.0); %使用构造函数创建对象
在构造函数中给属性赋值
在Constructor中也可以给对象的属性赋值。即使在property block中已经提供了默认值,Constructor中赋的新值也将取代property block中的默认值。
classdef Point2D < handle
properties
x=cos(pi/2); %Constructor被调用之前x的默认值
y=sin(pi/3); %Constructor被调用之前y的默认值
end
methods
function obj = Point2D(x0,y0) %返回值必须是一个obj
obj.x=x0; %新的x0,y0将会取代初值
obj.y=y0;
end
end
end
MATLAB在声明一个对象时的工作顺序是:先装载类的定义,然后再调用构造函数,这时属性被重新赋值。
如何让构造函数接受不同数目的参数
由于MATLAB是弱类型检查的解释性语言,不能通过函数函数重载的方式找到相匹配的函数,但是可以通过参数数目(nargin)的不同来选择不同的代码。
classdef Point2D < handle
properties
x=cos(pi/2); %Constructor被调用之前x的默认值
y=sin(pi/3); %Constructor被调用之前y的默认值
end
methods
function obj = Point2D(x0,y0)
if nargin == 0 % 如果没有提供参数
obj.x=cos(pi/2);
obj.y=sin(pi/3);
else if nargin == 2 %如果提供了参数
obj.x=x0;
obj.y=y0;
end
end
end
end
默认构造函数
默认构造函数(Default Constructor)一般性定义:不带任何参数的构造函数。
可以把默认构造函数理解成构造函数内部可以处理nargin==0的情况,并且返回新构建的对象的那部分代码。