使用MATLAB进行面向对象编程

zxl19 2021-07-06

使用MATLAB进行面向对象编程(Object-Oriented Programming,OOP)。

类的定义

MATLAB自带的类模板

classdef MyClass
    %MYCLASS 此处显示有关此类的摘要
    %   此处显示详细说明

    properties
        Property1
    end

    methods
        function obj = MyClass(inputArg1,inputArg2)
            %MYCLASS 构造此类的实例
            %   此处显示详细说明
            obj.Property1 = inputArg1 + inputArg2;
        end

        function outputArg = method1(obj,inputArg)
            %METHOD1 此处显示有关此方法的摘要
            %   此处显示详细说明
            outputArg = obj.Property1 + inputArg;
        end
    end
end

示例类实现

classdef (Attributes) ClassName < SuperclassName
    properties (Attributes)
        PropertyName
        PropertyName size class {validation functions}
    end
    methods (Attributes)
        function obj = methodName(obj,arg2,...)
            ...
        end
    end
    events (Attributes)
        EventName
    end
end

classdef (Attributes) ClassName < SuperclassName
    enumeration
        EnumName
    end
end

说明

  1. 类文件以classdef关键词开始,以end结束;
  2. 类中包含变量(properties)、方法(methods)、事件(events)和枚举(enumeration),以end结束;
  3. 类文件中可在类声明后定义只在类中使用的函数;
  4. 可直接使用模板新建类文件;
  5. 类中的函数可定义在外部文件中,但是要和类文件放到同一文件夹中,文件夹名为@+类名
  6. 类成员名可按Tab自动补全;
  7. 变量的属性(Attributes)默认public,可给默认初值;
  8. 属性包括:GetAccessSetAccessConstant,其中Constant可用类名直接调用,无需创建对象;
  9. 可有多个变量代码块,对应不同属性;
  10. 方法包括构造函数(可选),与类文件同名,在构造对象时调用进行初始化,返回obj
  11. 定义getset方法,在特定变量被访问时调用:e.g. 输入值合法性判断;
  12. 方法的属性也可定义,Static属性方法,可用类名直接调用,无需创建对象;
  13. 可重载函数、运算符:e.g. plotsubsrefsubsasgn
  14. 使用<从父类继承,实现代码复用,多个父类间用&连接;
  15. 继承handle类,通过传递句柄(相当于传递引用)减少值传递和拷贝,e.g. reset
  16. 构建delete方法,相当于析构函数;
  17. 通过对handle类定义事件来监督对象和变量的变化,调用addlistener函数构建listener,通过notify函数触发事件,listener接收触发后执行预先定义的回调函数(Callback);
  18. 被监督变化的变量属性需要为SetObservable
  19. 在修改类的定义后已创建的类不会更改,因此需要运行clear,重新运行代码;

资料

书籍

  1. Object-Oriented Programming
  2. A Guide to MATLAB Object-Oriented Programming
  3. MATLAB面向对象编程——从入门到设计模式
  4. Object Oriented Programming and Classes in MATLAB

视频

  1. Developing Classes Overview
  2. 【官方油管搬运】(英字)和大师学MATLAB编程 (Loren Shure的课堂)

参考

  1. Object-Oriented Programming in MATLAB
  2. Introduction to Object-Oriented Programming in MATLAB
  3. Classes-MATLAB Help Center
  4. MATLAB面向对象编程是什么样的体验?-知乎