首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明以及Java程序。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click
阅读以下说明以及Java程序。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click
admin
2008-04-04
68
问题
阅读以下说明以及Java程序。
【说明】
传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。
下面的Java代码1与Java代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。
【Java代码1】
public class Door {
public static final int CLOSED = 1; public static final int OPENING = 2;
public static final int OPEN = 3; public static final int CLOSING = 4;
public static final int STAYOPEN = 5; private int state = CLOSED;
//定义状态变量,用不同的整数表示不同状态
private void setState(int state){ this.state = state;}
//设置传输门当前状态
public void getState() {
//此处代码省略,本方法输出状态字符串,
//例如,当前状态为CLOSED时,输出字符串为"CLOSED"
}
public void click() { //发生click事件时进行状态转换
if ((1);) setState(OPENING);
else if ((2);) setState{CLOSING);
else if ((3);) setState(STAYOPEN);
}
//发生timeout事件时进行状态转换
public void timeout() { if (state == OPEN) setState(CLOSING);}
public void complete() {//发生complete事件时进行状态转换
if (state == OPENING) setState(OPEN);
else if (state == CLOSING) setState(CLOSED);
}
public static void main(String [] args){
Door aDoor = new Door();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();
aDoor.getState();return;
}
}
【Java代码2】
public class Door {
public final DoorState CLOSED = new DoorClosed(this);
public final DoorState OPENING = new DoorOpening(this);
public final DoorState OPEN = new DoorOpen(this);
public final DoorState CLOSING = new DoorClosing(this);
public final DoorState STAYOPEN = new DoorStayOpen(this);
private DoorState state = CLOSED;
//设置传输门当前状态
public void setState(DoorState state) { this.state=state;}
public void getState(){ //根据当前状态输出对应的状态字符串
System.out.println(state.getClass().getName());
}
public void click(){(4);}//发生click事件时进行状态转换
public void timeout(){(5);}//发生timeout事件时进行状态转换
public void complete(){(6);)//发生complete事件时进行状态转换
public static void main(String[]args){
Door aDoor = new Door();
aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();
aDoor.getState();aDoor.timeout();aDoor.getState();return;
}
}
public abstract class DoorState { //定义所有状态类的基类
protected Door door ;
public DoorState(Door doer) { this.door = door;}
public void click() {}
public void complete() {}
public void timeout() {}
}
class DoorClosed extends DoorState { //定义一个基本的Closed状态
public DoorClosed(Door door) { super(door);}
public void click() {(7);)
//该类定义的其余代码省略
}
//其余代码省略
选项
答案
(1)state == CLOSED || state == CLOSING (2)state == OPENING || state == STAYOPEN (3)state == OPEN (4)state.click() (5)state.timeout() (6)state.complete() (7)door.setState(door.OPENING)
解析
本题考查的是状态转换图的程序设计与实现。
空(1)、(2)和(3)需要根据状态转换图来填写,空(1)、(2)和(3)所在的方法为click,表示当发生click事件时应该发生什么状态转换。根据代码可知,发生click时,状态分别跳转到OPENING,CLOSING和STAYOPEN,则发生click前的状态由状态转换图可以得到,分别为CLOSED或CLOSING、STAYOPEN或OPENING以及OPEN。
代码2中空(4)、(5)和(6)考查当发生click、timeout以及complete事件的时候,状态应该如何迁移。类Door的state成员变量用于记录类Door所处的状态,而state变量的类型为DoorState,DoorState中分别具有click、timeout和complete方法用来响应对应的事件,因此,空(4)、(5)和(6)分别为state.click()、state.timeout()和state.complete()。
空(7)主要考查门的当前状态为CLOSED时候,发生Click事件时状态的迁移,根据状态图可知,CLOSED状态的在Click事件下将迁移到OPENING,因此,此处应该将传输门状态设置为OPENING,DoorState变量存储了当前其存储的传输门的实例,因此,可直接调用其方法setState设置状态,由于传输门状态采用类的实例变量表示,所以此处应该填写door.setState(door.OPENING))。
代码1和代码2的区别是:代码2将状态间的转换规则封装到具体的类中,当状态转换图的转换规则发生变化时,只需更改部分对应类中的状态迁移规则,而代码1中的迁移规则散落在程序中,维护起来较为困难。
转载请注明原文地址:https://kaotiyun.com/show/ffDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
设关系模式R(A,B,C),传递依赖指的是(16);下列结论错误的是(17)。
(12)是指把数据以及操作数据的相关方法组合在同一个单元中,使我们可以把类作为软件中的基本复用单元,提高其内聚度,降低其耦合度。面向对象中的(13)机制是对现实世界中遗传现象的模拟,通过该机制,基类的属性和方法被遗传给派生类。
以下关于软件系统安全防护策略的叙述,不正确的是______。A.网闸的主要目的是实现内网和外网的物理隔离B.防火墙的主要目的是实现内网和外网的逻辑隔离C.入侵检测系统通常部署在防火墙之外D.安全日志属于被动防护策略
下面关于软件测试模型的描述中,不正确的包括______。①V模型的软件测试策略既包括低层测试又包括高层测试,高层测试是为了源代码的正确性,低层测试是为了使整个系统满足用户的需求②V模型存在一定的局限性,它仅仅把测试过程作为在需求分析、概要设
若二维数组arr[1..M,1..N]的首地址为base,数组元素按列存储且每个元素占用K个存储单元,则元素arr[i,j]在该数组空间的地址为______。
()不属于按寻址方式划分的一类存储器。
在面向对象技术中,(43)是一组具有相同结构、相同服务、共同关系和共同语义的(44)集合,其定义包括名称、属性和操作。(44)
给定包含n个正整数的数组A和正整数x,要判断数组A中是否存在两个元素之和等于x。先用插入排序算法对数组A进行排序,再用以下过程P来判断是否存在两个元素之和等于x。low=l;high=n;while(high>low)ifA[low]+A[hig
下图所示的二叉树进行顺序存储(根结点编号为1,对于编号为i的结点,其左孩子结点为2i,右孩子结点为2i+1)并用一维数组BT来表示,已知结点X、E和D在数组BT中的下标为分别为1、2、3,可推出结点G、K和H在数组BT中的下标分别为____________
将图2-1中(1)和(2)空缺名称填写在应的位置。ADSL有哪两种IP地址的分配方式?
随机试题
成分血不包括()
A.75cmB.850mC.46cmD.48cmE.40cm1岁时小儿的胸围
关于盗伐林木罪,下列哪一选项是正确的?()
汽轮发电机组属于()。
根据《个人独资企业法》的规定,下列各项中,可以用作个人独资企业名称的有()。
公有住房售后的专项维修资金来源于,售房单位按照一定比例从售房款中提取,原则上该部分多层住宅不低于售房款的()。
群体决策冒险是指群体比个体更富于冒险精神,相对于个人决策而言,群体倾向于选择获利大但成功率小的行为。当人们集合在一起时,比他们单独活动更富于冒险性。根据上述定义,下列属于群体决策冒险的是:
以下属于按指令集结构划分嵌入式处理器的分类是()。
Intherecentpast,medicalresearchershaveshownthatheartdiseaseisassociatedwithcertainfactorsinourday-to-daylives
LookAfterYourVoiceOftenspeakersatameetingexperiencedrymouthsandaskforaglassofwater.Youcansolvetheprob
最新回复
(
0
)