看懂UML视图中的各种关系
Posted 软件工程之思
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看懂UML视图中的各种关系相关的知识,希望对你有一定的参考价值。
在UML中,关系是非常重要的语义,它抽象出对象之间的联系,让对象构成某个特定的结构。
UML当中对象之间的关系有关联、依赖、扩展、包含、实现、精化、泛化、聚合、组合等9种关系。它们分别有不同的表现形式,表达着对象间的不同结构。
关联关系
关联关系是一种静态关系,是由“常识”、“规则”、“法律”等因素决定的固有的关系,是一种“强关联”的关系。
关联关系具有多重性,既有对象间的一对一的关联关系、一对多的关联关系,也有多对多的关联关系。
依赖关系
依赖关系是一种临时性的关系,它通常都是在运行期产生,描述一个对象使用到另一个对象的关系。
依赖关系与关联关系相比,是一种“弱”关系,因为它临时的,并且会随着运行场景的变化而变化。
一般而言,依赖关系在最终的代码里体现为类构造方法、类方法等的传入参数。这些参数会因被依赖的对象改变而导致依赖对象的改变。
依赖关系有单向依赖和双向依赖之分。双向依赖是一种非常不好的结构,我们应当杜绝双向依赖关系的产生。
扩展关系
扩展关系用于在用例模型中说明某个基本用例的可选的分支。
扩展关系表示的是“可选”的用例,不是“必需”的用例,这意味着即使没有这个扩展用例,基本用例也是完整的;而且即使有多个扩展用例,同一时间用例实例也只会使用其中的一个。
在建模过程中,我们使用扩展关系可能基于以下理由:
使用扩展用例可以将模型中的可选行为和必选行为分开。
-
扩展用例可用于表示只在特定条件(有时是例外条件)下才执行分支流。
包含关系
包含关系用于在用例模型中表示执行基本用例实例的过程中插入的必需的被封装的行为段。基本用例可控制与包含用例的关系,同时也依赖于执行包含用例所得的结果,但基本用例和包含用例都不能访问对方的属性。
与扩展用例不同的是,包含用例表示的是“必需”而不是“可选”,这意味着如果没有包含用例,基本用例是不完整的,同时如果没有基本用例,包含用例是不能单独存在的。
在建模过程中使用包含关系可能基于以下理由:
从基本用例中分解出的行为段对于了解基本用例的主要目的并不是必需的,只有它的结果才比较重要。
-
要表达多个用例所共有的行为段。
实现关系
实现关系用于在用例模型中连接基本用例和它的一个用例实现,以说明基本用例的一个实现方式。
精化关系
精化关系用于在用例模型中表达将一个基本用例精化分解出多个更小的且能够更细致地展示了基本用例的核心业务关键用例。这些精化用例并没有增加、减少、改变基本用例的行为和属性,仅仅是更加细致和明确化了。
精化关系仅仅用于建模阶段。
泛化关系
泛化关系可用于在建模过程中说明两个对象之间的继承关系。继承意味着祖先的定义(包括任何特征,如属性、关系或对其对象执行的操作)对于后代的对象也是有效的。
在泛化关系中,子对象继承了基本对象的所有特征,并且子对象可以增加、改变继承自基本对象的行为和属性。
聚合关系
聚合关系用于类图,特别用于表示实体对象之间的,整体由部分构成的关系。
与组合关系不同的是,聚合关系中的整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。
组合关系
组合关系也是在类图中使用,特别用于表示实体对象之间,整体对部分拥有,部分隶属于整体的关系。
组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。
了解以上9种对象间的关系的表示形式和内存含义,就可以看懂UML视图了。
这正是:
对象关系有九种,视图按需去应用
了解形式和含义,看懂视图不发懵
参考书目:大象:Thinking in UML(第二版),谭云杰,中国水利水电出版社
作者简介:王小双,长期从事GJB5000推广、实施、评价、改进的工作,创建《软件工程之思》微信公众号,一直在《软件工程之思》分享GJB5000、CMMI、软件工程的知识和感悟。现致力于GJB5000咨询以及软件过程改进、软件工程能力提升的研究工作。
以上是关于看懂UML视图中的各种关系的主要内容,如果未能解决你的问题,请参考以下文章