MATLAB面向对象程序设计.pptx

上传人:wj 文档编号:12769247 上传时间:2023-06-07 格式:PPTX 页数:153 大小:697.34KB
下载 相关 举报
MATLAB面向对象程序设计.pptx_第1页
第1页 / 共153页
MATLAB面向对象程序设计.pptx_第2页
第2页 / 共153页
MATLAB面向对象程序设计.pptx_第3页
第3页 / 共153页
MATLAB面向对象程序设计.pptx_第4页
第4页 / 共153页
MATLAB面向对象程序设计.pptx_第5页
第5页 / 共153页
MATLAB面向对象程序设计.pptx_第6页
第6页 / 共153页
MATLAB面向对象程序设计.pptx_第7页
第7页 / 共153页
MATLAB面向对象程序设计.pptx_第8页
第8页 / 共153页
MATLAB面向对象程序设计.pptx_第9页
第9页 / 共153页
MATLAB面向对象程序设计.pptx_第10页
第10页 / 共153页
MATLAB面向对象程序设计.pptx_第11页
第11页 / 共153页
MATLAB面向对象程序设计.pptx_第12页
第12页 / 共153页
MATLAB面向对象程序设计.pptx_第13页
第13页 / 共153页
MATLAB面向对象程序设计.pptx_第14页
第14页 / 共153页
MATLAB面向对象程序设计.pptx_第15页
第15页 / 共153页
MATLAB面向对象程序设计.pptx_第16页
第16页 / 共153页
MATLAB面向对象程序设计.pptx_第17页
第17页 / 共153页
MATLAB面向对象程序设计.pptx_第18页
第18页 / 共153页
MATLAB面向对象程序设计.pptx_第19页
第19页 / 共153页
MATLAB面向对象程序设计.pptx_第20页
第20页 / 共153页
亲,该文档总共153页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MATLAB面向对象程序设计.pptx

《MATLAB面向对象程序设计.pptx》由会员分享,可在线阅读,更多相关《MATLAB面向对象程序设计.pptx(153页珍藏版)》请在冰点文库上搜索。

MATLAB面向对象程序设计.pptx

MATLAB面向对象程序设计,第1章绪言,1.1如何学会一门编程语言1.2做笔记的方法,1.1如何学会一门编程语言,1.一本好书或一套好的视频:

体系完整、讲解生动、知识准确2.一本好的练习册:

能够得到充分的锻炼,内化知识3.一段比较孤独的时间:

不受干扰、深入学习、突破枯燥期4.留下笔记或电子文档,1.2做笔记的方法,1.抓主干:

浏览章节,把定义、格式和注意事项标出。

2.读范例:

仔细看解释部分和example,理解内容。

3.记录:

把主干部分记录下来,用作提醒和助记。

4.练习:

练习这一章节的内容5.丰富:

根据练习结果添加意义、范例和说明,第2章MATLAB基础知识,MATLAB的help文档,MATLAB的help文档是学习MATLAB的重要工具之一。

MATLAB的help文档有规则定义、解释说明和范例,很多问题可以在help文档里找到答案。

Matlab运算符,1.算术运算符算术运算因所处理的对象不同,分为矩阵和数组算术运算两类。

2.关系运算符,需要明确指出的是,MATLAB的关系运算虽可看成矩阵的关系运算,但严格地讲,把关系运算定义在数组基础之上更为合理。

关系运算是元素一对一的运算结果。

3.逻辑运算符,为提高运算速度,MATLAB还定义了针对标量的先决与和先决或运算。

先决与运算是当该运算符的左边为1(真)时,才继续与该符号右边的量做逻辑运算。

先决或运算是当运算符的左边为1(真)时,就不需要继续与该符号右边的量做逻辑运算,而立即得出该逻辑运算结果为1(真);否则,就要继续与该符号右边的量运算。

4.运算符的优先级和其他高级语言一样,当用多个运算符和运算量写出一个MATLAB表达式时,运算符的优先次序是一个必须明确的问题。

MATLAB中的全局变量,全局内存是指内存的一种特殊类型,它能够被所有的工作区访问。

如果一个变量在函数中被声明全局变量,那么它将占用的是全局内存,而不是本地工作区。

如果相同的变量在另一个函数中被声明为全局变量,那么这个变量所占有内存区域就是第一个函数中的相同变量。

最好把全局变量声明在函数的开头,这样可以区别于本地变量。

在一个程序,你能利用全局内存,在函数之间对大规模数据进行交换。

如果想让某个函数中定义的变量能够被其他函数调用,需要用到全局变量。

注意,在这两个函数中都要用global修饰这个变量。

如:

functiont1globalx;x=0;functiont2globalx;y=xend,1.6.2图形窗口及坐标轴,hf=figure(Color,0.5,0.5,0.5,Position,200,200,500,400);ah=axes(Parent,hf,Color,0.8,0.8,0.8);x=-2:

.2:

2;y=-4:

.4:

4;x,y=meshgrid(x,y);z=x.*exp(-x.2-y.2);h=surf(Parent,ah,x,y,z,FaceColor,flat,EdgeColor,b);,MATLAB面向对象程序简介,1)类在MATLAB中,将类视作定义有特定行为的新的数据类型,与普通的类型数据不同,类是一组具有共同特性对象的抽象,不仅包含数据,还包含了对数据的操作。

对特定类的对象所定义的操作,称为该类的方法。

也可以将类看作可作为单独实体对待的新项目。

MATLAB中类的相关概念如下:

类定义描述一个类中所有实例的共有特征属性对类实例的数据存储方法特殊函数,通常是在类实例中的操作事件消息,当发生一些特定的行为时由类定义和提供的类实例的广播。

特性值,修改属性、事件、方法和类的状态。

听众对象,当事件通知广播时,对特定的事件作出响应。

对象类的实例包文件夹,一个类定义和函数命名的集合。

2)对象MATLAB中的对象是类的一个实例,这个实例包含实际数据所代表的特定实体。

对象并不是被动的数据容器,对象还积极管理数据,包括只允许特定的操作、数据隐藏、禁止外部用户非法对数据的滥用等,对象对其控制直到其消失。

MATLAB中类的设计、定义,1.类的设计在MATLAB在,通常一个类可以分为两个组成部分,即成员变量和成员函数。

在类的设计过程中,就是要从众多实例中抽象出共同特征,形成类。

1)定义类数据2)定义类操作3)定义类事件,2.类的定义MATLAB类的定义由关键词、属性成员、方法和事件4个部分组成。

Classdef类名Properties属性endmethods方法endevent事件endend,第3章MATLAB中的类和对象,3.1类的声明3.2类的属性成员及访问控制3.3类的方法及访问控制3.4类的组合,3.1类的声明,3.1.1类的声明3.1.2对象的创建和使用3.1.3类的特性3.1.4类定义的组织形式3.1.5命名空间和包,3.1.1类的声明,要在MATLAB中声明一个类,可以采用两种方式:

其一是声明为value型类(值型类),其二是声明为handle型类(句柄型类)。

使用value型类对象可以用来表示一个实体数据,用该类型对象复制另一对象时,则其中一个对象数据的修改不会引起另一对象的改变,这是又有它们所占用的不是同一个存储空间,因此它们在数据上是相互独立的。

在MATLAB中声明一个value型类的一般格式如下:

Classdef类名Properties属性endmethods方法endevent事件endenumeration枚举(输入参数)endend,3.1.2对象的创建和使用,MATLAB面向对象程序设计中创建一个对象的过程一般是通过调用类的构造函数来实现的,其格式如下:

对象名=类的构造函数(输入参数)访问对象成员采用的是点(.)操作符,其一般形式是:

对象名.类成员,3.1.3类的特性,3.1.4类的组织形式,3.2类的属性成员及访问控制,3.2.1属性成员的声明和初始化3.2.2属性成员的特性3.2.3属性成员的get和set方法3.2.4属性成员的访问控制,3.2.1属性成员的声明和初始化,一个类的普通数据成员,我们可以安排在类的属性成员部分,属性成员块中的成员可以按如下格式定义:

Properties属性成员1;属性成员2;end,属性成员的初始化可以通过两种途径来完成。

第一种是在属性成员块内为数据成员指定初始值。

第二种初始化属性成员的方法是用构造函数来完成的,构造函数的返回值一般都是一个对象,通过引用对象中的属性成员将形参赋值给它们。

3.2.2属性成员的特性,3.2.3属性成员的get和set方法,如果在创建好对象后,要改变属性成员的值,对于具有公有访问特性的属性成员来说,可以直接通过对象来访问该成员,从而重新设置其值。

这说明MATLAB对一个类对象的属性成员具有进行设置(set)和查询(get)功能。

属性成员的get和set方法就是用来设置这种功能的。

如果没有编写属性成员的set和get方法,访问对象的属性成员时就会直接操作。

如果编写属了性成员的set和get方法,访问对象的属性成员时MATLAB就会调用相应的set和get方法,而不会再直接操作。

Set方法的格式:

functionobj=set.propertyName(obj,value);EndValue就像一个匣子,装入访问对象时传入的值,供set函数内部进行相应的操作。

如obj.propertyName=10;则MATLAB会令value=10。

get方法的格式:

functionvalue=get.propertyname(obj)end同样地,这里的value也是一个形参,代表查询属性成员时,MATLAB要提供的值。

如obj.propertyName%假设get函数使value=10;ans=10,3.2.4属性成员的访问控制,3.3类的方法及其访问控制,3.3.1普通方法及其访问控制3.3.2构造函数3.3.3静态方法3.3.4类型转换方法,3.3.1普通方法及其访问控制,普通方法的声明方式一般有两种:

第一种是在类块中给出完整的函数定义;第二种方式是在一个单独分文件中给出函数的完整定义,而在类中只给出函数的声明形式。

在类块中给出完整的函数定义,例子:

ClassdefMyclassPropertiesx=1.0;endmethodsfunctionobj=Myclass(val)%构造函数obj.x=val;endfunctiony=computeadd(obj,val)y=obj.x+val;endend,格式如下:

Methodsfunctionval1=fun1(obj,args1)endfunctionval2=fun2(obj,args2)endfunctionfun3(obj)endend,调用方法时有如下两种形式:

obj.fun1(args1)和fun1(obj,args1)例如:

T=myclass(5);computeadd(4);computeadd(T,4);,3.3.2构造函数,构造函数是类中的一个特殊方法,MATLAB中构造函数的主要作用是来完成对象的创建工作,与此同时可以对对象中的数据进行初始化。

构造函数也是类的一个方法,除了具有一般成员方法的特征之外,还具有一些特殊的性质:

1)构造函数的函数名与类名相同。

2)构造函数只能返回一个参数,它是本类的一个对象,在类的所有方法中只能用构造函数来创建一个对象。

3)构造函数总是返回一个有效的类实例,而不是一个空对象。

4)如果类中没有说明构造函数,则MATLAB就会提供一个无输入参数的构造函数(默认构造函数),并返回一个标量对象,该对象中的属性成员或被初始化为空(),或按默认值初始化。

3.3.3静态方法,3.3.4类型转换方法,3.4类的组合,3.4.1内嵌对象3.4.2类的优先级问题3.4.3对象的保存与加载,3.4.1内嵌对象,实际上,类的属性成员中也可以存放另一个类的实例。

由此我们可以利用已有的类的实例来构建新的复杂的类。

如果一个类中的某属性成员存放的是另一个类的对象,我们在这里将这样的成员成为内嵌对象。

3.4.2类的优先级问题,1)不同类之间包含同名函数时的优先级问题可以通过设置类的优先级来确定主导类。

MATLAB中确定类之间的优先级是通过设置一个类的inferiorClass特性来实现的,其格式如下:

classdef(InferiorClass=?

class1,?

class2,myClassEnd这表明class1、class2等的优先级要低于myClass,即myClass相对于它们是主导类。

如果没有指定类的优先级,那么在默认情况下,在调用这些类的那个同名函数时,输入参数最左边的对象是主导对象,2)同名类之间的优先级问题,3.4.3对象的保存与加载,像MATLAB的普通变量一样可以用命令save将工作空间的对象保存在mat文件中;当这个对象从工作空间删除后,这个对象可以从保存文件中用命令load加载到工作空间中来。

Save和load的使用格式是:

savefilenameobjectLoadfilenameobject,第4章MATLAB中的继承与派生,4.1类的继承与派生4.2派生类的构造函数4.3多重继承的成员标识问题4.4指定容许派生的类4.5类成员的访问控制4.6定义MATLAB内置类型的派生类,4.1类的继承与派生,4.1.1继承与派生的概念4.1.2派生类的定义4.1.3派生形成过程4.1.4用派生类创建一个类的别名,4.1.1继承与派生的概念,MATLAB中通过派生(classderivation)的机制来支持继承。

被继承的类型被称为基类(baseclass)或超类(superclass),而新产生的类则为派生类(derivedclass)或子类(subclass)。

4.1.2派生类的定义,MATLAB中,派生类的一般定义格式为:

Classdef派生类名基类名1&基类名2&基类名n派生类成员声明;End其中基类名1、基类名2、基类名n是已声明的类。

如果一个派生类同时有多个基类,则这种情况称为多重继承(multiple-inherit),这时的派生类同时得到了多个已有类的特征。

如果一个派生类只有一个直接基类,这种情况就称为单继承(single-inherit)直接参与派生出某类的基类称为直接基类,而基类的基类以及更深层的基类则称为间接基类。

4.1.3派生形成过程,MATLAB生成一个派生类的过程分为:

1.吸收基类成员:

MATLAB的派生类实际上吸收了所有的基类成员(注:

基类的私有成员和构造函数不会显式地出现在派生类中)。

2.改造基类成员:

如果派生类声明了一个与基类同名的成员,派生类中的成员就屏蔽了基类的同名成员。

这就是所谓的同名覆盖。

同名覆盖包含属性成员的同名覆盖和方法的同名覆盖。

其中,属性成员的同名覆盖是有条件的:

1).基类属性成员的abstract特性是true(即该属性成员是抽象的)。

2).基类属性成员的SetAcces和GetAccess特性是private。

3.发展新成员:

新成员必须与基类成员不同名。

4.重写构造函数在派生类生成过程中,派生类不会将基类的类定义方面的相关属性继承过来。

4.1.4用派生类创建一个类的别名,创建一个类的别名,可以通过建立一个空的派生类来实现classdefNewClassNameOldClassNameend这里类OldClassName是已有的类,类NewClassName就是类OldName的别名。

注意:

如果原来类中的构造函数支持带无参数输入形式,则就可以用类似上面定义的空的派生形式创建别名类。

如果原来类的构造函数不支持无参数输入,则别名类中就要求增加一个构造函数。

4.2派生类的构造函数,4.2.1构造函数的建立4.2.2派生类构造函数执行的顺序,4.2.1构造函数的建立,派生类构造函数的输入参数设计就应考虑到基类数据成员和新增数据成员,其中一部分参数要传递给基类数据成员,而另一部分要传递给新增数据成员。

派生类的构造函数的一般定义形式为:

派生类的构造函数的一般定义形式为:

Function对象名=派生类名(参数总表)对象名=对象名基类名1(参数表1);%后面部分可看成基类1的构造对象名=对象名基类名1(参数表1);%函数对象名=对象名基类名1(参数表1);对象名.新增属性成员1=参数1;对象名.新增属性成员M=参数M;end,使用派生类构造函数的注意事项,1.如果在调用派生类的构造函数时,需要将参数传给基类成员,则在派生类构造函数中要显式地调用这些基类的构造函数,否则MATLAB会隐式调用。

2.如果在派生类构造函数中要显式地调用基类构造函数,则这样的调用应在创建的对象引用之前来完成。

3.一个派生类也可以不编写构造函数,除非它的基类的构造函数是带输入参数的。

4.2.2派生类构造函数执行的顺序,继承顺序,调用顺序,4.3多重继承中的成员标识问题,4.3.1属性成员名称冲突4.3.2方法名称冲突4.3.3事件名称冲突,在MATLAB面向对象程序设计中,多重继承一般不支持各个基类中带有同名成员,但在一些特殊条件下允许出现同名成员。

4.4指定容许派生的类,4.5类成员的访问控制,4.5.1属性成员的访问控制4.5.2方法的访问控制4.5.3事件的访问控制,4.6定义MATLAB内置类型的派生控制,4.6.1MATLAB的内置类4.6.2定义MATLAB内置类的派生类,第5章handle类型,5.1handle类型的声明5.2类handle的介绍5.3属性成员get/set接口的实现5.4动态属性成员的实现5.5handle类型的析构函数5.6handle兼容类5.7深拷贝与浅拷贝,有时我们希望给对象创建一个引用,而不希望复制这个对象的数据,这时就可以使用handle型类了。

5.1handle类型的声明,Handle型类声明形式与value型类声明形式的根本不同之处是前者必须是类handle的派生类,而后者不是。

类handle是MATLAB中已声明的一个抽象类。

声明一个handle型类的格式是:

Classdef类名handleend,Handle型类的派生类也是handle型类。

这时,我们不需要在handle型派生类中再次将handle指明为基类。

声明了一个handle型类之后就可以创建handle型类对象了,handle型类的对象简称为handle对象。

创建handle对象形式和value型类是相同的,不同的是:

创建handle对象时,构造函数返回的不是被创建的对象,而是这个对象的句柄。

MATLAB中的一个句柄也是一个变量,它是一个类实例的唯一标识。

当我们复制一个句柄对象时,MATLAB复制的是句柄,不会复制这个对象中的数据。

这个被复制的句柄引用的数据与原来的句柄引用的数据是一致的。

除自定义的handle型类外,MATLAB中的句柄图形(handlegraphics)类型的行为特征也类似于handle型类。

MATLAB在创建每个图形对象时都为对象分配唯一的一个值,称为图形对象句柄(handle)。

句柄是图形对象的唯一标识符。

句柄图形型类创建的对象就是MATLAB的图形对象,句柄图形型类创建一个对象时返回一个已创建对象的句柄。

Handle型类可以通过句柄复制来实现对象的引用功能,除此之外,handle类型还具有如下一些特征:

(1).继承类handle的方法;

(2).能够定义事件和听众;(3).定义动态属性成员;(4)实现句柄图形类型的get和set方法。

5.2类handle的介绍,类handle是MATLAB内定义的一个抽象类。

所谓抽象类就是只能作为基类,而不能直接用它定义对象。

类handle是定义所有handle型类的基类,即要定义一个handle型类应该以类handle为基类,或以handle型类为基类。

类handle中没有提供属性成员,而提供了许多有用的方法,定义一个handle型类将继承这些方法,这些方法的名称和功能如下:

5.3属性成员get/set接口的实现,在定义一些具有特殊要求的handle型类时,还可以用MATLAB中提供的两个handle型类作为基类。

这两个类分别是类hgsetget和类dynamicprops,前者提供了set和get方法,使其能够实现句柄图形(handlegraphics)类型的标准接口风格,后者提供了能够实现动态属性成员的功能。

这两个handle型类也是抽象类,不能直接定义对象。

MATLAB中标准的句柄图形系统实现了基于set和get方法的一个接口(注:

这里的两个方法有别于属性成员中的set和get方法),利用这些方法我们可以设置和查询图形对象的属性值。

Hgsetget类是handle的派生类,这个类实现这些方法的实现过程。

我们以hgsetget类为基类声明的handle型类就可以继承这些功能,这样的类就是一个set/get接口类。

与属性成员的set和get方法调用方式不同,hesetget类的set/get接口方法调用既可以按在对象上用操作符“.”引用属性成员的方式进行设置和查询,也可以直接按普通函数的方式调用,如:

V=get(h,PropertyName);或V=h.PropertyName;这里v返回句柄对象h中成员PropertyName的值。

set(h,PropertyName,PropertyValue);或h.PropertyName=PropertyValue;就是将句柄对象h中的成员PropertyName的值设置为PropertyValue。

5.4动态属性成员的实现,有时在使用这些同一个类的对象时,希望个别对象上附加上一些临时的数据,这些数据有别于其他对象的属性成员,而这些成员不用在类声明中提前给出,这些成员就是动态属性成员。

在MATLAB中可以通过类dynamicprops的派生类来实现这种功能。

类dynamicprops是MATLAB内定义的handle型抽象类,它提供了能够实现动态属性成员的功能。

类dynamicprops除继承类handle的所有方法外,还增加了一个addprop方法,它的功能是向一个句柄对象添加一个属性成员的名称,其使用格式如下:

P=addprop(H,PropertyName)这里P是meta.DynamicProperty对象数组,H是一个句柄数组,PropertyName是要附加给这些对象的动态属性成员名称。

在对象上添加动态属性成员时,动态属性成员名称除应遵循具有一般变量的命名规则外,还应注意:

1).不能与这个类中的方法同名;2).不能与这个类中的事件同名;3).名称中不能包含操作符“.”;,例如定义一个dynamicprops的派生类:

classdefMyButton0iflength(pos)=4,obj.UiHandle=uicontrol(Position,pos,.Style,pushbutton);elseerror(Improperposition)endendendendend,hbutton1=MyButton(20,40,100,40);%创建对象addprop(hbutton1,Caption);%添加动态属性成员hbutton1.Caption=OK;%给成员Caption赋值set(hbutton1.UiHandle,string,hbutton1.Caption);%给定制的按钮加标题,在对一个对象上增加了动态属性成员之后就可以像普通属性成员一样来使用了:

1.可以通过对象用点操作符来设置和查询该成员;2.当保存和加载对象时,MATLAB也会把动态属性成员进行保存和加载。

3.可以为动态属性成员定义特性。

4.可以为动态属性成员编写set和get函数;5.可以听到动态属性成员引发的事件;6.通过对象数组访问动态属性成员的值。

为这个动态属性成员设置相应的特性,其方法是通过addprop返回值中的meta.DynamicProperty对象来设置,如:

p1=addprop(hbutton1,Caption);%添加动态属性成员Captionhbutton1.Caption=OK;%给成员Caption赋值p1.Constant=true;%设置成员Caption的特性,可以为动态属性成员编写自己的get和set函数。

实现动态属性成员的set和get函数步骤是:

1.定义一个函数来完成动态属性成员进行设置和查询之前希望完成的工作,其格式为myset(obj,val)或val=myGet(obj);2.获得动态属性成员对应的meta.DynamicProperty对象;3.将我们定义好的动态属性成员设置或查询函数句柄指派到meta.DynamicProperty对象的GetMethod或SetMethod成员上。

我们定义的这个函数不必是这个类的方法,这时我们不能用类似set.PropertyName这种形式的函数名。

使用dynamicprops作为基类,我们就可以在该派生类对象上动态地添加属性成员。

此外这些动态属性成员还可以产生一些事件。

5.5handle型类的析构函数,MATLAB创建一个对象是通过构造函数来实现的,当一个对象的生命周期即将结束时,MATLAB会自动地去调用一个特殊的方法进行善后工作,这个特殊的方法就是析构函数(destructor)。

在handle型类中析构函数的主要特征是函数名必须是delete,并以普通方法形式定义。

除此之外,必须具备如下条件MATLAB才会把delete方法当作一个有效的析构函数:

1.delete方法必须有一个标量输入,即本类对象;2.不带输出参数;3.不能是密封的方法、静态的方法或抽象方法,即方法的特性不能是Sealed,Static或Abstract。

声明一个析构函数的方法的一般格式:

Methodsfunctiondelete(obj)%析构函数,obj是一个本类对象endEnd如果一个类的析构函数不必做其他工作,我们也不用在类中显式地重写一个析构函数,这是因为类handle中已定义了一个析构函数de

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2