本帖最后由TS-boys在2020-10-30 13:29编辑
1 .引文
面向对象编程是一种非常常见的编程思想,它将“数据/属性”和“方法/函数”打包为对象,以帮助维护大型软件。 基于这一思想,不同的编程语言如c、JAVA等进行了不同的解释。 MATLAB也同样支持这种编程思想,并有增加的趋势。
2 .基本的面向对象编程
2.1创建对象
非常简单的创建方法。 与新函数和脚本相同,但这里是新的class。 新建后会自动显示模板,根据模板进行修改即可。
p1.png(68.78kb,下载次数: 18 )。
2020-10-30上传13:16
2.2对象的定义
定义对象当然需要名称。 classdef之后是对象的名称。 有效的对象名称。 与MATLAB变量的规则相同,不能使用字符开头、区分大小写或特殊字符。 例如,student是有效的对象名称。 修改并保存后,将得到同名的student.m文件并创建对象。
2.3数据/属性
对象必须包含一定的数据或属性。 例如,“学生”作为对象,其名称、年龄和分数可能是数据。 在MATLAB中定义数据的关键字是properties … end对,在关键字之间定义多个属性名即可。 同样,属性名称命名规则与MATLAB变量的命名规则相同。 在此定义三个属性: name、age和score。
2.4方法/函数
在面向对象的编程思想中,方法/函数是对象数据的运算或操作,用于实现特定的功能。 在MATLAB中用关键字methods … end配对,不同的函数用function…end配对。 它的结构是这样的
p2.png ) 29.04kb,下载次数: 12 ) )。
2020-10-30上传13:16
2.4.1构造函数
在JAVA中学习面向对象编程时,最常见的概念之一是构造函数,而在实例化每个对象的过程中首先调用的是构造函数。 MATLAB也有类似的概念,如果将function和classdef的名称设置为相同,则相当于构造函数。 某些语言可以定义多个构造函数,但MATLAB只能定义一个构造函数。 如果在实例化过程中需要为不同的输入参数调用不同的构造函数,则可以在构造函数中使用switch nargin实现。 下面的示例使用这种方法实现student对象的四个构造函数
2.4.2 get/set方法
说到对象方法,get和set都非常常见。 对于get方法,函数定义通常为function property _ value=get _ property (obj ),因为它输入对象的实例并返回其属性值。 函数只需要为输出变量赋值。 对于set方法,输入对象的实例和需要更改其属性的新值,并返回已更改的对象实例。 因此,函数定义通常为functionobj=set_property(obj,value ),在这种情况下,调用时将返回新的对象实例。
3 .示例
这里是一个student对象的示例,已经在r2020a上进行了测试,但应该是很旧的版本才能使用。
student.m
(1.09 KB,下载次数: 1)。
2020-10-30上传13:29
单击文件名下载附件
3.1属性
如上所述,定义了三个属性:名称、年龄和分数。
3.2方法
构造函数的定义是functionobj=student(name,age,score ),函数名称与对象名称匹配。 构造函数的第一个语句是switch nargin,它确定输入参数的数量。 如果在调用时未输入参数,则返回空的、年龄为18且分数为0的student对象。 如果在调用时输入了一些参数,则返回部分包含内容的对象。
get/set的定义如上所述,getname和setname用于操作对象的名称。
newyear用普通的方法,假设新学期到来,student的年龄加1,并清空其分数。
3.3使用
student对象可以在以下脚本中使用
sudent1=student(% (创建%对象
name=student1.getname %获取对象name属性
sudent1=student1. set name (' Xiaoli ' ) %set对象name属性
student1=student1.newyear %对象在newyear操作中复制代码
4 .扩展
关于r2020a版,完整说明:
这里补充几个常用的特性
4.1继承
仅在定义对象时声明即可,例如classdef math_student student可以定义学生的子类、数学系的学生。
4.2权限控制
属性和方法都可以控制访问权限。 例如,由于methods(private )可以定义专用方法,因此在一个classdef下,控制不同访问权限的属性和方法的多个properties…end和methods …end部分
4.3局部函数
虽然以classdef开头,但本质上是m文件,所以可以使用本地函数。 也就是说,可以通过在文件末尾添加functiony=XXX(x )来定义一些函数。 这些函数仅在此文件的范围内有效。