MATLAB面向对象程序设计.pptx
《MATLAB面向对象程序设计.pptx》由会员分享,可在线阅读,更多相关《MATLAB面向对象程序设计.pptx(153页珍藏版)》请在冰豆网上搜索。
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是已声明的类。
如果一个派生类同时