0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用MATLAB进行面向对象编程

冬至子 来源:鸣鸣锣的小屋 作者:Maxwell Luo 2023-07-21 17:28 次阅读

01

定义类

1.1 一个最简单的类

使用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 方法特性**

和属性特性一样,也可以对方法指定不同的特性。常用的特性参数如Access、Static。这里特别提一下Static参数,当Static = true时,方法为静态方法,不需要使用类对象的任何属性参数。静态方法通常作为实现类的功能函数存在。类似的函数还有类相关函数,即放在同文件下,类定义之后的局部函数。

图片

注意这里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特性和其他语言也有所不同

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MATLAB仿真
    +关注

    关注

    4

    文章

    174

    浏览量

    19640
  • C++语言
    +关注

    关注

    0

    文章

    146

    浏览量

    6878
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83473
收藏 人收藏

    评论

    相关推荐

    Python的面向对象编程详解

    一般编程可分为面向过程编程,和面向对象编程。Python的
    发表于 09-04 16:35 269次阅读
    Python的<b class='flag-5'>面向</b><b class='flag-5'>对象</b><b class='flag-5'>编程</b>详解

    labview面向对象编程

    点击学习>>《龙哥手把手教你学LabVIEW视觉设计》视频教程使用LabVIEW面向对象编程方法,对于大型测试应用程序来讲,面向对象相对于
    发表于 11-24 11:01

    labview面向对象编程

    有没有大神在labview中用面向对象编程的?请教一下怎样做?书上的对这方面的知识很少,无从下手,急急急急急急!
    发表于 08-08 14:26

    LabVIEW面向对象的ActorFramework(1)

    领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于
    发表于 02-10 14:09

    请问一下PLC支持面向对象编程吗?

    传统PLC编程方式是什么?PLC支持面向对象编程吗?如何进行面向
    发表于 07-02 07:29

    面向对象编程及其三大特性 精选资料分享

    Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为 目标进行编程,不同于面向对象的是谁在受影响。与
    发表于 07-21 08:38

    基于面向对象的LabVIEW编程有哪些优势

    基于面向对象的LabVIEW编程有哪些优势?如何去学习基于面向对象的LabVIEW编程
    发表于 08-24 07:22

    谈谈面向对象编程

    在工业自动化领域,梯形图逻辑仍然是最常用的编程语言之一,但对于更加复杂的控制对象面向对象编程不失为一种高效率的方式。下面先来谈谈
    发表于 09-08 07:47

    面向对象编程语言的特点

    在工业自动化领域,梯形图逻辑仍然是最常用的编程语言之一,但对于更加复杂的控制对象面向对象编程不失为一种高效率的方式。下面先来谈谈
    发表于 09-08 07:44

    请问一下如何进行面向对象编程

    请问一下如何进行面向对象编程
    发表于 09-18 06:16

    基于结构体的面向对象编程技巧是什么?

    基于结构体的面向对象编程技巧是什么?
    发表于 09-29 08:08

    面向对象编程总结

    如何从面向过程到面向对象OOP?面向对象是什么?有何特点?
    发表于 09-29 08:19

    面向对象编程介绍

    目录一、面向对象编程介绍1.面向过程编程2.函数式编程3.
    发表于 12-13 07:22

    面向对象编程练习

    实验 3 面向对象编程练习 一、实验目的     通过编程和上机实验理解 Java 语言是如何体现面向
    发表于 09-23 18:57 2924次阅读

    嵌入式C语言面向对象编程应用及优势

    既然面向对象是一种编程思想,而编程语言只是一种工具,那么,思想与工具之间就不存在一种强耦合的关系,C++可以面向
    发表于 11-10 12:00 1121次阅读
    嵌入式C语言<b class='flag-5'>面向</b><b class='flag-5'>对象</b><b class='flag-5'>编程</b>应用及优势