首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 [说明] 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图6-1所示。 采用状态(State)模式来实现
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 [说明] 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图6-1所示。 采用状态(State)模式来实现
admin
2012-03-21
27
问题
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
[说明]
某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图6-1所示。
采用状态(State)模式来实现该纸巾售卖机,得到如图6-2所示的类图。其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应图6-1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。
[Java代码]
import java.util.*;
interface State {
public void insertQuarter(); //投币
public void ejectQuarter(); //退币
public void turnCrank(); //按下“出纸巾”按钮
public void dispense(); //出纸巾
}
class TissueMachine {
(1) soldOutStater noQuarterState, hasQuarterState, soldState,state;
state - soldOutState;
int count=0; //纸巾数
public TissueMachine (int numbers) { /*实现代码省略*/}
public State getHasQuarterState() { return hasQuarterState; }
public State getNoQuarterState() { return noQuarterState; }
public State getSoldState() { return soldState; }
public State getSoldOutState() { return soldOutState; }
public int getCount() { return count; }
//其余代码省略
}
class NoQuarterState implements State {
TissueMachine tissueMachine;
public void insertQuarter() {
tissueMachine. setState( (2) );
}
//构造方法以及其余代码省略
}
class HasQuarterState implements State {
TissueMachine tissueMachine;
public void ejectQuarter() {
tissueMachine.setState( (3) );
}
//构造方法以及其余代码省略
}
class SoldState implements State {
TissueMachine tissueMachine;
public void dispense() {
if(tissueMachine .getCount()>0) {
tissueMachine.setState( (4) );
}else {
tissueMachine.setState( (5) ); }
}
}
(5)
选项
答案
tissueMachine. getSoldOutState()
解析
本题考查状态(State)模式的概念及应用。
状态模式是一种对象的行为型模式,允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式的类图如下所示:
状态模式主要解决的是控制一个对象转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
题目利用状态模式来实现一个简易的纸巾售卖机。售卖机的状态转换图已经在题目中给出,类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别用来表示售卖机的4种不同状态,对应于状态模式中的ConcreteStatel,...ConcreteStateN。题目所设置的填空,主要集中在状态转换上。因此解答该题时,要求在理解状态模式内涵的基础上,依据纸巾售卖机的状态转换原则,给出正确的状态设置。
空(1)出现在类TissueMachine的数据成员定义部分。状态模式封装了状态的转换过程,但是它需要枚举可能的状态,因此需要实现确定状态种类。因此在类TissueMachine中需定义出所有可能的状态对象。根据所给出的对象名称及说明中的描述,可知(1)处应填入的类名为State。
空(2)~(5)要求填写类TissueMachine中的方法setState在不同调用处的实际参数。这里的一个难点在于题目中没有显示地给出方法setState的原型及语义,这要求考生根据面向对象程序设计风格及说明中给出的应用场合来推断setState的内涵及原型,主要是确定其参数列表。
在面向对象程序设计中,为了做到封装,通常都会把数据成员定义为私有的。私有的数据成员对象不能直接访问,因此在类中都会提供2组访问私有数据成员的方法,分别为get…方法和set…方法(…代表对应的数据成员名称)。get…方法表示获取私有数据成员的值,其返回值类型为对应的数据成员的类型;set…方法表示对数据成员进行赋值,所要赋的值通常通过参数传递进去,方法的返回值类型通常为void。根据面向对象程序设计的这些特点,以及状态模式的内涵及应用场合,可以推断出setState方法的功能就是设置纸巾售卖机的当前状态。纸巾售卖机在任一时刻只能处于一个唯一的状态,由状态模式可知,纸巾售卖机的状态都是用状态对象表示的,由此就可以确定出,setState方法的参数只要一个就可以了,就是表示纸巾售卖机下一状态的状态对象。
经过以上分析之后,可以明确空(2)~(5)空所填的内容都应与状态转换相关。因此要填充这些空,只要对照图5-1的状态转换图,根据状态转换的条件确定出当前状态及下一状态即可。
空(2)出现在方法insertQuarter内,即给纸巾售卖机投入2元钱。根据状态图,“投入2元钱”之后,售卖机应转换到“有2元钱”的状态。“有2元钱”对应的状态的类为“HasQuarterState”,所以空(2)处应填写类HasQuarterState的对象。由此得出(2)应填tissueMachine. getHasQuarterState()。
同理,空(3)表示的状态是从“有2元钱”状态,经历“退回2元钱”事件之后的状态,及“没有投币”状态。所以空(3)处应填tis sueMachine. getNoQuarterState()。
空(4)和(5)处分别表示卖出一包纸巾之后,售卖机应该转换到的下一个状态。这个跟售卖机中的纸巾数有关,如果还有纸巾,则转换到“没有投币”状态,如果没有纸巾了,则转换到“纸巾售完”状态,因此,空(4)处应填tissueMachine. getNoQuarterState(),空(5)处应填tissueMachine.getSoldOutState()。
转载请注明原文地址:https://kaotiyun.com/show/2eDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
测试成本控制的目标是使测试开发成本、测试实施成本和测试维护成本最小化,以下理解正确的是______。A.测试准备成本属于测试实施成本B.可以通过加强软件测试的配置管理来降低测试维护成本C.测试设计成本控制的目标是尽可能地减少测试总执行时间和所需的测试
某应用系统采用防火墙技术来实现安全防护,在进行安全防护测试时,设计的测试点不包括______。
假设系统采用PV操作实现进程同步与互斥。若n个进程共享两台打印机,那么信号量S的取值范围为()。
函数t()、f()的定义如下所示。若调用函数t()时传递给x的值为3,并且调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t0的返回值为(33).
若计算机中地址总线的宽度为24位,则最多允许直接访问主存储器(6)________________的物理空间(以字节为单位编址)。
在计算机系统中常用的输入/输出控制方式有无条件传送、中断、程序查询和DMA等。其中,采用______方式时,不需要CPU控制数据的传输过程。
静态图像压缩标准JPEG2000中使用的是(60)算法。
________________不属于网络测试的测试类型。
某银行系统要求报表功能容易扩展,以便在需要的时候可以处理新的文件格式,.则该需求是()的。
软件可靠性管理把软件可靠性活动贯穿于软件开发的全过程,成为软件工程管理的一部分。确定软件的可靠性目标在()阶段。
随机试题
A.腹部柔韧有抵抗力B.腹壁明显紧张,强直如板C.前腹壁水平明显低下,肋弓和耻骨联合显露D.腹部静脉迂曲变粗,显而易见E.左腰部皮肤呈暗灰蓝色胃穿孔可出现的体征是()
Only11people______theshipwreck.
男性,48岁,无明显诱因出现皮肤黏膜黄染、逐渐加重,皮肤瘙痒,大便呈浅灰色,查体:巩膜黄绿色,心肺听诊正常,腹软、无压痛、肝肋下2cm,Ⅱ度硬,脾未触及,实验室检查:血中结合胆红素明显增加,血清碱性磷酸酶活性增高,最可能的诊断是
(2008年多项选择第54题)资产负债表是反映企业在会计期末财务状况的报表,通过资产负债表可以了解企业的()。
据《论语·述而》记载,“子以四教:文、行、忠、信。”“‘诗、书、礼、易、乐、春秋”属于“四教”中的()。
能有效地提高幼儿认识、情感、意志与行为水平且能充分发挥幼儿主体作用的教育方法是()
摩擦:物体:热量
设矩阵A=,B为某个三阶非零矩阵,且AB=0,则t的值等于[].
若幂级数的收敛区间为(一27,27),则幂级数的收敛半径为_____.
合同一般是由要约和承诺构成。以下选项对于电子合同的要约叙述不正确的是()。
最新回复
(
0
)