在 MATLAB 中,面向对象编程(Object-Oriented Programming, OOP)允许定义类(class),这些类包含属性(attributes)和方法(methods)。
1. 属性(Properties)
属性是类中用于存储数据的变量,它们定义了对象的状态或特征。
属性的定义
使用 properties
代码块定义属性。例如:
classdef MyClass
properties
Property1 % 公有属性
Property2 = 10 % 设置默认值
end
end
属性修饰符
可以通过修饰符控制属性的访问和行为:
-
Access 修饰符:
public
(默认):属性可在类的任何地方访问。protected
:只能在类及其子类中访问。private
:只能在定义它的类中访问。
-
其他修饰符:
Constant
:定义常量属性,值不能更改。GetAccess
/SetAccess
:分别控制属性的读取和写入权限。Dependent
:属性的值由计算得来,不直接存储。Transient
:不随对象保存而保存。
示例:
classdef MyClass
properties (Access = private)
PrivateProperty
end
properties (SetAccess = private)
ReadOnlyProperty
end
properties (Constant)
PiValue = 3.14159
end
end
2. 方法(Methods)
方法是类中用于操作数据或实现功能的函数。
方法的定义
使用 methods
代码块定义方法。例如:
classdef MyClass
methods
function obj = MyClass() % 构造函数
disp('Object created');
end
function result = addNumbers(obj, a, b) % 普通方法
result = a + b;
end
end
end
方法修饰符
-
Access 修饰符:
public
(默认):方法可被任何代码调用。protected
:只能在类及其子类中调用。private
:只能在定义它的类中调用。
-
Static 方法:
静态方法与类的实例无关,可以直接通过类名调用。methods (Static) function result = multiply(a, b) result = a * b; end end
-
Abstract 方法:
抽象方法在父类中定义,但没有实现,需要子类实现。methods (Abstract) result = abstractMethod(obj, input) end
3. 类的基本结构
以下是一个完整的 MATLAB 类的示例:
classdef MyClass
properties
Property1
Property2 = 10
end
properties (Access = private)
PrivateProperty
end
methods
% 构造函数
function obj = MyClass(val)
if nargin > 0
obj.Property1 = val;
end
end
% 普通方法
function result = add(obj, a, b)
result = a + b;
end
% 静态方法
function result = staticExample(~)
disp('This is a static-like method');
end
end
end
4. 类中的属性与方法访问
-
创建对象:
obj = MyClass(5);
-
访问属性:
obj.Property1 = 20; disp(obj.Property2);
-
调用方法:
result = obj.add(3, 4);
-
静态方法调用:
result = MyClass.multiply(3, 5);
MATLAB 的面向对象功能可以帮助组织复杂程序,特别适用于需要对数据和行为进行抽象建模的场景。