面向对象分析全解.docx
- 文档编号:3610250
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:14
- 大小:232.71KB
面向对象分析全解.docx
《面向对象分析全解.docx》由会员分享,可在线阅读,更多相关《面向对象分析全解.docx(14页珍藏版)》请在冰豆网上搜索。
面向对象分析全解
第10章面向对象分析
10.1面向对象分析的基本过程
不论采用哪种软件工程方法开发软件,需求分析的主要
工作都是:
理解需求、表达需求和验证需求,下面的图概括地表示了参照当前系统建立目标系统的过程。
表达需求
图:
参照当前系统建立目标系统
面向对象分析(Object-OrientedAnalysis,简称00A)的
关键就是识别出对象与类,并分析它们之间的关系,最终建
立对象模型、动态模型和功能模型。
10.1.1概述
系统分析员要善于学习、勇于实践,更重要的是一切从实
际出发。
[注]“00A就是抽取和整理用户需求并建立问题域精确模型
的过程。
”(P231)――这在一开始能做到吗?
一一扯蛋
10.1.23个子模型与5个层次
面向对象建模需建立包含系统的三个要素:
1)静态结
构(对象模型)、2)交互次序(动态模型)、3)数据交换(功能模型)。
建立系统模型的过程是一个迭代(iterations)式的自顶向下的求精过程。
对于一个大型复杂系统来说对象模型一般由下述5个层次组成:
图10.2复杂问题的对象模型的5个层次
其中主题层是指从一个更高(高于“类”)的抽象层次
来描述对象模型(即从一个相当高的层次上描述总体模型),
通过划分“主题”把一个复杂系统的对象模型分解成几个不同的概念范畴。
其实上述5个层次就是00A中建立对象模型的5项主要工作:
找出类和对象,识别结构(类或对象之间的关系),识别主题、定义属性、定义服务。
我们知道动态模型和功能模型中都包含了对象模型中的操作,因此人们在定义每个类
中的服务前,往往先建立起动态模型和功能模型,这样说来OOA大体上可按下列顺序进行:
(1)确定类和对象
(2)确定关联
(3)划分主题
(4)定义属性
(5)确定继承关系
(6)建立动态模型
(7)建立功能模型
(8)定义服务
需要注意地是在这里我们根本不强调顺序,更不是谈什
么步骤。
10.2需求陈述
需求陈述的主要任务是准确地回答“系统必须做什
么?
”,而不是“系统应该怎么做?
”
10.2.1书写要点
1022例子
我们用“ATM系统”(ATM是AutomaticTellerMachine的缩
写,意即自动柜员机)的开发作为OOA&OOD的实例
图10.2ATM系统
10.3建立对象模型
10.3.1确定类与对象
1.找出候选的类与对象(例:
P236ATM系统)
一般来说,大千世界中的客观事物可分为5类:
1)可感知的物理实体,如:
飞机,汽车,房屋
2)人或组织的角色,如:
教师,医生,计算机系,学生处
3)应该记忆的事件,如:
飞行,演出,访问,交通事故
4)对象的相互作用,如:
购买,结婚,纳税
5)概念,如:
政策,刑法,泛化,集合
2.
筛选出正确的类与对象
我们需要确定的类与对象是:
(1)应该记录的对象
(2)需要它提供服务的对象
同时要关注下述6个方面:
1)冗余:
去掉冗余的类(如“用户”)
2)无关:
去掉无关的类(如“储蓄所”)
3)笼统:
去掉笼统的类(如“银行”)
4)属性:
区分属性和类(某个性质若具有很强的独立性应当作为“类”)
5)操作:
区分操作和类(本身具有属性且需独立存在的“操作”应当作为“类”)
6)实现:
忽略实现内容(应当去掉仅和实现有关的“类”,如“事务日志”)
10.3.2确定关联
对象之间的相互依赖、相互作用的关系就是关联。
在分
析的起始阶段,我们不必花过多的精力去区分关联和聚集,
聚集不过是一种特殊的关联,是关联的一个特例。
1.初步确定关联
ATM系统)
2.筛选
筛选时要关注下述5个方面:
1)已删去的类之间的关联也要删除
2)无关的或在实现阶段考虑的关联要删除
3)描述瞬时事件的关系不应作为关联(关联应该描述问题域的静态结构)
4)三个或三个以上对象的关联要作分解或描述成限定关联
5)冗余关联要删除
3.进一步完善
完善时要关注下述4个方面:
1)正名:
选择更明确的名字作为关联名
2)分解:
分解已确定的类以适用关联
3)补充:
及时补充遗漏关联
4)标明重数:
但无需花过多精力
图10.3ATM系统原始的类图
10.3.3划分主题
按问题领域而不是用功能分解来高度概括主题
10.3.4确定属性
属性是类中所定义的数据,它表明了对象的性质。
一般来说,确定属性的过程包括分析和选择两个步骤:
1.分析
通常用名词词组表示属性,^口:
“汽车的颜色”、“光标的位置”,而用形容词表示可枚举的具体属性,如:
“红色的”、“白色的”。
在分析阶段应该仅考虑与具体应用直接相关的属性,不要考虑那些纯粹用于实现的属性。
2.选择
选择时要关注下述6个方面:
1)区分对象与属性(仅关注其值的是属性);
2)区分关联类属性与对象属性(例:
依赖某个关联链的性质是关联类属性);
3)区分限定词和属性(能用限定词更好)
4)区分内部状态和属性(例:
某性质是对象的内部状态)
5)忽略无影响的属性(在分析阶段应该忽略对
大多数操作无影响的属性)
6)注意属性的相关性(分解该“类”)
图10.4ATM系统对象模型中的属性
1035识别继承关系
确定了类中的属性之后,就可以利用继承机制共享公共
性质,并对众多的类重新加以组织。
般来说,可以应用两种方式建立继承(即泛化)关系:
(1)自底向上:
抽象出现有类的共同性质泛化出父
类;
2)自顶向下:
把现有类细化成更具体的子类
输AM
输入►
1+
査型
日期
1十
-
I'll;►
图10.5带有继承关系的ATM对象模型
1036反复修改
对象模型的建立是一个反复修改、逐步完善的迭代过
程。
对于初学者来说,可尝试用面向对象方法开发几个较小系统,取得一定的经验后,再总结更适合自己的工作方式
1.分解“现金兑换卡”类
2.“事务”由“更新”组成
3.把“分行”与“分行计算机”合并
图10.6修改后的ATM对象模型
10.4建立动态模型
般来说,建立动态模型的典型步骤如下:
(1)编写脚本,确保不遗漏正常的交互行为;
(2)从脚本中提取事件,确定每个事件的发送对象
(触发该事件动作的对象)和接受对象;
(3)画事件跟踪图(SequenceDiagram,时序图或顺
序图,描述对象之间的时间顺序)
(4)画状态图
(5)审查状态图的完整性和一致性
10.4.1编写脚本
脚本是指系统在某一执行期间内出现的一系列事件(脚
本描述事件序列,是用例的实例,是系统的一种实际使用方法。
),它描述用户(或其它外部设备)与系统之间的交互过程;对于每个事件,脚本都应该指明触发该事件的动作对象(如:
系统、用户或其它外部事物)、接受事件的目标对
象,以及该事件的参数。
[目的]编写脚本的目的是保证不遗漏重要的交互步骤<
[实质]编写脚本的实质是分析用户对与系统交互过程的要求。
编写脚本时,首先编写正常情况的脚本,其次考虑特殊
情况,最后考虑出错情况;如有可能还应该允许用户“异常
操作”。
此外还应该提供“在线帮助”、状态查询等在基本交互行为之上的“通用”交互行为。
表10.1ATM系统的正常悄况脚本
*ATM请储户插卡;储户插人一张现金兑换卡
*ATM接嚨该卡并读它上面的分行代码和卡号
*ATM要求储户输入密码;储户输入自己的密码】為4等数宇
•玄TN(请求总行验证卡号和密码|总行要求39号分行樓对储户密码’然后通知為TM说这张卡有效
*ATM要求储户选择事务类型(取款、转账、査询等};储户选择乂取款”
・ATM要求储户输入取款额,储户输人細0
*ATM确认取款额在预先規定的限额内,然后要求嵐行处理这牛事务:
总行把请求转给分行,该分行成功地处理完这项事务井返回该账户的新余额
*ATM吐出现金并请储户拿走这些现金#储户拿走现金
*ATM问储户是習继续这映事务|储户回答“不“
*ATM打印脈单,退出现金兑换卡,请储户拿走它们;储户取走账单和卡
*ATM请储户插卡
表】山2ATM的异常情况脚本
•ATM请储户插卡;储户插人一张现金兑换卡
•A丁就接受这张卡并顷序读它上面的数字
•ATM要求犠码;储户课输入鹽闕
•ATM请求思行验证输人的数字和密码’总行在向有关分行咨洵之后拒绝遠张卡
•ATM显示“密码错讯并请储户重新输人密码;储户输入谴总行验证后知道这找输入的密码正确
•ATM请储户选择事务类型;储户选择“取款”
•ATM询问取款额;储户改蛮主意不想取款了,他按下“取消抄键
•ATM退出现金兑换卡’并诸储户拿走它;储户拿走他的卡
•ATNI请储户插卡
1042设想用户界面
否喜欢一个系统起很重要的作用,因此在分析阶段也不能完
全忽略用户界面。
设计用户界面时重要的是用户和系统进行信息交换的方式
向储户显示的信息
EHHBSCHEESE||ENTER]|CLEAR||CANCER
胀单出口现金出口
图10.7ATM的界面格式
1043画事件跟踪图
脚本为建立动态模型(状态图)提供了很好的基础,但用自然语言书写的脚本还不够简明,并且会有二义性,因此在画状态图前,我们往往先画出事件跟踪图[简化的UML顺序图(SequenceDiagram,时序图)],为此需进一步明确事件
(事件就是引起系统做动作或(和)转换状态的控制信息)及事件与对象的关系。
1.确定事件
事件包括系统与用户(或外部设备)交互的所有信号、
输入、输出、中断、动作等,要注意的是
(1)对象的动作
也是事件;
(2)对控制流产生相同效果的那些事件应作为一类事件。
经过分析要确定每类事件的发送对象和接受对象。
2.画出事件跟踪图
从脚本中提取出各类事件,并确定每类事件的发送对象和接受对象,就可以用事件跟踪图把事件序列以及事件与对象的关系表示出来,事件跟踪图是扩充的脚本,更是简化了的UML顺序图。
益讣.乐匸蛾戸甘效°
耍求耶务英叫
'轍心型」OWAiOMi
'输人取就瓢
请:
瓯即灯门华抹厅卅爹瓏朗.
吐:
出残懂
工芒现金:
请求堪馥此鼻必帖或_
印贱爪■
退代-
图10.8ATM系统正常情况脚本的事件跟踪图(时序图)1044画状态图
状态图描述了事件与对象状态(对象生命周期中的阶段)的关系。
UML用状态图来表示对象的动态行为,它确定了由事件序列引出的状态序列。
系统分析员应仅考虑系统内具有重要交互行为的哪些类,即每个主动发送事件的对象类的动态行为用一张状态图来表示,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。
从一张事件跟踪图出发画状态图时,
象的事件,即考虑指向某条竖线(对象)的箭头线,把这些事件作为状态图中的有向边(箭头线),边上标以事件名,
两个事件之间的间隔就是一个状态。
:
」护&Mill;
r[可读叫
显示主恥电丿
1卡[车可设的]
厂不可連的尸、£
{do^iCff.nI^P消
j佶息y
图10.9ATM类的状态图
图10.10总行类的状态图
图10.11分行类的状态图
1045审查动态模型
各个类的状态图通过共享事件合并起来,就构成了系统
的“动态模型”,应该细致审查动态模型的完整性和一致性
10.5建立功能模型
的数据处理功能,它由一组DFD组成,其中处理功能可以用IPO图(或表)、伪码等描述10.5.1画出基本系统模型图[最高层的DFD]
图10.12ATM系统的基本系统模型
10.5.2画出功能级数据流图
现金
tf
图10.13ATM系统的功能级数据流图
10.5.3描述处理框功能
表」63对更新账户功能的描述
更新账户(账号'事务类型*金额)f现金额•厳单數据•信息
如果融熬额超过账户当前余额,拒绝该事务且不忖出现金"
如果取款额不超过账户当前余制’从余额中减去取款额后柞为新的余额,忖出储户要取的现金°如果事务是存款,把存款额加到余额中得到新余额,不付出现金.
如果事务是查询,不忖出现金<,
在上述任何一种情况下,厳单内容都是’ATM号,日期,时间,岷号’事务类型.事务金额(如果有的话如新余额.
10.6定义服务
对象是由描述其属性的数据,以及可以对这些数据施
加的操作,封装在一起构成的独立单元。
在确定类中的操作时,既要考虑该类实体的常规行
为,又要考虑本系统中特殊的服务。
1.常规行为
在分析阶段可以认为,类中定义的每个属性都是可以访问
的,也就是类中已经定义了读、写该类每个属性的操作,
而无需显式表示这些常规操作。
2.从事件导出的操作
状态图中若有发往对象的事件,该对象必须要有相应的
操作
3.与数据流图中处理逻辑对应的操作
DFD中的每个处理逻辑都与一个对象(或几个对象)上的操作相对应。
4.利用继承减少冗余操作
应尽量利用继承机制减少所需定义的操作。
10.7小结
习题10
1.用面向对象方法分析研究本书习题系统,试建立它的对
象模型、动态模型和功能模型。
2.用面向对象方法分析研究本书习题预订系统,试建立它的对
象模型、动态模型和功能模型。
3.用面向对象方法分析研究本书习题监护系统,试建立它的对
象模型、动态模型和功能模型。
2第2题中描述的储蓄
2第3题中描述的机票
2第4题中描述的患者
4.下面是自动售货机系统的需求陈述,试建立它的对象模
型、动态模型和功能模型:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 分析