预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共55页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第10章面向对象分析10.1面向对象分析的基本过程10.1面向对象分析的基本过程10.1面向对象分析的基本过程面向对象分析的过程 寻找类与对象 识别结构 识别主题 定义属性 建立动态模型 建立功能模型 定义服务 10.2需求陈述ATM机系统问题描述 银行网络中包含柜员和ATM,ATM被共享中心所分享。 每家银行利用自己的计算机维护自己的账户并处理账户所属的交易,这些交易包括存款和取款。 某些银行拥有自己的柜员站,柜员站直接和该银行的计算机通信,柜员键入账户数据和交易数据。 ATM和中心计算机通信,中心计算机再和银行清账。 ATM接受金融卡,要求用户做些操作后和中心计算机通信,执行交易给予现金和打印收据。 系统要求保留交易记录和严守安全规定。 能同时存取客户的相同账户。 自动取款机(ATM)系统 ATM系统 10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型直接提取动词短语得出的关联 ATM、中央计算机、分行计算机及柜员终端组成网络。 总行拥有多台ATM。 ATM设在主要街道上。 分行提供分行计算机和柜员终端。 柜员终端设在分行营业厅及储蓄所内。 分行分摊软件开发成本。 储户拥有账户。 分行计算机处理针对账户的事务。 分行计算机维护账户。 柜员终端与分行计算机通信。 柜员输入针对账户的事务。 ATM与中央计算机交换关于事务的信息。 中央计算机确定事务与分行的对应关系。 ATM读现金兑换卡。 ATM与用户交互。 ATM吐出现金。 ATM打印账单。 系统处理并发的访问。 10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型10.3建立对象模型经过筛选之后,得到ATM系统中各个类的属性,如图所示。 建立类间的继承是为了共享其公共性质/属性。 继承也对类按层次加以组织。 继承关系反映出一定深度的领域知识,需领域专家密切配合才能完成。 继承前人的成果是提高效率的重要方法,也是复用的基础。两种建立继承(即泛化)关系的方式: (1)自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类归纳思维过程。 例如,在ATM系统中,“远程事务”和“柜员事务”是类似的,可以泛化出父类“事务”;类似地,从“ATM”和“柜员终端”泛化出父类“输入站”。 (2)自顶向下:把现有类细化成更具体的子类或从已知类派生出一个新类,这模拟了人类的演绎思维过程:从一般到特殊。 带有形容词修饰的名词词组往往暗示了一些具体类。分析阶段应该避免过度细化。 增加了继承关系之后的ATM对象模型 一次建模过程很难得到完全正确的对象模型。 有些细化工作(例如,定义服务)是在建立了动态模型和功能模型之后才进行的。 由于面向对象的概念和符号在整个开发过程中都是一致的,因此远比使用结构分析、设计技术更容易实现反复修改、逐步完善的过程。 建模的步骤并不一定按照前面讲述的次序进行。 它给初学者提供了一个指南。 下面以ATM系统为例,讨论可能做的修改: 1.分解“现金兑换卡”类 “现金兑换卡”有两个相对独立的功能,它既是鉴别储户及使用ATM的权限的卡,又是ATM获得分行代码和卡号等数据的数据载体。 因此,把“现金兑换卡”类分解为“卡权限”和“现金兑换卡”两个类,将使每个类的功能更单一:前一个类标志储户访问账户的权限,后一个类是含有分行代码和卡号的数据载体。 多张现金兑换卡可能对应着相同的访问权限。2.“事务”由“更新”组成 一个事务可包含对账户的若干次更新。更新指的是对账户所做的一个动作(取款、存款或查询)。“更新”有自己的属性(类型、金额等),应该独立存在,因此应该把它作为类。 3.把“分行”与“分行计算机”合并 区分“分行”与“分行计算机”,对于分析这个系统来说,并没有多大意义,为简单起见,把它们合并。类似地,应该合并“总行”和“中央计算机”。 下图给出了修改后的ATM对象模型,与修改前比较起来,它更简单、更清晰。修正: 总行/分行的通信, 储户输入事务(ATM) ATM读卡 拥有/通信 修改后的ATM对象模型对于仅存储静态数据的系统(例如数据库)来说, 动态模型并没有什么意义。 但是若开发交互式系统时,动态模型却起着很重要的作用。 例如:收集输入信息是目标系统的主要工作 建立动态模型的三步: 编写典型交互行为的脚本,不遗漏常见的交互行为。 从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。 排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。 最后,比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。脚本:是指系统在某一执行期间内出现的一系列