这里写目录标题
1 入门
1.1 如何把面条抽象成Class
以面条为例。
classdef Noodle < handle
properties
type
state
end
methods
function boil(obj)
obj.state = 'done';
end
end
end
其中Noodle是类的名称,type和state是类的property,类的属性,也可以称作成员变量。
将其类定义的保存名为Noodle.m,与类同名。
调用类的方法
noodle = Noodle(); %调用构造函数的创建对象obj。
noodle.boil(); %调用成员方法boil,noodle属性改变。
1.2 文件类
classdef FileClass < handle
properties
name
path
format
data
fID
end
methods
function obj = FileClass(name,path)
obj.name = name;
obj.path = path;
obj.open();
obj.read();
end
function open(obj)
fullpath = strcat(obj.path,filesep,obj.name);
obj.fID = fopen(fullpath);
end
function read(obj)
obj.data = textscan(obj.fID,'%s %s %s'); %假定数据文件为两列
end
function delete(obj)
fclose(obj.fID);
disp('file closed');
end
end
end
所有的属性和操作均为public,可以直接访问文件的数据属性。
fileobj = FileClass(filename,path);
a = fileobj.data;%赋值给a
面向对象编程的优点:
- 将一个复杂的大问题分解为一个个小的模块。
- 通过组合和信息传递完成相应的任务。
- 通过继承实现代码复用
- 修改和添加模块不影响其他模块
2 基于MATLAB的面向对象编程入门
2.1 如何定义一个类(Class)
MATLAB可以通过whos检查变量所属的类。
用户可以设计自己的类。
classdef Point2D<handle
properties %属性
%...
end
methods %方法
%...
end
end
- MATLAB的所有Class均以classdef开始
- classdef后紧跟类名,
- <handle 是MATLAB的抽象类,做父类
如简单的二维点类定义如下
classdef Point2D<handle
properties %属性
x
y
%...
end
methods %方法
function obj = Point2D(x0,y0)%...
obj