因为一些仿真的实际需要,笔者需要用一些OOP的编程方式在MALTAB里面,主要原因还是同一系列类型的变量要复制三份,而且要最好要分离,所以还是OOP好点。看了一些文档,很多部分写的比较细致。。。额。。实际上笔者只想找到类怎么定义,怎么创建对象,构造初始化这一些比较基本的内容,故写了以下内容作为笔记,例如set,get之类的方法都没有用到。。。只求能正常使用就好。
首先是用如下直接创建了一个类,出来就是一个模板文件
其中分割还是比较明显的,第一行是类名的定义,然后成员变量一列,方法一列,和其他的OOP语言没什么区别
classdef Untitled %UNTITLED 请在此处输入类的概要 % 请在此处输入详细说明 properties end methods end end
下面要注意的第一个地方就是在构造,如笔者直接用Untitled作为类名,其构造函数也为Untitled,按很多OOP语言习惯记得是构造不能够返回值的,但是如下
Matlab的构造必须要一个返回值,探究其为什么要返回值的相关内容省去,这个返回值实际上比较特殊,按笔者理解,实际上是这个类内部的一个引用对象,或者说内部对于匿名对象的一个引用(这么说好像也很不严谨),一般按照matlab的例程里面写成的是obj或者类名的简称,因为笔者一开始遇到的问题在于,我定义了一些成员变量,系统通过构造函数自动给这些成员变量初始化一个参数,构造函数是带初值的,如下
properties SIFS_FLAG; end methods function a=testClass(INPUT) SIFS_FLAG=INPUT; end end
随便弄了一个a当做返回值,程序能跑不报错。。但是怎么赋值都不行,同样的,我要在类中间的其他方法中间访问成员变量也不行,而且不能运行,直接报错,报的还是??? Error using ==> changeAll
Too many input arguments.
这样的错误,所以很让人费解。下面附上的是正确的方式,同时PS下,如下图在调用changeAll方法的时候输入参数为一个,即INPUT部分,obj是被自动隐含的。
原因我猜想就应该是前面提到的,在类构造的时候返回的就是在这个类中间所产生的对象的引用,所有后续对这个内中间成员变量的使用都必须要通过这个引用。基本上一个MATLAB可用的OOP这样也能够用了,关于继承方面MATLAB比较方便,只需要如下这样就行了,笔者所需要的主要在于封装,所以这一部分就没有继续试试了。
PS:这里我写的好像还是有点问题,如果要改变内部成员变量的值的话,返回参数还是需要obj的,第9行那里有点问题,还是需要function obj=changeAll