问答题 阅读下列说明和图,回答问题。
[说明]
某汽车停车场欲建立一个信息系统,已经调查到的需求如下。
(1)在停车场的入口和出口分别安装一个自动栏杆、一台停车卡打印机、一台读卡器和一个车辆通过传感器,示意图如图10.25所示。

(2)当汽车到达入口时,驾驶员按下停车卡打印机的按钮获取停车卡。当驾驶员拿走停车卡后,系统命令栏杆自动抬起;汽车通过入口后,入口处的传感器通知系统发出命令,栏杆自动放下。
(3)在停车场内分布着若干个付款机器。驾驶员将在入口处获取的停车卡插入付款机器,并缴纳停车费。付清停车费之后,将获得一张出场卡,用于离开停车场。
(4)当汽车到达出口时,驾驶员将出场卡插入出口处的读卡器。如果这张卡是有效的,系统命令栏杆自动抬起;汽车通过出口后,出口传感器通知系统发出命令,栏杆自动放下。若这张卡是无效的,系统不发出栏杆抬起命令而发出警告信号。
(5)系统自动记录停车场内空闲的停车位的数量。若停车场当前没有车位,系统将在入口处显示“车位已满”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。
表10.10 类/用例/状态列表
用例名 说明 类名 说明 状态名 说明
Car entry 汽车进入停车场 Central Computer 停车场信息系统 Idle 空闲状态,汽车可以
进入停车场
Car exit 汽车离开停车场 PaymentMachine 付款机器 Disable 没有车位
Report
Statistics
记录停车场的相
关信息
CarPark 停车场,保存车位信息 Await Entry 等待汽车进入
Barrier 自动护栏 Await Ticket
Take
等待打印停车卡
Car entry
when full
没有车位时,汽
车请求进入停车
EntryBarrier 入口的护栏 Await
Enable
等待停车场内有空
闲车位
ExitBarrier 出口的护栏
根据上述描述,采用面向对象方法对其进行分析与设计,得到了表10.10所示的类/用例/状态列表、图10.26所示的用例图、图10.27示的初始类图以及图10.28所示的描述入口自动栏杆行为的UML状态图。

【正确答案】[问题1]
U1:Car entry U2: Car exit U3: Car entry when full
[问题2]
A: CarPark B: Barrier C: EntryBarrier D: ExitBarrier
[问题3]
S1: Idle S2: Await Ticket Take S3: Await Enable S4: Await Entry
[问题4]
U3是U1的扩展,当要汽车进入时判断是否有空车位。U1和U3的expend关系表示一种聚集关系,具体为“组合”关系。它表示U3是U1状态的一个子集,U3是U1的一部分。
【答案解析】[分析] 本题考查面向对象分析中的类图、用例图和状态图。用例图描述了一组用例、参与者及他们之间的关系。包括以下几个部分:用例(Case)、参与者(Actor)。用例视图中的参与者与系统外部的一个实体以某种方式参与了用例的执行过程;用例是一个叙述型文档,用来描述参与使用系统、完成某个事情时发生的顺序。
[问题1] 题目中车辆入场和出场,而入场时分有空位和无空位的情形,当无车位时显示“车位已满”信息。这时,停车卡打印机将不再出卡,只允许场内汽车出场。说明入场时,没有车位入场是一种扩展关系。根据表10.10和图10.26可以得出U1为Car entry,U2为Car exit,U3为Car entry when full。
[问题2] 汽车出入口,当卡有效时,系统自动抬起栏杆;当卡无效时,则系统不抬栏杆,且发出警告,所以自动护栏类(Barrier)有两种子类:一个是入口的护栏类(EntryBarrier),另一个就是出口的护栏类(ExitBarrier)。所以,在图10.27中,类B为护栏类(Barrier),类C为入口护栏类(EntryBarrier),类D为出口护栏类(ExitBarrier)。类A和类B之间存在聚集关系;题目中描述有:当有车位时允许入场,无车位时停车卡打印机将不再出卡,只允许场内汽车出场。所以一张卡片可以确定多个护栏抬起或不发卡入场,由表10.10可以得出类A为停车场保存卡位信息类(CarPark)。
[问题3] 考查对状态图的理解。根据题目的描述和表10.10,黑点表示开始状态,到达S1,很容易确定S1为状态:Idle(空闲状态,汽车可以进入停车场)。又因为状态Disabled(没有车位)到S3有事件“索取停车卡”,而从S3到S2有事件“有空闲车位/打印停车卡”,由题目的说明4、5可知,车位满了以后,若有车辆出去,则释放一个车位;若没有,则等待打印停车卡。所以可以确定S3的状态为Await Ticket Take(等待打印停车卡)。S1到S2有事件“索取停车卡/打印停车卡”,S2到S4有事件“取走停车卡/抬起护栏”,包括S3到S2有事件“有空闲车位/打印停车卡”,则说明S2这个状态都与“有车位,才发卡”有关,要等待有车位才发卡,或取卡放行后进入等待。所以S2为状态Await Enable(等待停车场内有空位)。由于S2到S4有事件“取走停车卡/抬起护栏”,S4到S1有事件“汽车进入停车场/放下护栏”。很显然,当取走停车卡/抬起护栏将车子放行后,管理系统的停车位的空闲车位数加1:当汽车进入停车场/放下护栏后,管理系统将停车位的空闲车位数减1。因此,S4的为Await Entry(等待汽车进入)。
[问题4] 本小题考查对扩展关系的理解。汽车的入场前提是有空位,当然若没有空位想入场的话就需要等待,这种关系就是扩展了入场关系。