


单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,,,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,软件工程导论第,14,课,9.4.2,表示关系的符号,,9.4.2,表示关系的符号,类与类之间通常有,关联、泛化(继承)、依赖,和,细化,等,4,种关系,,1,关联,,关联表示两个类的对象之间存在某种语义上的联系,,,,,,9.4.2,表示关系的符号,普通关联:,,最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示例如,作家使用计算机,我们就认为在作家和计算机之间存在某种语义连接,因此在类图中应该在作家类和计算机类之间建立关 联关系,,,,,,,,,黑三角表示关联方向,,,(2),关联的角色,在任何关联中都会涉及到参与此关联的对象所扮演的角色, 在某些情况下,显式标明角色,名有助于别人理解类图,,例:一个人与另一个人结婚,必然一个人扮演丈夫的角色, 另一个人扮演妻子的角色如果没有显式标出角色名,则意 味着用类名作为角色名3),限定关联,,(3),限定关联,,(3),限定关联,限定关联通常在一对多或多对多的关联关系中,可以把模型中的 重数从一对多变成一对一,或从多对多简化成多对一,,例如,某操作系统中一个目录下有许多文件,一个文件仅属于一 个目录,在一个目录内文件名确定了惟一一个文件。
可见,利用限定词把一对多关系简化成了一对一关系,,图,9.7,查找,,目录,->文件名->文件,,,,,,(4),关联类,①为了说明关联的性质可能需要一些附加信息,可以引入一个关联类来记录这些信息②关联中的每个连接与关联类的一个对象相联系关联类通过一条虚线与关联连接图,9.8,有,4个连接,每个,,连接都对应一个队列,,2,聚集,聚集也称为聚合,是关联的特例聚集表示类与类之间的关系是,整体和部分,的关系在陈述需求时使用的,“包含”、“组成”、“分为,……,部分”,等字句,往往意味着存在聚集关系除了一般聚集之外,还有两种 特殊的聚集关系,分别是共享聚集和组合聚集1),共享聚集,如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集一般,聚集和,共享,聚集的图示符号,都是在表示关联关系的直线未端,紧挨整体类的地方画一个空心的菱形,,,,(2)组合聚集,如果,部分类完全隶属于整,,体类,,部分与整体共存,,,整体不存在了 部分也会随,,之消失(或失去存在的价,,值了),则该聚集称为组合聚集(简称为组成)例如,在屏幕上打开一个窗口,它由文本框、列表框、按钮和菜 单组成,一旦关闭了窗口,各个组成部分也同时消失,窗口和它的组成部分之间存在着组合聚集关系,,组成关系用实心菱形表示,,,,3,泛化,在,UML,中的,泛化关系,就是通常所说的,继承关系,,它是通用元素和具体元素之间的一种分类关系。
具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息③ 泛化针对类型而不针对实例,一个类可以继承另一个类,但一个对象不能继承另一个对象④ 实际上,泛化关系指出在类与类之间存在“一般-特殊”关系⑤ 泛化可进一步划分成,普通泛化,和,受限泛化,1),普通泛化,需要特别说明的是没有具体对象的类称为抽象类,,抽象类通常作为父类,用于描述其他类(子类)的公共属性和 行为图示抽象类时,在类名下方附加一个标记值,{abstract},,操作的图示方法,在标记后面跟一个性质串,{abstract},,,,,例子:一副工程蓝图由许多图形组成,图形可以是直线,圆, 多边形或组合图,而多边形由直线组成,组合图由各种线型混合而成,,,,(2),受限泛化,可以给泛化关系,附加约束条件,,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化,,预定义的约束有4种:,多重,不相交,完全和不完全,,这些约束都是,语义约束,多重继承,指的是,,一个子类可以同时多次继承同一个上层基类与多重继承相反是,不相交继承,,,完全继承,指的是,父类的所有子类都已在图中穷举,,不完全继承,指的是,父类的所有子类没有都穷举出来,,,,,,4,依赖和细化,(1),依赖关系:依赖关系描述两个模型元素之间的语义连接关系,其 中一个模型元素是独立的,另一个模型元素不是独立的,如果独立的模型元素改变,将影响依赖于它的模型元素。
箭头指向独立的类,,(2),细化关系:当对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系箭头由更详细层指向上层,,,,,9.5,动态模型,动态模型表示,瞬时的,行为化,的系统的“控制”性质,,,它规定了对象模型中的对象的合法,变化,序列状态,是任何可以被观察到的系统,行为模式,,,,每个类的动态行为用一张状态图来描绘,, 各个类的状态图通过共享事件合并起来,从而构成系统 的动态模型,, 动态模型是基于事件共享而互相关联的一组状态图的集 合,,,,,动态模型的三要素:,,①,事件,(event),:引发对象状态改变的控制信息(瞬时),,②,状态,(status),:即对象的属性所处的情形(可持续),,③,行为,(action),:对象要达到某种状态所做的操作(耗时),,,,注意,:,,状态图:适合描述跨越多个用例的单个对象的行为,不适合描述多个对象之间的协作行为,, 不应对系统中的每个类都画状态图,而只应对某些 关键类建立状态图;而且应将状态图与其它技术组 合使用,,,9.6,功能模型,表示变化的系统的“,功能,”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求,,功能模型由一组数据流图组成,在面向对象方法学中,数据流图 远不如在结构分析设计方法中那样重要,,② 一般说来,与对象模型和动态模型比较,数据流图并没有增加新 的信息,,UML,提供的用例图也是进行需求分析和建立功能模块的强有力工具,在,UML,中把用用例图建立起来的系统模型成为,用例模型,。
9.6.1,用例图,用例图包含的模型元素,:,系统,,,,行为者,,,用例,及,用例之间,,的,关 系,.,,图中的,方框,代表,系统,,,,椭圆,代表,用例,,,,线条人,代表,行为者,,它们之间的,连线,表示,关系,,,,,,1系统,,系统被看作是一个提供用例的黑盒子,内部如何工作,用例如何实现,这些对于建立用例模型来说都是不重要的系统的方框边线表示系统的,边界,,划定系统的,功能范围,,描述系统功能的用例置于方框内行为者置于方框外2用例,,用例是可以被行为者感受到的,系统的一个完整的功能,,在,UML,中把用例,定义,成,系统完成的一系列动作,,动作的结果能被特定的行为者察觉到用例具有下述特征:,,(1),用例代表某些用户可见的功能,实现一个具体用户目标,,(2),用例总是被行为者启动的,并向行为者提供可识别的,,(3),用例必须是完整的,,,,,,,,2用例,,用例是一个类,它代表一类功能而,不是使用该功能的某个具体实例,用例的实例是系统的一种实际使用方法,通常把用例的实例称为脚本 脚本是系统的一次具体执行过程,,例如,在自动售货机系统中,张三投入硬币购买矿泉水,系统收到钱后把矿泉水送出来,上述过程就是,一个脚本,;李四投币买可乐,但是可乐卖完了,于是系统给出提示信息并把钱退还给李四,这个过程是,另一个脚本,。
3行为者,,行为者,是指与系统交互的人或其他系统,它代表,外部实体,使用用例并且与系统交互的任何人或物都是行为者行为者代表一种,角色,,而不是某个具体的人或物,,例如,在自动售货机系统中,使用售货功能的人既可以是张三 (买矿泉水)也可以是李四的(买可乐),但是不能把张三或李四这样的个体对象称为行为者直线,连接行为者和用例,表示两者之间交换信息,称为,通信联系,行为者触发用例,并与用例交换信息,,,,,,,,,,4用例之间的关系,,uml1.1,中有两种用例关系,,>,关系和,>,关系,,它们都是泛化(,generalization,)关系的构造型(,stereotype,),,uml1.3,之后,提供了三种用例关系,,>,关系、,>,关系都是依赖(,dependency,)关系的构造型(,stereotype,),,泛化关系(,generalization,),,,,,,(1),扩展关系,向一个用例中,添加,一些动作后构成了另一个用例,,,这两个用例之间的关系就是扩展关系,,,后者称为扩展用例例如,,,在自动售货机系统中,,,”售货”是一个基本的用例,,,如果顾客购买罐装饮料,,,顺利实现。
而买散装饮料则不行,买散装饮料是非常规动作把非常规动作放置于”售散装饮料”用例中,,,这两个用例之间关系就是扩展关系,,,(2),使用关系,当一个用例使用另一个用例时,,,这两个用例之间就构成了,使用关系,,一般说来,,,如果在若干个用例中有某些相同的动作,,,则可以把这些相同的动作提取出来单独构成一个用例,(,成为抽象用例,),例如,,,在自动售货机系统中,,,”供货”和”取货款”都要先打开机器,结束后关闭机器把打开机器抽象成”打开机器” 用例,,,把最后的动作抽象成”关闭机器”用例注意:,通常在描述一般行为的变化时采用扩展关系,;,在两个或多个用例中出现重复描述又想避免这种重复时,,,可以采用使用关系,,,,,,9.6.2,用例建模,一个用例模型由若干幅用例图组成,,创建用例模型的工作包括,:,,定义系统,,,寻找行为者和用例,,② 描述用例,,,定义用例之间的关系,,③ 确认模型其中,,,寻找行为者和用例是关键,1.,寻找行为者,通过请系统的用户回答一些问题的办法来发现行为者,下述问题有助于发现行为者,:,,谁将使用系统的主要功能,(,主行为者,)?,,谁需要借助系统的支持来完成日常工作,?,,谁来维护和管理系统,(,副行为者,)?,,系统控制哪些硬件设备,?,,系统需要与哪些其他系统交互,?,,哪些人或系统对本系统产生的结果,(,值,),感兴趣,?,,,,,,,,,2.,寻找用例,一旦找到了行为者,,,就可以通过请每个行为者回答下述问题来获取用例,:,,行为者需要系统提供哪些功能,?,行为者自身需要做什么,?,,行为者是否需要读取,,,创建,,,删除,,,修改或存储系统中的某类信息,?,,系统中发生的事件需要通知行为者吗,?,行为者需要通知系统某些事情吗,?,,从功能观点看,,,这些事件能做什么,?,,行为者的日常工作是否因为系统的新功能而被简化或提高了效率,?,,系统需要哪些输入输出,?,输入来自何处,?,输出到哪里去,?,,当前使用的系统,(,可能是人工系统,),存在的主要问题是什么,?,,,,,,,,9.6.2,用例建模,,9.6.2,用例建模,,,9.7,三种模型之间的关系,三种模型之间关系,,FM,:功能模型做什么,What,,DM,:动态模型何时做,When,,OM,:对象模型操作的实体,How,,,,,9.7,三种模型之间的关系,(1),针对每个类建立的动态模型,,,描述了类实例的生命周期或运行周期。
2),状态转换驱使行为发生,,,这些行为在数据流图中被映射成处理,,,在用例图中被映射成用例,,,它们同时与类图中的服务相对应3),功能模型中的处理,(,或用例,),对应于对象模型中的类所提供的服务4),数据流图中的数据存储,,,以及数据的源点,/,终点,,,通常是对象模型中的对象9.7,三种模型之间的关系,(5),数据流图中的数据流,,,往往是对象模型中对象的属性值,,,也可能是整个对象6),用例图中的行为者,,,可能是对象模型中的对象7),功能模型中的处理,(,或用例,),可能产生动态模型中的事件8),对象模型描述了数据流图中的数据流,,,数据存储以及数据源点,/,终点的结构第,10章,面向对象分析,分析的过程是提取,系统需求,的过程,,分析凶包括,3项内容:,理解、表达、验证,,面向对象分析的关键是,识别出问题域内的类与对象,,并分析它们相互间的,关系,,最终建立起问题域的简洁、精确、可理解的正确模型由,对象模型,、,动态模型,、和,功能模型,组成10.1,面向对象分析的基本过程,10.1.1 概述,10.1.2,3个子模型与5个层次,Requirement statement =>,,Rapid prototype => Models,,3,个模型,,Object model,:最重要,开发任何系统都需要;,,Dynamic model,:对于开发交互式系统,(interactive system),很重要;,,Function model,:对于开发大运算量问题(如科学计算、编译系统等)很重要,,5,个层次,,,复杂问题的对象模型通常由,5个层次组成:,,主题层,,类与对象层,,结构层,类与对象间的关系,,属性层,,服务层,,主题是指导读者理解大型、复杂模型的一种机制。
通过划分主题把一个大型、复杂的对象分解成几个不同的概念范畴,从高层次描述总体模型,指导读者的注意力,,5个层次对应5项,主要活动,:,,找出类与对象,,识别结构、识别主题、定义属性、定义服务工作顺序,:,,寻找类与对象,,识别结构、识别主题、定义属性、建立动态模型、建立功能模型、定义服务面向对象分析的,,基本过程,,10.2,需求陈述,第三章中已介绍过,需求陈述的,内容,包括:,,,问题范围、功能需求、性能要求、应用环境、假设条件,等等陈述方式可繁可简,说明,What,而不是,How, 见教材对,Automated Teller Machine (ATM),的需求陈述10.2.2 例子,,,,10.3,建立对象模型,面向对象分析的首要工作,是建立问题域的对象模型典型的工作步骤:,,确定,Class-&-Object,,确定关联结构层,,完善,,确立属性,,识别继承关系及其它修改,,10.3.1,确定类与对象,Class-&-Object,第,1,步:列出所有候选对象,(candidates),,它们可能是,:,,(1),物理实体 ,,(2),人或组织 ,,(3),要处理的事件,,(4),对象间的活动,,(5),抽象概念 等等;,,另一种方法非正式分析:从需求陈述中挑出,,名词,,Class-&-Object,,形容词,,Attribute,,动词,,Method,,,2,去粗取精,筛选出正确的类与对象,,,2,、确定关联结构层,两个或多个对象之间的相互依赖、相互作用的关系就是关联。
分析确定关联,能促使分析员考虑问题域的,边缘情况,,有助于发现那些,尚未被发现的类与对象,1 初步确定关联,,需求陈述中使用的描述性,动词或动词词组,通常表示关联关系大多数关联可以通过直接提取需求陈述中的动词词组得出ATM例子有下列关联,,(1)直接提取动词短语得出的关联,,,ATM,、中央计算机、分行计算机及柜员终端组成网络,, 总行拥有多台,ATM,,,ATM,设在主要街道上,, 分行提供分行计算机和柜员终 端,, 柜员终端设在分行营业厅及储 蓄所内,, 分行分摊软件开发成本,, 储户拥有账户,, 分行计算机处理针对账户的事务,, 分行计算机维护账户,, 柜员终端与分行计算机通信,, 柜员输入针对账户的事务,,,ATM,与中央计算机交换关于事务的信息,, 中央计算机确定事务与分行的对应关系,,,ATM,读现金兑换卡,,,ATM,与用户交互,,,ATM,吐出现金,,,ATM,打印账单,, 系统处理并发的访问,,(2),需求陈述中隐含的关联,,总行由各个分行组成 ,, 分行保管账户 ,, 总行拥有中央计算机,,系统维护事务日志,,系统提供必要的安全性,,,储户拥有现金兑换卡,,(3)根据问题知识得出的关联,,现金兑换卡访问账户,, 分行雇用柜员,2 筛选,,,。