matlab面向对象教程【0】初识matlab面向对象
2017-05-06 10:13
113 查看
(本教程适用于已有一定matlab基础及面向对象程序设计基础,但没有matlab面向对象基础的读者参考)
不同于面向过程的语言,面向对象语言的核心在于如何编写一个合适的类(class),从而将我们要处理的对象赋予明确的属性以及编写通用的处理方法.matlab已经为我们提供了许多设计好的类,便于我们借助相关工具去处理音频,视频等等,但这些类都是为了处理专门问题而被设计的,有时不能满足我们的需要,尤其涉及到工具箱开发问题时,我们往往不得不自己设计类.本系列教程旨在于使读者对matlab面向对象程序设计有一个初步的了解,值得警醒的是,matlab素以其迅速的数值处理能力著称,面向对象只是一种手段,切不可忽略matlab的核心优势.
可以看到的是,这个m文件大致分为四个部分:
·第一部分是类名,以关键词classdef起始,这行下面的注释会在help弹窗中显示出来,为了方便别人使用这个类,请务必写好注释.
·第二部分是属性,以关键词properties起始,以配对的end结束,描述属于该类的对象具有怎样的性质.与C++不同的是,private public protected并非matlab代码中高亮显示的关键字.每个属性下方的注释都会在help弹窗中显示.
·第三部分是方法,以关键词methods起始,以配对的end结束,其中可以包含多个函数,但我们总是将第一个函数作为构造函数,构造函数会创建一个属于该类的对象,与C++相同,构造函数名即类名.值得注意的是,如果方法中需要对对象进行分析,那么应该向这个方法的参数中加入一个对象的实例(可以理解为你对这个实例的操作会被当做例子,应用于你需要操作的对象).同样的,如果需要变更一个对象的某种属性,不仅需要传入这个对象(即告知matlab你需要变更的是什么),也应该把变更结果返回,格式为:
·第四部分是事件,暂不作介绍.
方法的调用也遵循相似的格式,值得一提的是,我们不仅能够使用在类定义文件中的方法,其它文件中定义的方法也同样可以直接使用(而不需要在类定义中声明),一些常用的算符或函数也可以被重载(如plus 即+ 等),只需要在类定义的相同文件夹(通常取名为@ClassName)下,给出这些函数的定义即可.
之前提到过需要在函数定义的参数表中给出至少一个实例,但调用的时候可以不用写出,我们可以认为如下两种写法是等价的,至少从字数上来看是如此~:
假使我们再进行如下循环,则不难得到一个10*10的方阵:
这些处理与我们以前编写的代码无异,不再赘述.
下节预告: 迷宫生成的普利姆算法
不同于面向过程的语言,面向对象语言的核心在于如何编写一个合适的类(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
这些处理与我们以前编写的代码无异,不再赘述.
下节预告: 迷宫生成的普利姆算法
相关文章推荐
- Java基础(五)OOP面向对象之(一) 面向对象思想初识
- matlab面向对象教程【2】影讯抓取及其可视化展示(1/5)
- 从面向对象到模式再到真正的面向对象
- 从面向对象到模式再到真正的面向对象
- 初识PHP的面向对象
- [推荐]javascript 面向对象技术基础教程
- 从面向对象到模式再到真正的面向对象
- Delphi面向对象 COM [转载]Delphi面向对象学习随笔七:COM
- 面向对象软件构造(第2版)-第2章 面向对象的标准
- 面向对象的三大特性和面向对象开发
- 从面向对象到模式再到真正的面向对象
- 楚广明的.net教程,讲的很细很明白,面向对象部分
- 面向对象的程序设计-非常经典的解释与教程[转]
- php面向对象教程3
- php面向对象教程1
- [原创][PowerShell教程][04]PowerShell面向对象基础之一
- C语言中的面向对象-C语言中的面向对象思想
- 面向对象你真的懂了吗--面向对象的再理解
- php面向对象学习教程5
- [面向对象]面向对象设计原则