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

(本教程适用于已有一定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

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

下节预告: 迷宫生成的普利姆算法

猜你喜欢

转载自blog.csdn.net/weisuowangshuai/article/details/71248940