ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:24.17KB ,
资源ID:9969298      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9969298.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(8面向对象编程.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8面向对象编程.docx

1、8面向对象编程面向对象编程应用示例1类概念与定义面向对象编程本质是 利用一种包装技术,将复杂,不符合习惯的操作过程加以包装,向编程人提供简单的,符合习惯的表达形式,来完成编程。面向对象编程,涉及到二个基本术语:对象(object),类(class)。对象(object):具体的,个体的概念。类(class):抽象的,总体的的概念。例如:整数是一个类(class)。1,1,2,4,123,875是整数类重的对象(object)。对象(object),类(class)在生活中不是一个生疏的概念,类(class)的产生是一个抽象的过程。具有一个共同的特征的一群事物即可构成一个类。的对象(object

2、),类(class)的概念往往是一个“反抽象的过程”。生活中,一般是先有“对象”,后有“类”的。面向对象编程中往往是先定义“类”,在有类去产生“对象”。生活中的对象(object),类(class)的表达,类(class)是一种概念,存与思想中,对象(object)是 具体的事物可以存与现实中或思想中。 面向对象编程中的对象(object),类(class)的表达必须存放在内存中。例 本例演示matlab定义类的基本方法。(1)本例定义的类描述如下:对于任何一个输入的对象,确定一个类对象,记录其类别,内容。例如,输入矩阵,取名为MD,则被纪录的类别是double,内容是矩阵本身。定义的类要有名

3、称,可以查到。(2)本例定义的类取名为objcls,其结构如下:类别:objcls 结构: 以序为 数据;数据类型类的要素:类名(虚)、类结构、对象(实)、对象名、对象构成元。以下程序(objcls.m)定义了这个类。定义类的程序必须存于特殊的路径下。本例的类路径是matlabworkobjclsfunction d=objcls(x)superiorto(double,sparse,struct,cell,char,inline,sym);num=nargin; %输入的项目个数,最大数目不超过定义的数目,objcls(a,b,c,d,e)最大数目是5。switch numcase 0 d.

4、value=; d.name=empty; d=class(d,objcls); case 1 d.value=x; d.name=class(x); d=class(d,objcls);otherwise error(Too many arguments.);end 在matlab环境下,运行以下指令,则可以定义此类的的一个具体的对象mm。p=1,2;3,4;q=class(p);mm=objcls(p) name=doublevalue= 1 2 3 4 第三条指令, 显示了类对象,但对于用户自己定义的类,matlab 并不提供显示,必须有类的定义者自己编显示程序。matlab规定,类的显

5、示程序统一取名display.m与类定义程序放在同一路径之下。因此,定义类至少有二个程序组成:1。类定义程序、2。类显示程序display。本例定义的类的显示程序display如下:function display(d)if nargin=1 fprintf(name=);disp(d.name) fprintf(value=);disp(d.value)elseif error(absent or non this class)end display(mm) name=doublevalue= 1 2 3 4 2.重载运算对于新类的对象,其运算与操作一般是自己特有的,运算符可以是通用的,运算

6、与操作要有类自己决定。例如加法,运算与操作符是add、+、plus 等。通过和help plus可以得到多个 plus.m 指令。sym/plus.m :符号加法demtseries/plus.m : 金融工具箱中的时间加法mf/plus.m :模糊运算的加法 zpk/plus.m :零极点加法 tf/plus.m :传递函数加法 等等。到c:matlabtoolsboxsymbols 可以看到 sym 符号类的定义目录,再进入 sym 可以发现有关符号的运算的定义,其中就有 plus.m 的符号运算加法运算指令。到c:matlabtoolsboxfuzzy 可以看到 mf 符号类的定义目录,

7、再进入 mf 可以发现有关符号的运算的定义,其中就有 plus.m 的模糊运算的加法运算指令。在作加法时,首先判别对象,再到相应的路径下体取指令,作相应的运算。这叫重载运算,指令叫重载函数。对本例编制一个加法,来理解和体会“重载运算,重载函数”1) 确定加法的意义和法则objcls 类有二个项目,数据d和数据类型t,设为d1,d2位二个objcls类的对象,表达为d1(a1,t1),d2(a2,t2)。由于d1,d2 的类型多不一样,d1+d2的意义和法则必须有类的设计者来确定。定义d1+d2是objcls 类设为d3(a3,t3) ,a3为cell,t3为21元胞矩阵。如:d1=(doubl

8、e,(2,3,4);d2=(char,asasas) d1+d2= 编制程序因此定义一种新的类,他的有关运算与操作必须一同定义下来,但 display.m 是必要有的。function d=plus(a,b)av=a.value;bv=b.value;if strcmp(a.name,cell) av=a.value;end if strcmp(b.name,cell) bv=b.value;end d.value=av;bv; d.name=class(d.value); d=class(d,objcls);p=2,3,4;mm=objcls(p);q=asasas;nn=objcls(q)

9、;bb=mm+nn typename =doubletypename =charname=cellvalue= 1x3 double asasas 查看bb的类别、内容:1) 读出bb的分项编制如下程序:function rn,rv=readobjcls(d)if nargin=1 rn=d.name; cs=class(rn); switch cs case cell rv=d.value; case double rv=d.value; case char rv=d.value; end elseif error(absent or non this class)end rn,rv=rea

10、dobjcls(bb) rn =cellrv = 1x3 double asasas 2) 读出value的分项,name和value function readvalue(d)if nargin=1 rn=d.name; rv=d.value; crv=class(rv); switch crv case cell display(rv) case char display(rv) case double display(rv) endelse error(absent or non this class)end na=readobjcls(bb)readvalue(bb)na =cellr

11、v = 1x3 double asasas 2类的继承与应用类的继承性(Inheritance)是面向对象编程的最重要的特性之一。在创建新类时,利用这个特性,1)可以充分体现新类和其他类之间“逻辑”或“物理”上的内在关系,2)可以简化代码、提高软件的重复使用性。减少工作量又提高软件质量。 与类的继承性有关的概念:子类、父类子类(child class):1).通过继承,得到一个或多个父类的结构架(structure),和相应的方法(methods & operations),2)通过自定义新的结构架(structure),和相应的方法(methods)得到自己特有的特点。matlab如何实现子

12、类对父类的继承,又如何实现子类自定义新的结构架和相应的方法?下面用例子说明。上面已经定义了objcls类,通过对objcls 的继承产生新的类objclsson。1) 建立路径 objclsson2) 输入如下程序function ds=objclsson(x)superiorto(double,sparse,struct,cell,char,inline,sym);d.value=x; %定义类objclsson d.name=class(x); %d.sign=ok; %添加新内容num=nargin; if num= 1 g=objcls(x); ds=class(d,objclsson

13、,g); %继承objcls类的所有功能(DISPLAY;运算规则的等)else error(Too many arguments.);end用类定义建立如下objclsson类对象dd=objclsson(1,2) name=doublevalue= 1 2 objclsson类中的d.value ,d.name成分的加法已经从objcls类得到了继承。对于类的新成分d.sign的+运算要在PLUS中再加以定义。dd1=objclsson(1,2);dd2=objclsson(3,4);dd1+dd2 name=cellvalue= 1x2 double 1x2 double 运行如下指令,

14、产生类objclsson的对象nn。p=1,2;3,4;nn=objclsson(p); d = value: 2x2 double name: double sign: ok 检查nn的类名,显示nn 的内容。objclsson 从objcls 的 继承了d.value ,d.name成分的显示功能,由于没有对objclsson 编辑d.sign的 display ,因此无法显示d.sign成分。健入nn,即可看到nn 的内容。class(nn)nn ans =objclssonname=doublevalue= 1 2 3 4 3) 图形用户界面(GUI)类(1)菜单的定义与调用,程序名:

15、mm.m% 菜单的定义与调用clf reset%set (H_fig, MenuBar,none);set(gcf,menubar,menubar);h_menu=uimenu(label,Option); %产生顶层菜单项Optionh_sub1=uimenu(h_menu,label,Axis on); %产生Axis on菜单项,由缺省设置而使能h_sub2=uimenu(h_menu,label,Axis off,. enable,off); %产生Axis off菜单项,但失能h_sub3=uimenu(h_menu,label,Grid on,. separator,on,visi

16、ble,off); %产生与上分隔的Grid on菜单项,但不可见h_sub4=uimenu(h_menu,label,Grid off,. visible,on); %产生Grid off菜单项,但不可见h_sub5=uimenu(h_menu,label,回调操作,. visible,on); set(h_sub1,callback,. %选中Axis on菜单项后,产生回调操作 Axis on,. %画坐标 set(h_sub1,enable,off),. %Axis on菜单项失能 set(h_sub2,enable,on),. %Axis off菜单项使能 set(h_sub3,vi

17、sible,on),. %Grid on菜单项可见 set(h_sub4,visible,on),); %Grid off菜单项可见set(h_sub2,callback,. % %选中Axis off菜单项后,产生回调操作 axis off,. %使坐标消失 set(h_sub1,enable,on),. %Axis on菜单项使能 set(h_sub2,enable,off),. %Axis off菜单项失能 set(h_sub3,visible,off),. %Grid on菜单项不可见 set(h_sub4,visible,off),); %Grid off菜单项不可见set(h_su

18、b3,callback,. %选中Grid on菜单项后,产生回调 grid on,. %画坐标分格线 set(h_sub3,enable,off),. %Grid on菜单项失能 set(h_sub4,enable,on),); %Grid off菜单项使能set(h_sub4,callback,. %选中Grid off菜单项,产生回调 grid off,. %消除坐标分格线 set(h_sub3,enable,on),. %Grid on菜单项使能 set(h_sub4,enable,off),); %Grid off菜单项失能 set(h_sub5,callback,mm1); %选中

19、Grid off菜单项,产生回调被调用的程序:mm1.mmm1a=2,7,45,7,4,65,3,53,5,34,34,34,9;plot(a);2)控件调用,程序名:pp.mmatlab有“guid面向对象的界面,健入guid弹出编辑界面。也可以编程实现如下:(例)% 控件调用 pp.mclf reset % set(gcf,unit,normalized,position,0.1,0.4,0.85,0.35);%设置图形窗大小set(gcf,defaultuicontrolunits,normalized);set(gcf,defaultuicontrolfontsize,11);set(

20、gcf,defaultuicontrolfontname,宋体);set(gcf,defaultuicontrolhorizontal,left);%set(gcf,menubar,none); %删除图形窗工具条str=石油预测;set(gcf,name,str,numbertitle,off); %书写图形窗名h_axes=axes(position,0.05,0.15,0.45,0.70,visible,on);%定义轴位框位置 %uicontrol(gcf,Style,text,. %制作静态文本框% position,0.52,0.87,0.10,0.1,.% String,影响长度

21、);%uicontrol(gcf,Style,text,. %制作静态文本框 % position,0.52,0.60,0.10,0.1,.% String,预测长度);hslider2=uicontrol(gcf,Style,slider,. %制作滚动杆 position,0.6,0.67,0.20,0.1,. Max,200, Min,0,. sliderstep,0.01,0.05,. Value,0.5); hslider1=uicontrol(gcf,Style,slider,. %制作滚动杆 position,0.6,0.6,0.20,0.1,. Max,200, Min,0,.

22、 sliderstep,0.01,0.05,. Value,0.5); set(hslider1,callback,pp1);set(hslider2,callback,pp2);% Tag,slider2调用程序1:程序名:pp1.m%function pp1()a=5,2,3,1,2,6,1;plot(a)ppv=get(hslider1,value);uicontrol(gcf,Style,text,. %制作静态文本框 position,0.12,0.20,0.10,0.1,. String,ppv); Tag,slider1调用程序2:程序名:pp2.m%function pp2()a=5,7,3,8,2,6,9;plot(a)ppv1=get(hslider2,value);uicontrol(gcf,Style,text,. %制作静态文本框 position,0.52,0.87,0.10,0.1,. String,ppv1); Tag,slider2

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1