首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明以及Java程序。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click
阅读以下说明以及Java程序。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening (正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click
admin
2008-04-04
65
问题
阅读以下说明以及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://www.kaotiyun.com/show/ffDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
对于业务流清晰的系统可以利用(57)贯穿整个测试用例设计过程,在用例中综合使用各种测试方法,对于参数配置类的软件,要用(58)选择较少的组合方式达到最佳效果,如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用(59)和判定表驱动法。
人眼看到的任一彩色光都是亮度、色调和饱和度3个特性的综合效果,其中(13)反映颜色的种类。
以下各项中,(51)属于需求说明书的评测内容。①系统定义的目标是否与用户的要求一致②设计的约束条件或限制条件是否符合实际③是否考虑过软件需求的其他方案④软件的行为与它必须处理的信息、必须完成的功能是否一致
阅读下列流程图:当用判定覆盖法进行测试时,至少需要设计(44)个测试用例。
对于提升磁盘I/O性能问题,以下表述正确的是(58)。
在执行测试和评价的过程中,会产生较多的文档,(43)是对文档内容的正确描述。①评价需求的主要内容是描述评价的目标,特别是描述了产品的质量需求。②评价规格说明的主要内容是确定对软件及其部件实行的所有分析和测量,标识要采用的操作规程、测试方法和工具。③评
软件测试原则中指出“完全测试是不可能的”,主要原因是______。A.输入量太大、输出结果太多以及路径组合太多B.自动化测试技术不够完善C.测试的时间和人员有限D.仅仅靠黑盒测试不能达到完全测试
模块设计中,某模块根据输入的控制信息从文件中读一个记录或者向文件中写一个记录,则其内聚类型为______。
在编译过程中,进行类型分析和检查是()阶段的一个主要工作。
根据ANSI/IEEE829标准,以下(37)属于《测试程序说明》中程序步骤的内容。 ①启动 ②目的 ③日志 ④设置
随机试题
题18图所示的电路,二极管VD1和VD2为理想二极管,则UAB为______伏。
在“若夫法天则地,随应而动”中,“则’,的词义是
关于影像变形叙述不正确的是
“患什么病用什么药,不像一般商品可以互相替代”体现了药品的
周某有三个儿子,周某生前同次子共同生活在A地。周某死后留有遗产房屋数间在B地,该房屋一直为次子占据和使用。周某的长子(居住C地)和三子(居住D地)提出要求作为周某的法定继承人分割该遗产,但是,周某的次子始终没有答应,而是一直对该房屋占有和使用。后周某的长子
环球银行金融电讯协会(SWIFT)发布报告显示,人民币成为全球第四大支付货币,前三大支付货币是()。
根据以下情境材料,回答下列问题。为进一步加强辖区幼儿园安保工作,保证辖区幼儿园的安全,杜绝安全隐患,近日,贾庄派出所民警深入辖区幼儿园开展安全大检查,切实消除安全隐患,堵塞安全漏洞。下面是对各幼儿园的检查情况:在幼儿园进行安全检查的过程中,一名幼儿
小王和小李6小时共打印了900页文件,小王打印的速度比小李快50%,请问小王每小时打印多少页文件?
设某产品的需求函数Q=Q(p),它对价格的弹性为ε(0
A、102years.B、100years.C、108years.D、86years.A选项都是数字,推测问题与数目相关。题目问的是马云想让阿里巴巴存在多长时间。文中提到“我们想让公司存在102年”。由此可知,答案为A)。
最新回复
(
0
)