格式
classdef (attribute = value) ClassName < Superclass
end
定义多个attribute时,在括号中用逗号隔开。
Attributes
Name | Class | Description |
---|---|---|
Hidden | logical | 在matlab输出中不显示该类 |
InferiorClasses | cell, 即{} | 在类中建立优先关系 |
ConstructOnLoad | logical | 当从mat文件中装载对象时调用class constructor |
Sealed | logical | true则无法创建子类 |
InferiorClasses
classdef (InferiorClasses = {?class1, ?class2}) myClass
end
?classname定义了一个meta.class对象
该属性用于建立自定义的优先关系。
但是matlab的内置类优于用户自定义类。
ConstructOnLoad
ConstrucOnLoad调用的class constructor是无参数的。需要参数的话,在类中添加方法loadobj。
超类的attribute无法继承,不会影响到子类。
文件组织方法
法一
不使用文件夹,直接创建和类同名的文件。
法2
使用文件夹需要加上@,并且每个文件夹包含和文件夹名称相同的类的定义和函数。必须包含和文件夹名称相同的类.m文件。
法3
打包成为package,需要使用命名空间。package文件夹以+开头命名。
package说明
package相当于定义了命名空间。
- 查看package下的文件内容:
what Packagename
- 调用package下的内容
z = mypack.myfunc(x, y)
obj = mypack.myclass(arg1, arg2, ...)
obj.mymethod(arg)
mymethod(obj, arg)
mypack.myclass.staticmethod(arg)
必须放在classdef文件中的内容
class constructor
delete方法
名字中有.的函数:converter methods以及property set and get access methods。
定义子函数
在classdef - end块之外定义的函数称为subfunction。这些函数可以在文件的任何部分中调用,但是文件外不可以。
函数可以返回该类的某些属性,但不是必要的,因此不放在classdef中。
classdef NewClass
end
function x
end
Debug方法
统一采用path separator
编辑类文件
edit +Pack/@classpath/classpath
编辑类函数
edit +Pack/@classpath/classfunc
dbstop
修改或删除class
创建class时,MATLAB将它的定义一次性装入内存,如果类定义改变时,需要先清除旧的对象。
clear obj
也可以采用clear classes一次性清除。
情况比较复杂。clear classes在以下情况中需要注意:
- 含有实例的类不能被删除
- 使用clear obj命令删除实例
- 采用persistent variable保护objects。需要删除时,如果persistent variable在函数中,需要先mlock函数,再clear functions删除函数,最后删掉class。
- 对于默认property value,载入类时matlab会存储其值,需要clear classes删掉他。
- 类似的,属性Constant = true的property,类需要clear classes.
来源于MATLAB OOP文档以及《MATLAB面向对象编程——从入门到设计模式》