使用MATLAB进行面向对象编程

使用classdef...end语句块来标识一段类的定义,这一点和MATLAB其他代码块的语法风格是类似的,如定义函数的function...end、定义循环的for...end等等。要注意类定义文件的文件名要保持和类名一致,否则MATLAB在运行时会按照类定义文件名作为可被识别的标识符。

如下面这个示例中,定义了Student类,以及它的属性和方法。这个实例展示了定义类的最简单的方法,MATLAB还提供了很多高级的类特性定义方法,接下来的章节会逐一介绍。

1.2类文件组织

对于一个简单类来说,所有的方法实现可以放在同一个类文件中。但是随着类实现的功能逐渐庞大,就可以把某一个类方法的实现单独放在一个类方法文件中,和类定义文件一起放在以<@类名>的类文件夹下。同时,通过把类文件或者普通函数文件放在以<+包名>的包文件夹下,可以让类有独立的名称空间。使用包文件夹中的类或者函数时,必须加入包名和点操作符修饰(包括包内的类在使用包中其他类时也要使用包名修饰,不会因为在同一个包内就能搜索到)。

02

类属性

2.1属性特性

通过属性特性来约束属性的行为,语法是在属性关键字之后添加小括号括起的键值对。常用的属性特性有Access、Constant、GetAccess、SetAccess等。当用户不指定属性特性时,它们有各自的默认值,如Access默认就是public。

2.2属性验证

MATLAB是一种弱类型的语言,一般情况下MATLAB会做自动类型推断。MATLAB提供了很多方式来验证属性满足用户的某种需求,如必须是string类型、必须满足一定的维度要求、必须大于某一数值等。这些都是通过类的属性验证语法来实现的。

这里额外提一下属性验证函数,除了自带的一些属性验证函数(如mustBePositive、mustBeGreaterThan、mustBeNumeric)等,还允许用户自定义属性验证函数,这些属性验证函数放在和类定义的语句之后。

03

类方法

3.1方法调用

和C++不同的是,MATLAB没有传递给类方法的隐藏类对象,如this指针,必须将类的对象显式传递给方法。对于普通方法,通常第一个参数用于传递类对象,也通常写作obj。这一点和python的__init__(self,...)很像。调用方法时,可以使用函数式或者点操作符,这里我认为函数式调用方法是MATLAB的特色。函数式调用方法时,会涉及到对象匹配的优先级判定,因为不同的对象可能会存在同名的方法,由MATLAB的内部机制决定执行哪个类对象的方法。

**3.2方法特性**

注意这里grow方法返回了对象本身,这是因为如果修改了类对象的属性,需要返回对象本身才能体现修改。猜测这是因为MATLAB的函数是按值传递的特性造成的,因此修改对象后必须返回对象的副本。如果对象继承自handle类,那么可以避免这一步,handle类是按引用传递的。

3.3函数重载

重载MATLAB函数的方法是定义一个与要重载的函数同名的类方法。在类实例中调用该函数时,MATLAB会调度该类方法。还可以通过用适当的名称定义类方法来重载MATLAB算术、逻辑、关系和索引运算符。这些运算符有对应的特殊函数名,如运算符+对应的内建函数就是plus。

3.4构造函数

构造函数是一种特殊的类方法,和类同名,且必须放在类定义文件中,不可以放在单独的文件中。可以在构造函数中使用其他函数一起完成构造。

3.5创造对象数组

MATLAB类对象支持定义数组特性。在C++中,需要定义一个对象数组来保存各个对象的指针,但是MATLAB类对象本身就支持多维特性。通过在构造时指定对象的维度,可以返回多维的对象数组。

这里需要注意的是,使用obj(m,n)=obj的语法时,已经改变了对象的维度属性,因此必须返回新的obj对象,哪怕继承了handle类。这一点在构造函数使用了其他辅助函数时特别容易忽视和犯错。

04

总结

MATLAB面向对象编程为组织大型工程提供了基础,同时它的OOP特性和其他语言也有所不同

THE END
1.Python究竟是不是面向对象的编程语言?Python中的面向对象编程具有灵活性和易用性,使得代码更加模块化和可维护。通过面向对象编程,可以提高代码https://www.zhihu.com/question/266245345/answer/3418493011
2.Python教程(22)——Python面向对象的属性和方法Python面向对象编程中,属性和方法是类及其对象的重要组成部分。如果说封装、继承和多态是面向对象编程中的思想,那么类的属性和方法就是骨架,因为有属性和方法,面向对象编程才变的有血有肉。属性 属性是类或对象所拥有的数据,它用于描述对象的特征和状态。属性可以是实例属性(对象特有的属性)或类属性(属于类本身https://baijiahao.baidu.com/s?id=1787708887930656726&wfr=spider&for=pc
3.Python之面向对象python面向对象Python之面向对象 1、对面向对象的理解 ●?向对象(Object Oriented)是?种程序设计思想,?的是降低 ?规模程序的设计复杂度,提?代码的重?性。 ●它是将程序的功能进?模块化的设计,抽象成有“属性”和“?法”的“类” ,通过根据这些“类”创建出来的对象实例,进?相互的调?,完成程序https://blog.csdn.net/niubilitygeorge/article/details/141727116
4.Python语言的面向对象编程51CTO博客面向对象编程,即OOP,对于面向对象的语言来说,常常会提到封装、继承、类等概念。 面向对象的由来:基于哲学中的万物皆对象,核心思想是将我们的程序对象化,模块化,在Python语言中常用class命名一个类,比如class Person(),class Student等等。在类中常常有属性和行为,比如在Person这个类中有名字,身高,体重等属性,这些Pythttps://blog.51cto.com/u_14229365/2923950
5.Python(2)十三、Python面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程的2个非常重要的概念:类和对象 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个https://www.jianshu.com/p/715a04efa469
6.Python中的==与is关键字,是一样的吗腾讯云开发者社区双等号==运算符和is关键字是Python中比较对象的常用语句,本文将通过几个例子了解它们之间的区别。 双等号==运算符 当赋值给被比较对象的值相等时,双等号==运算符返回True。==运算符在比较对象时不匹配两个对象的内存位置,因此,即使两个对象的内存位置不同但值相同,双等号运算符也将返回True。简而言之,==运算符https://cloud.tencent.com/developer/article/2015768
7.python语言是免费还是收费的?python● Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。 ● Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。 到此这篇关于python语言是免费还是收费的?的文章就介绍到这了,更多相关python语https://www.jb51.net/article/188651.htm
8.python编程语法有什么?Python是一种面向对象的编程语言,支持类、对象、继承、多态等面向对象的特性。开发者可以使用类来创建自定义的对象,并通过继承和多态来实现代码的重用和扩展。 6. 文件操作 Python提供了丰富的文件操作函数和方法,可以方便地读取、写入和操作文件。通过打开文件、读取或写入数据,并在使用完毕后关闭文件,可以有效地管理https://www.bwie.com/jsgh/117.html
9.GitHub例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。 通过上面这些介绍,我们可以得出. Python是一门动态解释性的弱类型定义语言。5. Python的种类Cpython Python的官方版本,使用C语言实现,使用最为https://github.com/StrvieMeet/Python
10.入门·python教程·看云Python 是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。 Python 是交互式语言:这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。 Python 是面向对象语言:这意味着Python支持面向对象的风格或代码封装在对象的编程技术。 https://www.kancloud.cn/loveyh1557/python/954328