问答题 阅读下列说明和图,回答问题。
[说明]
某银行计划开发一个自动存提款机模拟系统(ATM System)。系统通过读卡器(CardReader)读取ATM卡;系统与客户(Customer)的交互由客户控制台(CustomerConsole)实现;银行操作员(Operator)可控制系统的启动(System Startup)和停止(System Shutdown);系统通过网络和银行系统(Bank)实现通信。
当读卡器判断用户已将ATM卡插入后,创建会话(Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码(PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务(Transaction)。
(1)从ATM卡账户取款(Withdraw)。
(2)向ATM卡账户存款(Deposit)。
(3)进行转账(Transfer)。
(4)查询(Inquire)ATM卡账户信息。
一次会话可以包含多个事务,每个事务处理也会将卡号和个人验证码信息送到银行系统进行验证。若个人验证码错误,则转个人验证码错误处理(Invalid PIN Process)。每个事务完成后,客户可选择继续上述事务或退卡。选择退卡时,系统弹出ATM卡,会话结束。
系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图如图10.18所示,一次会话的序列图(不考虑验证)如图10.19所示。消息名称参见表10.6。
【正确答案】[问题1] A1:读卡器 A2:用户
U1: InsertCard U2: Invalid PIN Process U3: Session (1)空处:extend
[问题2] (6) readPrN() (7) PIN (8) Create(atm,this,card,pin)
(9) performTransaction()
[问题3] 它们之间是泛化关系,无论存、取、转、查,它们拥有共同的结构和行为。
【答案解析】[要点解析] 这是一道UML的面向对象分析题目。
[问题1]
显然,A2是用户,而U3是交互核心,就是Session。那么就剩下插卡和密码错误处理。我们知道,要进入Session,插卡和读卡是必须的,而密码错误判断不一定需要,而必须的是include关系,不一定要的是extend关系,所以U1是插卡,U2是密码错误判断,A1是读卡器。
[问题2]
其实表中的内容在图10.19已经出现很多了,一对比,发现只有4个没有出现,分别是PIN、PIN信息、创建事务和执行事务,那么答案就在这4个中选择。Customerconsole是人机交互控制平台,考虑到循环在8、9处,而可以循环的自然是办交易,也就是多次的创建事务和执行事务,所以8、9分别是创建事务和执行事务。这样一来,6、7就简单多了,自然是读密码和密码信息了。
[问题3]
4个用例具有共同的特征,就是读卡、读密码、输入(金额)、确定等,所以它们与Session刚好满足泛化要求。