- 3.9 UML关系
- 3.9.1 关联关系(assocration)
- 3.9.2 依赖关系(dependency)
- 3.9.3 扩展关系(extends)
- 3.9.4 包含关系(include)
- 3.9.5 实现关系(realize)
- 3.9.6 精化关系(refine)
- 3.9.7 泛化关系(generalization)
- 3.9.8 聚合关系(aggregation)
- 3.9.9 组合关系(composition)
3.9 UML关系
在UML
中,关系是非常重要的语义,它抽象出对象之间的联系,让对象构成某个特定的结构。本节将列举出UML
所定义的关系,并解释它们的语义。
3.9.1 关联关系(assocration)
关联关系的图像表示
关联关系是用一条直线表示的
它描述不同类的对象之间的结构关系,关联关系是一种静态关系
,通常与运行状态无关,而是由”常识”、”规则”、”法律”等因素决定的,所以关联关系是一种”强关联”的关系。
举例
例如,
- 公司与员工之间一对多就是一种符合”常识”的关系;
- 乘车人和车票之间的一对一关系是符合”规则”的关系;
- 公民和身份证之间的一对一关系是符合”法律”的关系;
关联关系和依赖关系的不同
关联关系用来定义对象之间静态的、天然的结构。这与依赖关系是不同的,依赖关系表达的是对象之间临时性的、动态的关系。
关联关系在代码中的体现
在最终的代码里,关联对象通常是以实例变量(成员变量
)的形式实现的。
与依赖相比,关联的两个对象之间通常不会相互直接使用,尽管它们相互”知道”对方的存在,但一般都是由外部对象来访问的,如一个外部访问者可以通过员工对象获得公司对象。
关联关系的多重性
关联关系具有多重性,常见为一对一关联
、一对多关联
、多对多关联
等,也可以是任意多重性关联
,如*
对*
关联(*代表任意数)。
举例: 父子结构
例如对象之间的父子
结构,如果是无方向的,表明父子对象相互拥有对方的实例变量
;如果是有方向的,如父到子,则表明父对象有子对象的实例变量,但子对象没有父对象的实例变量。
3.9.2 依赖关系(dependency)
依赖关系的图形
依赖关系是用一条带箭头的虚线表示的,如果箭头从A指向B,则表示A依赖B。
依赖关系描述了一个对象在运行期会使用
到另一个对象这样的关系
依赖关系和关联关系的不同
与关联关系不同的是,依赖关系是一种临时性
的关系,它通常都是在运行期
产生,并且随着运行场景的不同,依赖关系也可能发生变化。
举例说明
例如人
和船
这两个对象,
- 如果运行场景是开动轮船,那么轮船依赖于人(水手);
- 如果场景变为渡海,那就变成人依赖于船了。
可见,依赖关系是一种”弱”关系,它不是天然存在的,并且会随着运行场景的变化而变化。
如人和刀这两个对象,平时它们是没有关系的,但在削苹果这个场景里,人依赖于刀;脱离了这个场景,或者说当场景结束后,依赖关系也就不存在了。
依赖代码里的体现
一般而言,依赖关系在最终的代码里体现为类构造方法、类方法等的传入参数
。与关联关系相比,依赖关系除了临时”知道”对方外,还会”使用”对方的属性或方法。从这个角度讲,被依赖的对象改变会导致依赖对象的修改。
使用关联关系的情况
A对象对B对象没有操作,这时A仅仅是”知道”B对象,并且B修改了方法后,A并不变化,则使用关联关系。
使用依赖关系的情况
如果A对象在某个场景当中使用了B对象的属性或方法,则B的修改会导致A的修改,这时A依赖于B,要使用关联关系.
杜绝双向依赖
同样的,依赖也有单向依赖和双向依赖之分。但是依赖关系却不像关联关系那样有带箭头和不带箭头的区分,统统都是带箭头的。这是因为在面向对象里,双向依赖是一种非常不好的结构,我们总是应当保持单向依赖,杜绝双向依赖关系的产生
3.9.3 扩展关系(extends)
3.9.4 包含关系(include)
这两个关系主要用在用例图,先留着,有空再看
3.9.5 实现关系(realize)
实现关系是用一条带空心三角形箭头的虚线表示的
3.9.6 精化关系(refine)
精化关系先省略,用到再说
3.9.7 泛化关系(generalization)
泛化关系是用一条带空心三角形箭头的直线表示的,
泛化关系可用于建模过程中的任意一个阶段,说明两个对象之间的继承关系
,泛化关系表示一个类对另一个类的继承。
3.9.8 聚合关系(aggregation)
聚合关系是用一条带空心菱形箭头的直线表示的.
聚合关系用于类图,特别用于表示实体对象之间的关系,表达整体由部分构成
的语义。例如个部门由许多人员构成。
聚合 整体不存 部分仍在
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。例如部门撤销以后,人员不会因此而消失,他们依然存在。
3.9.9 组合关系(composition)
组合关系是用一条带实心菱形箭头的直线表示的
组合关系用于类图,特别用于表示实体对象关系,表达整体拥有
部分的语义。例如母公司拥有许多子公司。
组合 整体不存 部分也不存
组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。例如母公司解体了,子公司也将不再存在。
原文链接: 3.9 UML关系