您的位置:首页 > 编程语言 > MATLAB

matlab面向对象教程【0】初识matlab面向对象

2017-05-06 10:13 113 查看
(本教程适用于已有一定matlab基础及面向对象程序设计基础,但没有matlab面向对象基础的读者参考)

不同于面向过程的语言,面向对象语言的核心在于如何编写一个合适的类(class),从而将我们要处理的对象赋予明确的属性以及编写通用的处理方法.matlab已经为我们提供了许多设计好的类,便于我们借助相关工具去处理音频,视频等等,但这些类都是为了处理专门问题而被设计的,有时不能满足我们的需要,尤其涉及到工具箱开发问题时,我们往往不得不自己设计类.本系列教程旨在于使读者对matlab面向对象程序设计有一个初步的了解,值得警醒的是,matlab素以其迅速的数值处理能力著称,面向对象只是一种手段,切不可忽略matlab的核心优势.

$0.1 matlab类设计

在matlab主页中选择 新建-类 即可创建一个用于声明类的m文件,文件大致包括如下内容:

classdef ClassName
% description of this class
% will be shown when using 'help ClassName'
properties
property_1;
% description, will be shown too.
property_2;
...
end

methods
function obj=ClassName(input)
...
end
function re=method_1(obj,input)
...
end

events
...
end
end


可以看到的是,这个m文件大致分为四个部分:

·第一部分是类名,以关键词classdef起始,这行下面的注释会在help弹窗中显示出来,为了方便别人使用这个类,请务必写好注释.

·第二部分是属性,以关键词properties起始,以配对的end结束,描述属于该类的对象具有怎样的性质.与C++不同的是,private public protected并非matlab代码中高亮显示的关键字.每个属性下方的注释都会在help弹窗中显示.

·第三部分是方法,以关键词methods起始,以配对的end结束,其中可以包含多个函数,但我们总是将第一个函数作为构造函数,构造函数会创建一个属于该类的对象,与C++相同,构造函数名即类名.值得注意的是,如果方法中需要对对象进行分析,那么应该向这个方法的参数中加入一个对象的实例(可以理解为你对这个实例的操作会被当做例子,应用于你需要操作的对象).同样的,如果需要变更一个对象的某种属性,不仅需要传入这个对象(即告知matlab你需要变更的是什么),也应该把变更结果返回,格式为:

function obj=Change(obj,inputs)
obj.property_1=f_1(inputs);
obj.property_2=f_2(inputs);
...
end


·第四部分是事件,暂不作介绍.

$0.2 对象属性的访问及方法的调用

对象属性的访问和C++很类似,值得注意的是matlab也支持直接访问对象矩阵的属性(这将会返回一个等规模的矩阵),格式为:

a=ObjectName.PropertyN;
A=[ObjectArray.PropertyN];


方法的调用也遵循相似的格式,值得一提的是,我们不仅能够使用在类定义文件中的方法,其它文件中定义的方法也同样可以直接使用(而不需要在类定义中声明),一些常用的算符或函数也可以被重载(如plus 即+ 等),只需要在类定义的相同文件夹(通常取名为@ClassName)下,给出这些函数的定义即可.

之前提到过需要在函数定义的参数表中给出至少一个实例,但调用的时候可以不用写出,我们可以认为如下两种写法是等价的,至少从字数上来看是如此~:

function(ObjectName,inputs);
ObjectName.function(inputs);


$0.3 类矩阵的创建

矩阵的处理总是matlab的本职工作,类矩阵的创建显然是必要的,不难想象,如下循环可以创建一个长度为10的类向量:

for i=1:10
vecA(i)=ClassName(inputs);
end


假使我们再进行如下循环,则不难得到一个10*10的方阵:

for j=1:10
arrayA(j)=vecA;
end


这些处理与我们以前编写的代码无异,不再赘述.

下节预告: 迷宫生成的普利姆算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 面向对象