8面向对象编程Word下载.docx

上传人:b****2 文档编号:5743054 上传时间:2023-05-05 格式:DOCX 页数:14 大小:24.17KB
下载 相关 举报
8面向对象编程Word下载.docx_第1页
第1页 / 共14页
8面向对象编程Word下载.docx_第2页
第2页 / 共14页
8面向对象编程Word下载.docx_第3页
第3页 / 共14页
8面向对象编程Word下载.docx_第4页
第4页 / 共14页
8面向对象编程Word下载.docx_第5页
第5页 / 共14页
8面向对象编程Word下载.docx_第6页
第6页 / 共14页
8面向对象编程Word下载.docx_第7页
第7页 / 共14页
8面向对象编程Word下载.docx_第8页
第8页 / 共14页
8面向对象编程Word下载.docx_第9页
第9页 / 共14页
8面向对象编程Word下载.docx_第10页
第10页 / 共14页
8面向对象编程Word下载.docx_第11页
第11页 / 共14页
8面向对象编程Word下载.docx_第12页
第12页 / 共14页
8面向对象编程Word下载.docx_第13页
第13页 / 共14页
8面向对象编程Word下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

8面向对象编程Word下载.docx

《8面向对象编程Word下载.docx》由会员分享,可在线阅读,更多相关《8面向对象编程Word下载.docx(14页珍藏版)》请在冰点文库上搜索。

8面向对象编程Word下载.docx

本例的类路径是‘\matlab\work\@objcls'

functiond=objcls(x)

superiorto('

double'

'

sparse'

struct'

cell'

char'

inline'

sym'

);

num=nargin;

%输入的项目个数,最大数目不超过定义的数目,objcls(a,b,c,d,e)最大数目是5。

switchnum

case0

d.value=[];

d.name='

empty'

;

d=class(d,'

objcls'

case1

d.value=x;

d.name=class(x);

otherwise

error('

Toomanyarguments.'

end

在matlab环境下,运行以下指令,则可以定义此类的的一个具体的对象mm。

p=[1,2;

3,4];

q=class(p);

mm=objcls(p)

name=double

value=12

34

第三条指令,显示了类对象,但对于用户自己定义的类,matlab并不提供显示,必须有类的定义者自己编显示程序。

matlab规定,类的显示程序统一取名‘display.m'

与类定义程序放在同一路径之下。

因此,定义类至少有二个程序组成:

1。

类定义程序、2。

类显示程序display。

本例定义的类的显示程序display如下:

functiondisplay(d)

ifnargin==1

fprintf('

name='

disp(d.name)

value='

disp(d.value)

elseiferror('

absentornonthisclass'

end

display(mm)

2.重载运算

对于新类的对象,其运算与操作一般是自己特有的,运算符可以是通用的,运算与操作要有类自己决定。

例如加法,运算与操作符是'

add'

、'

+'

plus'

等。

通过和‘helpplus’可以得到多个'

plus.m'

指令。

sym/plus.m:

符号加法

demtseries/plus.m:

金融工具箱中的时间加法

mf/plus.m:

模糊运算的加法

zpk/plus.m:

零极点加法

tf/plus.m:

传递函数加法

等等。

到c:

\matlab\toolsbox\symbols\可以看到'

@sym'

符号类的定义目录,再进入'

可以发现有关符号的运算的定义,其中就有'

的符号运算加法运算指令。

\matlab\toolsbox\fuzzy\可以看到'

@mf'

的模糊运算的加法运算指令。

在作加法时,首先判别对象,再到相应的路径下体取指令,作相应的运算。

这叫重载运算,指令叫重载函数。

对本例编制一个加法,来理解和体会“重载运算,重载函数”

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为2×

1元胞矩阵。

如:

d1=(double,(2,3,4));

d2=(char,'

asasas'

d1+d2=

编制程序

因此定义一种新的类,他的有关运算与操作必须一同定义下来,但'

display.m'

是必要有的。

functiond=plus(a,b)

av=a.value;

bv=b.value;

if~strcmp(a.name,'

av={a.value};

if~strcmp(b.name,'

bv={b.value};

d.value=[av;

bv];

d.name=class(d.value);

d=class(d,'

p=[2,3,4];

mm=objcls(p);

q='

nn=objcls(q);

bb=mm+nn

typename=

double

char

name=cell

value=[1x3double]

'

查看bb的类别、内容:

1)读出bb的分项

编制如下程序:

function[rn,rv]=readobjcls(d)

rn=d.name;

cs=class(rn);

switchcs

case'

rv=d.value;

end

[rn,rv]=readobjcls(bb)

rn=

cell

rv=

[1x3double]

2)读出value的分项,name和value

functionreadvalue(d)

crv=class(rv);

switchcrv

display(rv)

end

else

na=readobjcls(bb)

readvalue(bb)

na=

2.类的继承与应用

类的继承性(Inheritance)是面向对象编程的最重要的特性之一。

在创建新类时,利用这个特性,1)可以充分体现新类和其他类之间“逻辑”或“物理”上的内在关系,2)可以简化代码、提高软件的重复使用性。

减少工作量又提高软件质量。

与类的继承性有关的概念:

子类、父类

子类(childclass):

1).通过继承,得到一个或多个父类的结构架(structure),和相应的方法(methods&

operations),2)通过自定义新的结构架(structure),和相应的方法(methods)得到自己特有的特点。

matlab如何实现子类对父类的继承,又如何实现子类自定义新的结构架和相应的方法?

下面用例子说明。

上面已经定义了objcls类,通过对objcls的继承产生新的类objclsson。

1)建立路径'

@objclsson'

2)输入如下程序

functionds=objclsson(x)

d.value=x;

%定义类objclsson

d.name=class(x);

%

d.sign='

ok'

%添加新内容

ifnum==1

g=objcls(x);

ds=class(d,'

objclsson'

g);

%继承objcls类的所有功能(DISPLAY;

运算规则的等)

用类定义建立如下objclsson类对象

dd=objclsson([1,2])

value=12

objclsson类中的d.value,d.name成分的加法已经从objcls类得到了继承。

对于类的新成分d.sign的'

运算要在PLUS中再加以定义。

dd1=objclsson([1,2]);

dd2=objclsson([3,4]);

dd1+dd2

value=[1x2double]

[1x2double]

运行如下指令,产生类objclsson的对象nn。

nn=objclsson(p);

d=

value:

[2x2double]

name:

sign:

检查nn的类名,显示nn的内容。

objclsson从objcls的继承了d.value,d.name成分的显示功能,由于没有对@objclsson编辑d.sign的'

display'

因此无法显示d.sign成分。

健入‘nn’,即可看到nn的内容。

class(nn)

nn

ans=

objclsson

3)图形用户界面(GUI)类

(1)菜单的定义与调用,程序名:

mm.m

%菜单的定义与调用

clfreset

%set(H_fig,'

MenuBar'

none'

set(gcf,'

menubar'

menubar);

h_menu=uimenu('

label'

Option'

%产生顶层菜单项Option

h_sub1=uimenu(h_menu,'

Axison'

%产生Axison菜单项,由缺省设置而使能

h_sub2=uimenu(h_menu,'

Axisoff'

...

enable'

off'

%产生Axisoff菜单项,但失能

h_sub3=uimenu(h_menu,'

Gridon'

separator'

on'

visible'

%产生与上分隔的Gridon菜单项,但不可见

h_sub4=uimenu(h_menu,'

Gridoff'

%产生Gridoff菜单项,但不可见

h_sub5=uimenu(h_menu,'

回调操作'

set(h_sub1,'

callback'

[...%选中Axison菜单项后,产生回调操作

Axison,'

...%画坐标

'

),'

...%Axison菜单项失能

set(h_sub2,'

...%Axisoff菜单项使能

set(h_sub3,'

...%Gridon菜单项可见

set(h_sub4,'

]);

%Gridoff菜单项可见

[...%%选中Axisoff菜单项后,产生回调操作

axisoff,'

...%使坐标消失

...%Axison菜单项使能

...%Axisoff菜单项失能

...%Gridon菜单项不可见

%Gridoff菜单项不可见

[...%选中Gridon菜单项后,产生回调

gridon,'

...%画坐标分格线

...%Gridon菜单项失能

%Gridoff菜单项使能

[...%选中Gridoff菜单项,产生回调

gridoff,'

...%消除坐标分格线

...%Gridon菜单项使能

%Gridoff菜单项失能

set(h_sub5,'

mm1'

%选中Gridoff菜单项,产生回调

被调用的程序:

mm1.m

mm1

a=[2,7,45,7,4,65,3,53,5,34,34,34,9];

plot(a);

2)控件调用,程序名:

pp.m

matlab有“guid"

面向对象的界面,健入‘guid’弹出编辑界面。

也可以编程实现如下:

(例)

%控件调用pp.m

clfreset%set(gcf,'

unit'

normalized'

position'

[0.1,0.4,0.85,0.35]);

%设置图形窗大小

defaultuicontrolunits'

defaultuicontrolfontsize'

11);

defaultuicontrolfontname'

宋体'

defaultuicontrolhorizontal'

left'

%set(gcf,'

%删除图形窗工具条

str='

石油预测'

name'

str,'

numbertitle'

%书写图形窗名

h_axes=axes('

[0.05,0.15,0.45,0.70],'

%定义轴位框位置

%uicontrol(gcf,'

Style'

text'

...%制作静态文本框

%'

[0.52,0.87,0.10,0.1],...

String'

影响长度'

%'

[0.52,0.60,0.10,0.1],...

预测长度'

hslider2=uicontrol(gcf,'

slider'

...%制作滚动杆

[0.6,0.67,0.20,0.1],...

Max'

200,'

Min'

0,...

sliderstep'

[0.01,0.05],...

Value'

0.5);

hslider1=uicontrol(gcf,'

[0.6,0.6,0.20,0.1],...

set(hslider1,'

pp1'

set(hslider2,'

pp2'

Tag'

slider2'

调用程序1:

程序名:

pp1.m

%functionpp1()

a=[5,2,3,1,2,6,1];

plot(a)

ppv=get(hslider1,'

value'

uicontrol(gcf,'

[0.12,0.20,0.10,0.1],...

ppv);

slider1'

调用程序2:

pp2.m

%functionpp2()

a=[5,7,3,8,2,6,9];

ppv1=get(hslider2,'

ppv1);

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

当前位置:首页 > 职业教育 > 职高对口

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

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