早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

阅读以下说明以及Java程序。 【说明】 传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(

题目

阅读以下说明以及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 PENING = 2;

public static final int PEN = 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 PENING = new DoorOpening(this);

public final DoorState PEN = 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() {}

参考答案
正确答案:(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)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中的迁移规则散落在程序中,维护起来较为困难。
看了阅读以下说明以及Java程序。...的网友还看了以下:

若有关系模式R(A,B,C)和S(C,D,E),关系代数表达式E1、E2、E3和E4,且如果严格按照 计算机类考试 2020-05-26 …

A.操作系统B.文件系统C.编译系统D.应用程序系统E.数据库管理系统 计算机类考试 2020-05-26 …

艾维李对公共关系的贡献有A投公众所好B公众必须被告知C说真话D将公共利益与诚实带进了公共关系领域E 其他 2020-07-08 …

电阻有个E数系,看看下我对这个e数系的理解对不对!电阻有个E数系,看看下我对这个e数系的理解对不对 数学 2020-07-31 …

公共关系学多项选择题;1.当代传播学关于传播渠道的划分主要有()A组织传播B亲身传播C人际传播D大众 其他 2020-11-06 …

一位先秦思想家这样评论两位政治人物:齐桓公致力联系诸侯,设法合作维系传统封建秩序,是个执守正道的国君 其他 2020-11-30 …

模块机器人具有三个部分,它们分别是传感器、控制器和执行器.模块机器人的控制器内存有5种控制方法;可使 其他 2020-12-14 …

模块机器人具有三个部分,它们分别是传感器、控制器和执行器.模块机器人的控制器内存有5种控制方法,可使 物理 2020-12-18 …

一位先秦思想家评论道:齐桓公致力联系诸侯,设法合作维系传统封建秩序,是个执守正道而不行诈谋的国君。晋 历史 2021-01-13 …

一位先秦思想家这样评论两位政治人物:齐桓公致力联系诸侯,设法合作维系传统封建秩序,是个执守正道的国君 历史 2021-01-18 …