第十章面向对象分析;10.1面向对象分析的根本过程;10.1面向对象分析的根本过程;10.1面向对象分析的根本过程;面向对象分析的过程
寻找类与对象
识别结构
定义属性
建立动态模型
定义效劳
;10.2需求陈述;;ATM机系统问题描述
;ATM机系统问题描述
;自动取款机〔ATM〕系统
ATM系统;10.3建立对象模型;10.3建立对象模型;;从陈述中找出所有名词,作为类和对象的初步候选者
;
一张现金兑换卡就是一张特制的磁卡,上面有分行代码,对应总行下的一个分行。卡号确定这张卡可以访问哪些账户。一张磁卡可以访问储户的假设干个账户,但仅属于一个储户所有。但是同一张卡可以有多个副本,因此必须考虑同时在假设干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。
当用户将磁卡插入ATM后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。ATM要求用户输入密码,ATM将密码和卡上的信息传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡的分行代码委托分行验证用户密码,假设密码正确,那么ATM要求用户选择事务类型〔取款,查询等〕。当用户选择取款时,ATM请求用户输入取款额。最后ATM从现金口吐出现金,并且打印账单给用户。;10.3建立对象模型;找出候选类与对象;确定关联;;确定关联;直接提取动词短语得出的关联
ATM、中央计算机、分行计算机及柜员终端组成网络。
总行拥有多台ATM。
ATM设在主要街道上。
分行提供分行计算机和柜员终端。
柜员终端设在分行营业厅及储蓄所内。
分行分摊软件开发本钱。
储户拥有账户。
分行计算机处理针对账户的事务。
分行计算机维护账户。
柜员终端与分行计算机通信。
柜员输入针对账户的事务。
ATM与中央计算机交换关于事务的信息。
中央计算机确定事务与分行的对应关系。
ATM读现金兑换卡。
ATM与用户交互。
ATM吐出现金。
ATM打印账单。
系统处理并发的访问。
;确定关联;;隐含的关联
〔1〕总行由各个分行组成。
〔2〕分行保管账户。
〔3〕总行拥??中央计算机。
〔4〕储户拥有现金兑换卡。
〔5〕中央计算机与分行通信;10.3.3划分主题;10.3.4确定属性;10.3.4确定属性;经过筛选之后,得到ATM系统中各个类的属性,如以下图。;建立类间的继承是为了共享其公共性质/属性。
继承也对类按层次加以组织。
继承关系反映出一定深度的领域知识,需领域专家密切配合才能完成。
继承前人的成果是提高效率的重要方法,也是复用的根底。;两种建立继承(即泛化)关系的方式:
(1)自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类归纳思维过程。
例如,在ATM系统中,“远程事务〞和“柜员事务〞是类似的,可以泛化出父类“事务〞;类似地,从“ATM〞和“柜员终端〞泛化出父类“输入站〞。
(2)自顶向下:把现有类细化成更具体的子类或从类派生出一个新类,这模拟了人类的演绎思维过程:从一般到特殊。
带有形容词修饰的名词词组往往暗示了一些具体类。分析阶段应该防止过度细化。;增加了继承关系之后的ATM对象模型
;;1.分解“现金兑换卡〞类
“现金兑换卡〞有两个相对独立的功能,它既是鉴别储户及使用ATM的权限的卡,又是ATM获得分行代码和卡号等数据的数据载体。
因此,把“现金兑换卡〞类分解为“卡权限〞和“现金兑换卡〞两个类,将使每个类的功能更单一:前一个类标志储户访问账户的权限,后一个类是含有分行代码和卡号的数据载体。
多张现金兑换卡可能对应着相同的访问权限。;2.“事务〞由“更新〞组成
一个事务可包含对账户的假设干次更新。更新指的是对账户所做的一个动作(取款、存款或查询)。“更新〞有自己的属性(类型、金额等),应该独立存在,因此应该把它作为类。
3.把“分行〞与“分行计算机〞合并
区分“分行〞与“分行计算机〞,对于分析这个系统来说,并没有多大意义,为简单起见,把它们合并。类似地,应该合并“总行〞和“中央计算机〞。
以以下图给出了修改后的ATM对象模型,与修改前比较起来,它更简单、更清晰。;1、分解“现金兑换卡〞类为“卡权限〞和“现金兑换卡〞两个类;
2、“事务〞由“更新〞组成;
3、把“分行〞与“分行计算机〞合并
;对于仅存储静态数据的系统(例如数据库)来说,
动态模型并没有什么意义。
但是假设开发交互式系统时,动态模型却起着很重要的作用。
例如:收集输入信息是目标系统的主要工作。;遗漏常见的交互行为。建立动态模型的三步:
编写典型交互行为的脚本,包括