Skip to content

MATLAB - 面向对象编程

面向对象编程(Object-Oriented Programming, OOP)是一种强大的软件设计范式,它使软件更模块化、可重用且易于维护。在 MATLAB 中,OOP 允许您创建自定义数据类型(对象),将数据(属性)和操作这些数据的函数(方法)捆绑成一个单一的单元。这对于构建复杂的应用程序、自定义工具箱或管理复杂的数据结构非常理想。

  • 封装:将数据和函数捆绑在一起,隐藏内部复杂性。一个对象管理自己的状态。
  • 重用性:定义一个类一次,然后创建它的多个实例(对象)。使用继承来扩展现有类,而无需重写代码。
  • 可维护性:代码更有组织性、模块化,更易于调试和更新。
  • 自定义:重载(Overload)现有 MATLAB 函数(如 plot),使其专门与您的自定义对象协同工作。

您在名为 ClassName.m 的文件中定义一个类。基本结构是一个 classdef 块。

让我们构建一个简单实用的类来表示一个温度计。它将存储摄氏温度,并具有获取华氏温度和显示其状态的方法。创建一个名为 SimpleThermometer.m 的文件。

一旦 SimpleThermometer.m 文件位于您的 MATLAB 路径上,您就可以在命令窗口或脚本中创建和使用它的对象。

属性是存储对象数据的变量。您可以控制它们的访问权限:

  • Access = public:(默认)可从任何地方访问。
  • Access = protected:只能由类或其子类的方法访问。
  • Access = private:只能由类自身的方法访问。

方法是属于类的函数。任何方法的第一个参数始终是对象本身(通常命名为 obj)。构造函数是一个与类同名的特殊方法,用于创建和初始化对象。

继承允许一个新类(子类)从现有类(超类)继承属性和方法。这是代码复用的基石。让我们创建一个 DigitalThermometer,它继承自 SimpleThermometer 并增加了电池电量属性。

4. 句柄类与值类(一个关键的 MATLAB 概念)

Section titled “4. 句柄类与值类(一个关键的 MATLAB 概念)”

这是 MATLAB OOP 中的一个关键区别:

  • 值类(默认):行为类似于标准 MATLAB 数组(例如,数字)。当您复制一个值对象时,您会得到一个完整、独立的副本。修改副本不会影响原始对象。我们的 SimpleThermometer 就是一个值类。
  • 句柄类:继承自内置的 handle 类(classdef MyClass < handle)。当您复制一个句柄对象时,您只是复制了引用(句柄)。原始对象和副本都指向相同的底层数据。修改副本会影响原始对象。这对于表示唯一物理实体(如文件句柄或 GUI 窗口)的对象很有用。