1、信息系统分析、设计与开发方法 面向对象的系统分析面向对象的系统分析4.1 面向对象的基本过程 4.2 面向对象分析的特点 4.3 需求分析陈述 4.4 面向对象的系统分析活动4.5 建立对象模型4.6 建立动态模型4.7 建立功能模型 4.8 案例目录目录4.1.1 概述概述u面向对象分析面向对象分析(Object-Oriented Analysis,简称,简称OOA),就是运用面向对象的方法进行系统分析,强调运用面向对象方法,对问题域问题域和系统职责系统职责进行分析和理解,找出描述问题域及系统职责所需的对象,定义对象的属性、服务以及它们之间的关系,目标是建立一个符合问题域、符目标是建立一个符
2、合问题域、符合用户需求的合用户需求的OOA模型模型。4.1 面向对象分析的基本过程面向对象分析的基本过程4.1 面向对象分析的基本过程面向对象分析的基本过程u问题域问题域(problem domain)就是被开发系统的应用领域,即软件系统所能处理的现实世界中的业务范围。u系统责任系统责任(system responsibilities)即所开发的软件系统应该具备的职能.4.1.1 概述概述4.1 面向对象分析的基本过程面向对象分析的基本过程uOOA的主要任务的主要任务就是u对问题域和系统责任进行分析和理解;u找出跟问题域与系统责任有关的类及对象;u定义这些对象的属性和操作,以及它们之间所形成的
3、结构,静态联系和动态联系。u简言之,确定系统分析中的对象,描述对象的静态特征和确定系统分析中的对象,描述对象的静态特征和动态特征,找出对象间的各种关系以及对象的行为约束,动态特征,找出对象间的各种关系以及对象的行为约束,是OOA的主要任务。4.1.1 概述概述4.1 面向对象分析的基本过程面向对象分析的基本过程OOA和和OOD的职责划分的职责划分uOOA针对现实世界中的问题域和系统职责,用面向对象的方法建立起OOA模型,作为分析的结果。OOA模型不考虑与系统具体实现相关模型不考虑与系统具体实现相关的因素的因素,从而使OOA模型独立于具体的实现环境。uOOD则是针对系统的具体实现针对系统的具体实
4、现,运用OO方法进行系统设计。其中包括两方面的工作:u1.根据实现条件对OOA模型做某些必要的调整和修改,使其成为OOD模型的一部分;u2.针对具体实现条件,建立人机界面、数据存储和控制驱动等模型。这些部分与这些部分与OOA采用相同的概念与表示法。采用相同的概念与表示法。4.1.1 4.1.1 概述概述4.1 面向对象分析的基本过程面向对象分析的基本过程u用OO方法开发软件,通常建立3种模型:种模型:u对象模型对象模型(基本):描述系统静态数据结构。u动态模型动态模型(辅助):描述系统的交互次序和行为过程。u功能模型功能模型(辅助):描述数据变换结果。u三个模型的侧重点u对象模型对于任何系统都
5、是最基础、最重要和最核心的,是必需的。u动态模型对于设计交互行为和时序过程(如用户界面及过程控制)的系统是重要的。u功能模型对于解决运算量很大的问题(如科学和工程计算)是重要的。4.1.1 4.1.1 概述概述关系层关系层特征层特征层对象层对象层基本模型基本模型( (类图类图) )模型组织模型组织包图包图辅助模型辅助模型交互图交互图活动图活动图状态图状态图数据流图数据流图给出所有与问题给出所有与问题域和系统责任有域和系统责任有关的对象,用对关的对象,用对象类表示象类表示定义每个对定义每个对象类的属性象类的属性与服务与服务通过已定义的通过已定义的关系描述对象关系描述对象类之间的关系类之间的关系详
6、细说明详细说明对模型中对模型中的所有元的所有元素进行详素进行详细说明。细说明。描述数据描述数据变换结果变换结果一幅交互图表现完成某一项特定功能的一一幅交互图表现完成某一项特定功能的一组对象之间的详细交互;一辐状态图描述组对象之间的详细交互;一辐状态图描述了一个对象的状态变迁。活动图描述了一了一个对象的状态变迁。活动图描述了一个服务的流程或业务流程。个服务的流程或业务流程。OOA模型模型对关系密切的元素打包,帮助理对关系密切的元素打包,帮助理解系统模型。解系统模型。 OOAOOA过程过程建立基本模型建立基本模型描述系统的基本特征,类图建立动态模型(可选)建立动态模型(可选)描述系统的动态行为特征
7、,交互图,活动图和状态图建立功能模型(可选)建立功能模型(可选)描述数据变换结果,数据流图建立模型组织建立模型组织包图,系统,子系统写详细说明写详细说明注意:模型的建立不需要按顺序,不分先后。注意:模型的建立不需要按顺序,不分先后。4.1.2 面向对象的基本过程面向对象的基本过程4.1 面向对象分析的基本过程面向对象分析的基本过程 OOAOOA具体过程具体过程4.1.2 面向对象的基本过程面向对象的基本过程4.1 面向对象分析的基本过程面向对象分析的基本过程OOA过程模型建立类图(对象模型)*发现对象,定义对象类*识别对象的内部特征*识别对象的外部关系原型开发*结合其它活动反复进行划分主题,建
8、立包图(辅助模型,可选)建立交互图、状态图、活动图(动态模型,可选)对模型中的成分进行规范的定义和文字说明,可集中进行,也可分散在各个活动中u实施OOA过程的几点建议:1. 把对系统需求的捕获和描述放在分析工作的开始。2. 建立基本模型的三个活动,可根据需要随时从一个活动切换到另从一个活动切换到另一个一个;3. 建立动态模型可以安排到建立对象模型之后,也可以同时进行;4. 建立详细说明的活动应结合在其它活动中分散分散进行,最后做一次集中集中的审查和补充;5. 原型开发可反复反复进行,开发早期原型主要用于证实用户需求证实用户需求;6. 分析较小的系统时,可以省略可以省略分包的活动,在分析大中型系
9、统时,也可按需求先分包可按需求先分包,再根据包分工。4.1.2 面向对象的基本过程面向对象的基本过程4.1 面向对象分析的基本过程面向对象分析的基本过程uOOA过程由5项主要活动项主要活动组成:(1)识别类和对象(2)确定结构(3)确定主题(4)定义属性(5)定义服务根据这些主要活动,OOA模型也由5个层次个层次组成。4.1.2 面向对象的基本过程面向对象的基本过程4.1 面向对象分析的基本过程面向对象分析的基本过程4.1.2 面向对象的基本过程面向对象的基本过程4.1 面向对象分析的基本过程面向对象分析的基本过程lOOA的主要原则的主要原则(1 1)抽象原则)抽象原则(2 2)分类原则)分类
10、原则(3 3)聚合原则)聚合原则(4 4)关联原则)关联原则(5 5)消息通信原则)消息通信原则(6 6)粒度控制原则)粒度控制原则4.2 面向对象分析的特点面向对象分析的特点lOOAOOA的主要优点(的主要优点(1 1) (1)OOA是在人类思维组织的基本方法框架下定义并表达 需求,直观性好。 (2)便于分析人员集中精力于问题空间的理解和分析, 有利于超越系统的复杂性困难。 (3)把属性和有关服务方法作为对象整体来看待,比较 自然。 (4)使用对象间的最小相关性来分析和说明。这有利于 实行封装性原则,并使OOA适应开发需求的变化,也 有利于制作和提取可复用的部件。 4.2 面向对象分析的特点
11、面向对象分析的特点lOOAOOA的主要优点(的主要优点(2 2) (5)通过对共性的显式表示而提高表达能力。抽 象层次与后续OOP结合,编程思路清晰,特 别是有利于提高程序效率。 (6)分析法与设计法的一致性,密切配合建造一 个问题域模型。 (7)对系统族的适用性和可扩展性强4.2 面向对象分析的特点面向对象分析的特点1 1)写什么写什么:需求陈述的内容包括:问题范围,功能需求,性能需求,应用环境及约束条件等。简单地讲,需求陈述应该阐明系统“做做什么什么” ” ,而不管,而不管“怎样做怎样做”。2)怎么写怎么写:文字描述要做到语法正确,内容完整,条理清晰。准确准确使用名词、动词、形容词和同义词
12、。使用名词、动词、形容词和同义词。3)需求陈述作用需求陈述作用:需求陈述仅仅是理解用户需求的出发点,千万不可将此陈述当成完整、准确、有效和一成不变的文档。4.3 需求分析陈述需求分析陈述书写要点书写要点需求陈述举例:需求陈述举例:下图所示为自动取款机(ATM)系统自动取款机自动取款机(ATM)(ATM)系统系统需求陈述需求陈述:某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统
13、的软件开发成本由各个分行分摊。银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。拥有银行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等
14、事务。所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码惟一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核
15、对这些信息并处理这次事务。中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账单交给用户。基本思想基本思想:首先找出与问题域相关的所有候选类与对象,然后从候选类与对象中筛选掉不正确的或不必要的。4.4.1 获取对象和类获取对象和类4.4 面向对象的系统分析活动面向对象的系统分析活动1 1、先找出候选的类与对象、先找出候选的类与对象 寻找类与对象的一般方法:寻找类与对象的一般方法:对象是对问题
16、域中相关实体或事物的抽象,既可以是客观实体,也可以是抽象概念。一般划分5类:1) 1) 可感知的物理实体:可感知的物理实体:如飞机、汽车、书、房屋等等。2) 2) 人或组织:人或组织:例医生、教师、雇主、计算机系、财务处等。3) 3) 应该记忆的事件:应该记忆的事件:如飞行、演出、访问、交通事故等。4) 4) 两个或多个对象的相互作用:两个或多个对象的相互作用:如购买、纳税、结婚等。5) 5) 需要说明的概念:需要说明的概念:如政策、保险政策、版权法等。按照上述5类抽取和寻找系统的全部必要类和对象。4.4.1 获取对象和类获取对象和类4.4 面向对象的系统分析活动面向对象的系统分析活动一种寻找
17、对象类的非正式分析方法一种寻找对象类的非正式分析方法 名词识别法名词识别法 这种分析方法以需求陈述为依据,把陈述中的名词作为类与对象的候选者;用形容词或名词作为确定属性的候选者;把动词作为服务(操作)的候选者。 下面以下面以ATMATM系统为例,说明非正式分析过程。系统为例,说明非正式分析过程。认真阅读ATM需求陈述,从中找出相关名词,可以把它们作为类与对象的初步的候选者:银行,自动取款机银行,自动取款机(ATM)(ATM),系统,中央计算机,分行计算机,柜员终端,系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,网络,总行,分行,软件,成本
18、,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问。卡号,用户,副本,信息,密码,类型,取款额,账单,访问。注意:注意:分析员应该根据领域知识或常识进一步把隐含的类与对象提取出来。例如,ATM系统必须包含“通信链路通信链路”和“事务日志事务日志”实体,应该补充进来。2. 2. 筛选出正确的类与对象筛选出正确的类与对象候选类与对象可能包括一些不正确的或不必要的类与对象,应该筛选掉,仅保留确那些确实需要记录信息或提供服务的对象。删除不
19、正确或不必要的类与对象的筛选准则:删除不正确或不必要的类与对象的筛选准则:1 1)冗余:)冗余:如果两个类表达了同样的信息,则应该保留行业规范名称。ATM例中:储户与用户,现金兑换卡与磁卡及副本分别描述了相同的两类信息,因此,仅保留“储户”和“现金兑换卡”这两个类,应该去掉“用户”、“磁卡”、“副本”等冗余的类。银行,自动取款机银行,自动取款机(ATM)(ATM),系统,中央计算机,系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务
20、,现金兑换卡,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问,信息,密码,类型,取款额,账单,访问,通信链路,事务日志通信链路,事务日志2 2)无关:)无关:保留与本问题密切相关的类与对象,删除与本问题无关或关系不大的类与对象。ATM系统为例:系统不处理分摊软件开发成本的问题,另外ATM和柜员终端放置的地点与本软件的关系也不大。因此,应该去掉候选类“成本”、“市”、“街道”、“营业厅”和“储蓄所”。银行,自动取款机银行,自动取款机(ATM)(ATM),系统,中央计算机,系统,中央计算
21、机,分行计算机,柜员终端,网络,总行,分行,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问,信息,密码,类型,取款额,账单,访问,通信链路,事务日志通信链路,事务日志3 3)笼统:)笼统:删除笼统的、泛指的、模糊的名词对应的候选类与对象,保留有更明确、更具体的名词对应的类与对象。以ATM系统为例:银行实际指总行或分行
22、,访问在这里实际指事务,此外还有一些笼统含糊的名词。在本例中应该去掉“银行”、“网络”、“系统”、“软件”、“信息”、“访问”等候选类。银行,自动取款机银行,自动取款机(ATM)(ATM),系统,中央计算机,系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问,信息
23、,密码,类型,取款额,账单,访问,通信链路,事务日志通信链路,事务日志4 4)属性:)属性:把描述属性的名词应从候选类与对象中去掉。在ATM系统的例子中,“现金”、“支票”、“取款额”、“账单”、“余额”、“分行代码”、“卡号”、“密码”、“类型”等,实际上都应该作为属性对待。银行,自动取款机银行,自动取款机(ATM)(ATM),系统,中央计算机,系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,储户,现金,支票,账户
24、,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问,信息,密码,类型,取款额,账单,访问,通信链路,事务日志通信链路,事务日志5 5)操作:)操作:在需求陈述中既可作为名词,又可作为动词的词,应该慎重考虑它们在本问题中的含义,以便正确决定他们作为类还是操作。6 6)实现:)实现:在分析阶段不应该过早地考虑怎样实现目标系统。因此,应该去掉只和实现有关的候选的类与对象。在ATM系统中,“事务日志”是对一系列事务的记录,它的确切表示方式是面向对象设计的议题;“通信链路”在逻辑上是一种联系,在系统实现时它是关联类的物
25、理实现。应该暂时去掉 “事务日志”和“通信链路”这两个类,在设计或实现时再考虑它们。银行,自动取款机银行,自动取款机(ATM)(ATM),系统,中央计算机,系统,中央计算机,分行计算机,柜员终端,网络,总行,分行,分行计算机,柜员终端,网络,总行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,软件,成本,市,街道,营业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现金兑换卡,储户,现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,余额,磁卡,分行代码,卡号,用户,副本,信息,密码,类型,取款额,账单,访问,信息,密码,类型,取款额,账单,访问,通信链路,事务日志
26、通信链路,事务日志经过初步筛选,ATM系统保留的类与对象为:ATM、中央计算机、分行计算机、柜员终端、总行、分行、柜员、储户、账户、事务、现金兑换卡。关联关联是指两个或多个对象之间的相互依赖、相互作用的关系。分析确定关联,有助于发现尚未被发现的类和对象。u一般一般特殊结构特殊结构 一般特殊关系又称类属关系,是现实世界中一般对象和特殊对象之间的关系,反映了现实世界中事物之间的分类关系。前者称为父类,后者称为子类,子类继承父类的特性(属性、操作、关联等),同时又拥有自己的特性。4.4.2 确定关联确定关联4.4 面向对象的系统分析活动面向对象的系统分析活动例如图书借阅管理系统中,对象类“人员”是类
27、“管理员”和“借阅者”类的父类,而子类“管理员”又是类“系统维护人员”和类“一般操作人员”的父类。一般特殊关系4.4.2 确定关联确定关联4.4 面向对象的系统分析活动面向对象的系统分析活动u整体整体部分部分 对象实例之间的整体部分关系,反映了现实世界中的事物之间的构成关系。整体部分关联又可以从两个方面来反映:u聚合关系聚合关系:表示对象实例之间的整体与部分的关系,作为整体的对象拥有作为部分的对象。在聚合关系中,部分的生命周期独立于整体的生命周期。 u组合关系组合关系:是聚合关系的一种特殊形式。在组合关系中,整体和部分之间有着一致的生命周期。4.4.2 确定关联确定关联4.4 面向对象的系统分
28、析活动面向对象的系统分析活动聚合组合4.4 面向对象的系统分析活动面向对象的系统分析活动 聚合关系 A公公司司财财务务部部人人力力资资源源部部信信息息资资源源部部1112组合关系4.4.2 确定关联确定关联u关联关联 表示对象实例之间的静态联系,这两个对象实例之间存在某种语义上联系。例如,员工为公司工作,一个公司有许多部门,因此,可以认为员工和公司、公司和部门之间存在某种语义上的联系,如下图所示。4.4.2 确定关联确定关联4.4 面向对象的系统分析活动面向对象的系统分析活动u依赖关系依赖关系 一个模型元素的变化影响另一个模型元素,则两个元素之间存在依赖关系。以X和Y两个元素为例,当修改X的定
29、义时,引起Y的定义的修改,则称Y依赖于X。4.4.2 确定关联确定关联4.4 面向对象的系统分析活动面向对象的系统分析活动确定关联的步骤:1. 1. 初步确定关联(候选关联)初步确定关联(候选关联) 基本方法:基本方法:以需求陈述中描述性动词或动词词组为纽带,确定类与对象之间的关联关系。(语法:主语(语法:主语+ +谓语谓语+ +宾语)宾语) 寻找范围:寻找范围:直接提取需求陈述中的动词词组动词词组;分析发现陈述中隐含的关联;与用户及领域专家讨论获取关联。4.4 面向对象的系统分析活动面向对象的系统分析活动4.4.2 确定关联确定关联以以ATMATM系统为例,经过分析初步确定出下列关联:系统为
30、例,经过分析初步确定出下列关联:1 1)直接提取动词短语得出的关联)直接提取动词短语得出的关联ATM、中央计算机、分行计算机及柜员终端组成组成网络。总行拥有拥有多台ATM。ATM设在设在主要街道上。分行提供提供分行计算机和柜员终端。柜员终端设在设在分行营业厅及储蓄所内。分行分摊分摊软件开发成本。储户拥有拥有账户。分行计算机处理处理针对账户的事务。分行计算机维护维护账户。柜员终端与分行计算机通信通信。柜员输入输入针对账户的事务。ATM与中央计算机交换交换关于事务的信息。中央计算机确定确定事务与分行的对应关系。ATM读读现金兑换卡。ATM与用户交互交互。ATM吐出吐出现金。ATM打印打印账单。系统
31、处理处理并发的访问。2 2)需求陈述中隐含的关联)需求陈述中隐含的关联总行由各个分行组成组成。分行保管保管账户。总行拥有拥有中央计算机。系统维护维护事务日志。系统提供提供必要的安全性。储户拥有拥有现金兑换卡。3 3)根据问题域知识得出的关联)根据问题域知识得出的关联现金兑换卡访问访问账户。分行雇用雇用柜员。ATM、中央计算机、分行计算机及柜员终端组成组成网络。总行拥有拥有多台ATM。ATM设在设在主要街道上。分行提供提供分行计算机和柜员终端。柜员终端设在设在分行营业厅及储蓄所内。分行分摊分摊软件开发成本。储户拥有拥有账户。分行计算机处理处理针对账户的事务。分行计算机维护维护账户。柜员终端与分行
32、计算机通信通信。柜员输入输入针对账户的事务。ATM与中央计算机交换交换关于事务的信息。中央计算机确定确定事务与分行的对应关系。ATM读读现金兑换卡。ATM与用户交互交互。ATM吐出吐出现金。ATM打印打印账单。系统处理处理并发的访问。总行由各个分行组成组成。分行保管保管账户。总行拥有拥有中央计算机。系统维护维护事务日志。系统提供提供必要的安全性。储户拥有拥有现金兑换卡。现金兑换卡访问访问账户。分行雇用雇用柜员。候选关联2. 2. 筛选筛选候选关联中包含了一些不正确或不必要的关联,应该删除掉。筛选时主要根据下述标准删除候选的关联:1) 1) 已删去的类之间的关联已删去的类之间的关联与某个已删候选
33、类相关的关联,也应该删去。以ATM系统为例,由于已经删去了“系统”、“网络”、“市”、“街道”、“成本”、“软件”、“事务日志”、“现金”、“营业厅”、“储蓄所”、“账单”等候选类,因此,与这些类有关的关联也应该删去: ATM、中央计算机、分行计算机及柜员终端组成网络。 ATM设在主要街道上。 分行分摊软件开发成本。 系统提供必要的安全性。 系统维护事务日志。 系统处理并发的访问 ATM吐出现金。 ATM打印账单。 柜员终端设在分行营业厅及储蓄所内。ATM、中央计算机、分行计算机及柜员终端组成组成网络。总行拥有拥有多台ATM。ATM设在设在主要街道上。分行提供提供分行计算机和柜员终端。柜员终端
34、设在设在分行营业厅及储蓄所内。分行分摊分摊软件开发成本。储户拥有拥有账户。分行计算机处理处理针对账户的事务。分行计算机维护维护账户。柜员终端与分行计算机通信通信。柜员输入输入针对账户的事务。ATM与中央计算机交换交换关于事务的信息。中央计算机确定确定事务与分行的对应关系。ATM读读现金兑换卡。ATM与用户交互交互。ATM吐出吐出现金。ATM打印打印账单。系统处理处理并发的访问。总行由各个分行组成组成。分行保管保管账户。总行拥有拥有中央计算机。系统维护维护事务日志。系统提供提供必要的安全性。储户拥有拥有现金兑换卡。现金兑换卡访问访问账户。分行雇用雇用柜员。候选关联2) 2) 与问题无关的或应在实
35、现阶段考虑的关联与问题无关的或应在实现阶段考虑的关联应该把处在本问题域之外的关联或与实现密切相关的关联删去。3) 3) 瞬时事件:瞬时事件:关联应该描述问题域的静态结构,而不应该是一个瞬时事件。例如,“ATM读现金兑换卡”描述了ATM与用户交互周期中的一个动作,它并不是ATM与现金兑换卡之间的固有关系,因此应该删去。类似地,还应该删去“ATM与用户交互”这个候选的关联。ATM、中央计算机、分行计算机及柜员终端组成组成网络。总行拥有拥有多台ATM。ATM设在设在主要街道上。分行提供提供分行计算机和柜员终端。柜员终端设在设在分行营业厅及储蓄所内。分行分摊分摊软件开发成本。储户拥有拥有账户。分行计算
36、机处理处理针对账户的事务。分行计算机维护维护账户。柜员终端与分行计算机通信通信。柜员输入输入针对账户的事务。ATM与中央计算机交换交换关于事务的信息。中央计算机确定确定事务与分行的对应关系。ATM读读现金兑换卡。ATM与用户交互交互。ATM吐出吐出现金。ATM打印打印账单。系统处理处理并发的访问。总行由各个分行组成组成。分行保管保管账户。总行拥有拥有中央计算机。系统维护维护事务日志。系统提供提供必要的安全性。储户拥有拥有现金兑换卡。现金兑换卡访问访问账户。分行雇用雇用柜员。候选关联4) 4) 三元关联:三元关联:三个或三个以上对象之间的关联,大多可以分解为二元关联或用词组描述成限定的关联。在A
37、TM系统的例子中,“柜员输入针对账户的事务”可以分解成“柜员输入事务”和“事务修改账户”这样两个二元关联。而“分行计算机处理针对账户的事务”也可以做类似的分解。“ATM与中央计算机交换关于事务的信息”这个关联隐含了“ATM与中央计算机通信”和“在ATM上输入事务”这两个二元关联。总行拥有拥有多台ATM。分行提供提供分行计算机和柜员终端。储户拥有拥有账户。分行计算机处理处理针对账户的事务。分行计算机维护维护账户。柜员终端与分行计算机通信通信。柜员输入输入针对账户的事务。ATM与中央计算机交换交换关于事务的信息。中央计算机确定确定事务与分行的对应关系。总行由各个分行组成组成。分行保管保管账户。总行
38、拥有拥有中央计算机。储户拥有拥有现金兑换卡。现金兑换卡访问访问账户。分行雇用雇用柜员。候选关联柜员输入输入事务事务修改修改账户分行计算机处理处理事务ATM与中央计算机通信通信在ATM上输入输入事务5) 5) 派生关联:派生关联:应该去掉那些可以用其他关联定义或派生的冗余关联。在ATM系统的例子中,“总行拥有多台ATM”实质上是“总行拥有中央计算机”和“ATM与中央计算机通信”这两个关联组合的结果。而“分行计算机维护账户”的实际含义是“分行保管账户”和“事务修改账户”。总行拥有拥有多台ATM。分行提供提供分行计算机和柜员终端。储户拥有拥有账户。分行计算机维护维护账户。柜员终端与分行计算机通信通信
39、。中央计算机确定确定事务与分行的对应关系。总行由各个分行组成组成。分行保管保管账户。总行拥有拥有中央计算机。储户拥有拥有现金兑换卡。现金兑换卡访问访问账户。分行雇用雇用柜员。柜员输入输入事务事务修改修改账户分行计算机处理处理事务ATM与中央计算机通信通信在ATM上输入输入事务去掉派生的关联3. 3. 进一步完善进一步完善进一步完善经筛选后余下的关联,通常从下述几个方面进行改进:1)1)正名:正名:应该仔细选择含义更明确的名字作为关联名。例如,“分行提供分行计算机和柜员终端”不如改为“分行拥有分行计算机”和“分行拥有柜员终端”。2) 2) 分解:分解:必要时分解以前确定的类与对象,以适用于不同的
40、关联。在ATM系统中,应该把“事务”分解成“远程事务”和“柜员事务”。3) 3) 补充:发现了遗漏的关联就应该及时补上。补充:发现了遗漏的关联就应该及时补上。在ATM系统中,把“事务”分解成上述两类之后,需要补充“柜员输入柜员事务”、“柜员事务输进柜员终端”、“在ATM上输入远程事务”和“远程事务由现金兑换卡授权”等关联。4) 4) 标明重数:根据关联类型,初步确定关联重数。标明重数:根据关联类型,初步确定关联重数。重数是指类产生的对象之间的数量关系,例如,分行提供提供分行计算机和柜员终端。储户拥有拥有账户。柜员终端与分行计算机通信通信。中央计算机确定确定事务与分行的对应关系。总行由各个分行组
41、成组成。分行保管保管账户。总行拥有拥有中央计算机。储户拥有拥有现金兑换卡。现金兑换卡访问访问账户。分行雇用雇用柜员。柜员输入输入事务事务修改修改账户分行计算机处理处理事务ATM与中央计算机通信通信在ATM上输入输入事务进一步完善分行拥有拥有分行计算机分行拥有拥有柜员终端柜员输入输入柜员事务柜员事务输进输进柜员终端在ATM上输入输入远程事务远程事务由现金兑换卡授权授权柜员事务修改修改账户中央计算机与分行计算机通信通信 主题是帮助或指导理解整个模型的一种机制。在开发大型复杂系统的过程中,为了降低复杂程度,人们习惯于把系统包含的内容再进一步划分成几个不同的组成范围或范畴,即主题主题。 以ATM系统为
42、例,可以把它划分成总行(包含总行和中央计算机这两个类)、分行(包含分行、分行计算机、柜员终端、柜员事务、柜员和账户等类)和ATM(包含ATM、远程事务、现金兑换卡和储户等类)等3个主题。4.4 面向对象的系统分析活动面向对象的系统分析活动4.4.3 确定主题确定主题总行总行分行分行ATMATM对象的属性是描述对象静态特征的,确定对象属性时要从问题域和目标系统两方面进行。一般说来,确定属性的过程包括分析和选择两个步骤。1. 1. 分析分析在需求陈述分析中,常用名词词组或形容词限定的名词表示属性,例如,汽车的颜色,光标的位置,体重,身高,存款余额,等等。除需求陈述外,还须借助领域知识和常识获得属性
43、。4.4 面向对象的系统分析活动面向对象的系统分析活动4.4.4 确定属性确定属性2. 2. 选择选择通常筛选下几种属性:1)误把对象当作属性:拥有属性的实体应作为一个对象而不是属性。2)误把关联类的属性当作一般对象的属性:属性随着关联存在并描述关联。3)把限定误当成属性:如,“分行代码”、“账号”、“雇员号”、“站号”等都是限定词。4)误把内部状态当成了属性:如ATM就绪、故障等。5) 过于细化:忽略那些对大多数操作都没有影响的属性。6) 存在不一致的属性:类中含有一些看起来与其他属性毫不相关的属性,则应该考虑把该类分解成两个不同的类。ATMATM系统对象模型中的属性系统对象模型中的属性经过
44、筛选之后,得到经过筛选之后,得到ATMATM系统中各个类的属性系统中各个类的属性方法方法,也称服务、操作或行为等,用来描述对象的动态特征。有的面向对象的程序设计语言中,又将方法称之为类的成员函数成员函数或简称函数函数。一般从以下三个方面发现和定义对象方法: u系统责任 u问题域 u对象状态 在确定类中应有的服务时,既要考虑该类实体的常规行为,又要考虑在系统中特殊需要的服务。4.4 面向对象的系统分析活动面向对象的系统分析活动4.4.5 确定方法确定方法1. 1. 常规行为常规行为在分析阶段可以认为,类中定义的每个属性都是可以访问的,即假设在每个类中都定义了读、写该类每个属性的操作。但是,通常无
45、需在类图中显式表示这些常规操作。2. 2. 从事件导出的操作从事件导出的操作状态图中对象接收的事件,也就是该对象接收到的消息,该对象必须有由消息选择符指定的操作,这个操作修改对象状态(即属性值)并启动相应的服务。“分行分行”类的状态图类的状态图例如:在ATM系统中,分行接收的事件“请分行验卡”启动该对象的服务“验证卡号验证卡号”;“处理分行事务”事件启动分行服务“更新账户更新账户”等3. 3. 与数据流图中处理框对应的操作与数据流图中处理框对应的操作数据流图中的每个处理框都与一个对象或多个对象上的操作相对应。应对照状态图和数据流图,以便更正确地确定对象应该提供的服务。例如,在ATM系统中,从状
46、态图上看出分行对象应该提供“验证卡号验证卡号”服务,而在数据流图上与之对应的处理框是“验卡验卡”,根据实际应该完成的功能看,该对象提供的这个服务应该是“验卡验卡”。注意:在建立了动态模型和功能模型之后,才能最终确定类中应有的方法。数据流图数据流图练习:下面是自动售货机系统的需求陈述,请建立它的对象模型。练习:下面是自动售货机系统的需求陈述,请建立它的对象模型。 自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。有效的硬币是一元币、五角币、一角币、五分币、二分币和一分币。其他货币都被认为是假币。机器拒绝接收假币,并将其从退币孔退出。
47、当机器接收了有效的硬币之后,就把硬币送入硬币储藏器中。顾客支付的货币根据硬币的面值进行累加。 自动售货机装有货物分配器。每个货物分配器中包含零个或多个价格相同的货物。顾客通过选择货物分配器来选择货物。如果货物分配器中有货物,而且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将适当的零钱返回到退币孔。如果分配器是空的,则和顾客支付的货币值相等的硬币将被送回到退币孔。如果顾客支付的货币值少于所选择的分配器中货物的价格,机器将等待顾客投进更多的货币。如果顾客决定不买所选择的货物,他投放进的货币将从退币孔中退出。4.5 建立对象模型建立对象模型建立对象模型建立对象模型 面向对
48、象分析首要的工作,是建立问题域的对象模型。这个模型描述了现实世界中的“类与对象”以及它们之间的关系,表示了目标系统的静态数据结构。 静态数据结构对应用细节依赖较少,比较容易确定。当用户需求变化时,静态数据结构相对来说比较稳定。因此,用面向对象方法开发大多数软件时,都是首先建立对象模型,然后再建立另外两个子模型。 OOA基本模型分为三个层次:u对象层给出系统中所有反映问题域和系统责任的对象。u特征层给出类(对象)的内部特征,即类的属性和操作。u关系层给出各类(对象)之间的关系,即类之间的四种关系。4.5 建立对象模型建立对象模型建立对象模型建立对象模型 对象模型的作用是描述系统的静态结构,静态模
49、型包括类图、对象图、包图、部署图和组件图。对象图是类图的实例,跟类图非常相似,可以认为对象图是类图在程序执行过程中某一瞬间的快照;包图由包和类组成,它表示包和包之间的关系,包图可以用于描述系统的分层结构;组件图和部署图设计程序的物理实现。4.5 建立对象模型建立对象模型建立对象模型建立对象模型 类图类图 类图描述系统中类的静态结构,定义系统中的类表示类之间的关系(如关联、依赖、聚集等)表达类的内部结构(即类的属性和操作)。 类图描述的这种静态关系涉及软件系统开发的整个生命周期。它不显示暂时性的信息。4.5 建立对象模型建立对象模型建立对象模型建立对象模型建筑设计院公文审批类图 u类图作用类图作
50、用对系统的静态对象建模。如图书借阅系统的Book类、reader类,学生管理系统的Student类等。对简单的协作建模。协作是一些共同行为的类、接口和其他元素的群体。协作是指一些类、接口和其他的元素一起工作提供一些合作的行为,这些行为不是简单地将元素加能得到的。对逻辑数据库模式建模。在很多领域中,都需要在关系数据库或面向对象数据库中存储永久信息,系统分析者可以用类图对这些需要永久化的实体建模。4.5 建立对象模型建立对象模型建立对象模型建立对象模型类一般包括三个组成部分:4.5 建立对象模型建立对象模型建立对象模型建立对象模型类名属性操作名称表现类的特征,可用于描述类的状态。“+”表示公有数据