天天看点

UML类图的几种关系浅析

类图中的主要关系有如下几种

  • 关联关系

    – 聚合关系

    – 组合关系

  • 依赖关系
  • 泛化关系
  • 细化关系

1、关联关系

关联关系是类与类之间的连接,表示一类对象与另一类对象之间有联系,通常将一个类的对象作为另一个类的属性。

下图为单向关联:

UML类图的几种关系浅析

同样的有双向关联,注意双向关联的直线是不带箭头的,而不是两头都带箭头:

UML类图的几种关系浅析

以及自关联:

UML类图的几种关系浅析

当然还有多重性关联,一般在实线上标注出来即可,常见的标注如下,意思也很好理解:

1..1
0..*
1..*
0..1
m..n:表示另一个类的一个对象与最少m、最多n个该类对象有关系(m<=n)      
UML类图的几种关系浅析

上图是一个组合关系(别急,下面马上就讲到了),但同时也标注出了多重性关联,这表示一个公司可以有1个或多个部分(至少一个),而一个部门属于且仅属于一个公司。

聚合关系、组合关系都属于关联关系。

聚合关系(又名“共享聚集”),属于强关联关系,聚合是整体和部分的聚合,在形式上表现为这个整体不能脱离部分单独存在,但是部分可以脱离整体而存在。

严谨一点来说,顺便也解释一下为什么叫“共享聚集”,是因为聚合关系中的那个“部分”,可以被多个“整体”所共享(注意是“可以”,而不是“一定”)。

比如班级里的同学,汽车和轮胎、引擎等,在UML中用空心菱形加箭头表示,如下图:

UML类图的几种关系浅析

组合关系(又叫“组合聚集”)是比聚合关系的关联性更强的一种关系,聚合关系中整体离不开部分、而部分可以离开整体,但是在组合关系里,不仅要求整体离不开部分,同时还要求部分也不可以离开整体单独存在,也就是说这里的“部分”和“整体”是一对一的,一个部分只能属于一个整体(注意这里强调的是“只能”)。比如人的头和嘴等等,在UML中用实心菱形加箭头表示:

UML类图的几种关系浅析

2、依赖关系

依赖关系是一种使用关系,描述两个模型元素(类、用例等)之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素依赖于独立的模型元素。简单点说,就是如果类A中某个方法中需要传一些参数,而其中一个参数是类B的一个实例,那么这就说A依赖于B。依赖关系在UML图中用虚线加箭头表示

UML类图的几种关系浅析

3、泛化关系

泛化关系也叫继承关系,用于描述父类(又名“超类”、“基类”)与子类(又名“派生类”)之间的关系。在图中使用空心三角形加直线表示。

UML类图的几种关系浅析

这里需要强调的是,泛化关系还可以细分,分为普通泛化和受限泛化。

普通泛化就是一般的不加约束的泛化,当然受限泛化自然就是受到一定约束条件的泛化了咯。通俗点说,除了受限泛化,剩下的就都是普通泛化。那么什么是受限泛化呢?给泛化关系附加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系叫受限泛化。预定义的约束有4种:多重、不相交、完全和不完全。

UML类图的几种关系浅析
UML类图的几种关系浅析
UML类图的几种关系浅析

4、细化关系

细化关系常与依赖关系放在一起讲,其是指对同一个事物在不同抽象层次上的描述,即假设两个模型元素A和B都描述同一个事物,他们的区别是抽象层次不同,如果B是在A的基础上的更详细的描述,则称B细化了A,或称A细化成了B。

细化的图示符号为由元素B指向元素A的、一段为空心三角形的虚线。

很多地方会将这种关系叫做接口与实现关系,但我私以为细化关系讲的更加精准,而且包括的范围也稍大些。

不过这种关系常见的就是接口与实现了,在接口中一般没有属性,且很多操作都是抽象的,只有操作的申明而没有操作的实现。接口对应的类图前面要加一个

UML类图的几种关系浅析

继续阅读