问题 问答题

【说明】
在一栋m层楼的大厦里,用电梯内和每个楼层的按钮来控制n部电梯的运作。当按下电梯内按钮请求电梯在指定楼层停下时,按钮指示灯亮,当电梯到达指定楼层时,指示灯熄灭。除了大厦的最底层和最高层之外,每层楼都有两个按钮分别指示电梯上行和下行,当这两个按钮之一被按下时相应的指示灯亮,当电梯到达此楼层时灯熄灭,电梯向要求的方向移动。当电梯无升降运动时,关门并停止在当前楼层。
软件设计师火云龙采用面向对象分析的方法,经过三次逐步求精设计之后,得到如图 13-19所示的类图。


【问题1】
按钮类有一个重要的属性,请将该属性填入图13-19中的(a)处。
【问题2】
识别关联的多重性是面向对象建模重要的一步,请根据题目说明填空(1)~(6)。
【问题3】
软件设计师火云龙在初步设计类时,将门(的状态)作为电梯的属性,后经思考,将电梯门设计成一个独立的类,这么做的好处是什么
软件设计师火云龙在初步设计类时,并没有设计“请求”类,后来又加入了该类,这么做的原因是什么

答案

参考答案:[问题1]
(a)指示灯
[问题2]
(1)mn (2)mn (3)2m-2
(4)2m-2 (5)n (6)n
[问题3]
一旦将电梯门作为一个独立的类,则打开或关闭电梯门的唯一办法就是向“电梯门”类对象发送消息。如果电梯门类封装得好,就能保证不会在错误的时间关闭或打开电梯门,从而有效杜绝严重意外事故的发生。
出于安全考虑,在未经授权时不能随意修改“请求”,因此将“请求”设计成独立的类,如果“请求”类封装得好就能有效保证电梯安全运行。

解析:从图13-19可知,电梯按钮类和楼层按钮类都是按钮类的子类,电梯按钮和楼层按钮的共同点就是用指示灯跟乘客进行交互,所以,按钮类必定有个重要的属性“指示灯”。识别关联的多重性是面向对象建模重要的一步。题目的说明中提到“在一栋m层楼的大厦里,用电梯内和每个楼层的按钮来控制n部电梯的运作”、“除了大厦的最底层和最高层之外,每层楼都有两个按钮分别指示电梯上行和下行”,所以这栋大厦中一共有mn个电梯按钮,共有2m-2个楼层按钮,电梯控制器类控制着所有的电梯按钮、楼层按钮和电梯,所以第(1)~(6)空应分别填:mn、mn、2m-2、2m-2、n、n。注意,不可以用*号代替,*号表示多个,具体多少是未知,而题目已经给定具体数目,所以应该用m、n来表示。
识别类是面向对象分析的第一步,常用的方法是名词分析法。题目的说明其实就是电梯系统的需求说明,出现了如下主要名词:大厦、电梯、楼层、按钮、运动、指示灯、请求、最底层、最高层、方向和门。这些名词所代表的事物可作为类的初步候选者。其中,大厦、最底层、最高层和楼层处于问题范畴之外,因此不必考虑。运动、方向、指示灯和门可作为其它类的属性,例如,指示灯(的状态)可作为按钮类的属性,方向和门(的状态)可作为电梯类的属性。
经过上述初步筛选只剩下两个基本的候选类,即电梯类和按钮类。在题目的说明中实际指定了两种按钮,因此,应该为按钮类定义两个子类,即电梯按钮和楼层按钮。综合上述分析结果,可得出系统的类图,如图13-50所示。
[*]
这个模型是非常初步的模型,需要进一步充实、精化和完善。
分析上述模型会发现它存在比较明显的不足:在实际的电梯系统中,按钮并不直接与电梯通信;为了决定分派哪一部电梯去响应一个特定的请求,必须有某种类型的电梯控制器。然而在题目说明中并未提到控制器,因此它未被列入候选类中。由此可见,名词分析法只为寻找候选类提供了初步线索,不能指望依靠这种方法找出全部候选类。系统分析员必须根据领域知识、常识和经验做进一步分析,才能找出问题域中所有的类。补充了电梯控制器类之后,其类图如图13-51所示。
[*]
这个模型也并非十分完善。电梯类的主要功能应是执行电梯控制器发出的移动或等待命令,如果将门(的状态)作为电梯的一个属性,则电梯还要执行关门或开门的命令,这样电梯类的功能就不单一了。于是将电梯门划分出来成为一个独立的类,一旦将其作为一个独立的类,则打开或关闭电梯门的唯一办法就是向“电梯门”类对象发送消息。如果电梯门类封装得好,就能保证不会在错误的时间关闭或打开电梯门,从而有效杜绝严重意外事故的发生。同样,出于安全考虑,在未经授权时不能修改“请求”,因此将“请求”设计成独立的类。经过再次完善之后的类图如图13-19所示。

填空题
补全对话,情景问答
根据对话内容,从下面方框中选择适当的单词或短语填空。
What else      because of      live      answer      so that
A: What should we do if we need to call the emergency (紧急情况) services?
B: Well, you need to know the number of the emergency services in the place where you 1        
A: OK. What happens when we call the emergency number?
B: When you do so, an operator will 2         your call. The operator asks you which service you need-the police, 
 the fire department, or an ambulance service. You should tell the operator clearly what the situation is and 
 which service you need. It is important to speak calmly and clearly 3          the operator can understand you.
A: Does the operator ask for any other information?
B: Yes. The operator asks the caller where he or she is calling from and also asks for the caller's name.
A: I see. 4         should we remember when making an emergency call?
B: It is very important to keep calm. Many people forget to give very important information to the operator. For
example, they tell the operator about a fire on Mason street but they do not mention which part of the city the
fire is happening in.
A: And there may be more than one Mason Street in the same city.
B: Exactly. Sometimes, 5          receiving wrong or incomplete information, the emergency services waste time
by going to the wrong place.
A: Thank you for telling me how to use the emergency services.