Wednesday, May 14, 2008

matlab 从queue 类构建stack类的全过程

8.9.4 继承性及其应用
8.9.4.3 利用继承性创建子类的示例

【例 8.9.4 .3-1 】把例 8.9.2-1 构成的队列作为父类,利用继承性,创建 stack 堆栈子类。
(1)建立类目录 @stack ,并使它成为当前目录 (以下指令仅对 5.3 版适用)
mkdir('e:\mat53\work','@stack') % 在 e:\mat53\work 上建子目录 @stack
cd e:\mat53\work\@stack % 是子目录 @stack 成为当前目录

(2)编写堆栈类的构造函数 @stack\stack.m
[@stack\stack.m]
function ST=stack(v)
% 调用格式
% ST=stack 创建一个 " 空 " 堆栈对象 .
% ST=stack(v) 创建包含变量 v 的堆栈对象。
if nargin>1;error( 'Too many arguments.' ); end ;
if nargin==0 % 没有输入宗量情况
Q=queue;
s.value=[]; % value 域被赋“空阵”
s.name= '' ; % name 域不给任何字符
elseif isa(v, 'stack' ); % 输入宗量是同类对象情况
s=v; % 直接把输入量赋给 q
Q=queue(evalin( 'caller' ,inputname(1))); % 生成队列对象
else % 非同类输入宗量情况
s.value=v; % 在 value 域中放置输入对象 v 的内容
s.name=inputname(1); % 在 name 域中放置输入对象名 v 字符
if isempty(s.name) % 假如输入量无名
s.name=[ '(' class(v) ')' ]; % 就采用 v 本身的类名
end

Q=queue(evalin( 'caller' ,inputname(1))); % 生成队列对象
end
ST=class(s, 'stack' ,Q); % 产生继承父类对象 Q 性质的 ST 堆栈子类

【 * 例 8.9.4 .3-2 】本例目的之一是:检查上例构造函数设计的正确性。目的之二是:观察堆栈关于队列的显示,类别判断和为 “空”判断性质的继承。

(1)堆栈对象的创建,及由于继承性,而获得正确显示。
AA=' 继承性 ';
ST=stack(AA)
ST=
AA: 继承性

(2)类别检查
class(ST)
ans =
stack

(3)由于在此设计采用了继承性,所以“是堆栈,就一定是队列”。
isa(ST,'stack')
isa(ST,'queue')
ans =
1
ans =
1

(4)检查对 isempty.m 是被继承
isempty(ST)
ans =
0


【 * 例 8.9.4 .3-3 】本例通过堆栈类对象的“压入”和“弹出”操作,进一步观察继承性。

(1)把元素压入堆栈
BB=1:6;CC=sym('x^2+4*x');
comein(ST,BB,CC)
ST=
[ 1*3 stack ]

(2)显示堆栈中第三元素的内容
display(ST,3)
The content of ST(3)
is a 'sym' object
CC=
x^2+4*x

(3)从堆栈弹出元素
[Name1,Value1,ST_1]=goout(ST)
Name1 =
AA
Value1 =
继承性
ST_1=
[ 1*2 stack ]

0 comments: