关系 (relationship)是事物之间的联系。
在面向对象的建模中,最重要的 3 中关系是 依赖、泛化和关联。
在图形上,把关系图画成一条线,并用不同的线区别关系的种类。
5.2.1 依赖(dependency)是一种使用关系,说明一个事物(如类 window)使用另一个事物(如类Event)的信息和服务,但反之未必。
在图形上,把依赖画成一条有向的虚线,指向被依赖的事物。
![](https://img-blog.csdnimg.cn/2019092911020197.png)
当要指明一个事物使用另一个事物时,就选用依赖。
在大多数情况下,在类与类之间用依赖指明一个类使用另一个类的操作,或者它使用其他类所定义的变量和产量。这的确是一种使用关系,如果被使用的类发生变化,那么另一个类的操作也会受到影响,因为这个被使用的类此时可能表现出不同的接口或行为。
在 UML 中,也可以在很多其他的事物之间创建依赖,特别是注解和包。
![](https://img-blog.csdnimg.cn/20190929110728131.png)
5.2.2 泛化
泛化(generalization)是一般事物(称为超类或父类)和该事物的较为特殊的种类(称为子类或子)之间的关系。
有时也称泛化为“is-a-kind-of”关系:
一个事物(如类BayWindow)是更一般的事物(如类 Window)的“一个种类”。
泛化意味着子类的对象可以被用在父类的对象可能出现的任何地方,反之则不然。
换句话说,泛化意味着子类可以替换父类的声明。子类继承父类的特性,特别是父类的属性和操作。
若子类的一个操作的实现覆盖了父类的同样一个操作的实现,则这种情况称为多态性。其共同之处是,两个操作必须具有相同的特征和标记(相同的名字和参数)。
在图形上,把泛化画成一条带有空心的三角形大箭头的有向实线,指向父类。
一个雷可以有 0 个、1 个或多个父类。
没有父类并且最少有一个子类的类称为根类或基类;没有子类的类称为叶子类。
如果一个类只有一个父类,说明它使用了单继承;如果一个雷有多个父类,则说明它使用了多继承。
在大多数情况下,永磊或接口之间的泛化来表明继承关系。
在 UML 中,也可以在其他的类目之间创建泛化,比如及节点之间。
![](https://img-blog.csdnimg.cn/2019092914081085.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Jsb3Zla2l0ZQ==,size_16,color_FFFFFF,t_70)
5.2.3 关联
关联(association) 是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系。
给定一个连接两个类的关联,可以从一个类的对象联系到另一个类的对象。
关联的两端都连到同一个类是完全合法的。这意味着,从类的给定对象能连接到该类的其他对象。恰好连接两个类的关联叫作二元关联。尽管不太常见,但可以有连接多于两个类的关联,这种关联叫作 n 元关联。
在图形上,把关联画成一条连接相同类或不同类的实践。当要表示结构关系是,就使用关联。
除了这种基本形式外,还有 4 种应用于关联的修饰。
1、名称
关联可以有一个名称,用于描述该关系的性质。
为了消除名称的歧义,可以提供一个指出读名称方向的三角形,给名称一个方向,如:
![](https://img-blog.csdnimg.cn/20190929141856676.png)
2、角色
当一个类参与了一个关联时,它就在这个关系中扮演了一个特定的角色。
角色是关联中靠近它的另一端的类对另一端的呈现的面孔。
可以显式地命名一个类在关联中所扮演的角色。
把关联端点扮演的角色成为端点名。
如下图,扮演 employee 角色的类 person 与扮演 employer 角色的类 Company 相关联。
![](https://img-blog.csdnimg.cn/20190929142342400.png)
3、多重性
关联表示了对象间的结构关系。
在很多建模问题中,说明一个关联的实例中有多个相互连接的对象是很重要的。这个“多少”被称为关联角色的多重性,它表示一个整数的范围,指明一组相关对象的可能个数。
![](https://img-blog.csdnimg.cn/2019092914270043.png)
4、聚合
两个类之间的简单关联表示了两个同等地位类之间的结构关系,这意味着这两个类在概念上是同级别的,一个类并不比另一个类更重要。
优势要对“整体/部分”关系建模,其中一个类描述了一个较大的事物(“整体”),它由较小的事物(“部分”)组成。
这种关系成为聚合,它描述了“ has - a”关系,意思是整体对象拥有部分对象。其实聚合只有一种特殊的关联,它被表示为在整体的一端用一个空心菱形“ ◇ ” 修饰的简单关联。
![](https://img-blog.csdnimg.cn/20190929143222559.png)
5.2.4 其他特征
简单而未加修饰的依赖、泛化以及带有名称、多重性和角色的关联是创建抽象时所需要的最常见的特征。
事实上,对于所建的大多数模型,这3中关系的基本形式足以表达关系的重要的语义。
然而,有时需要可视化或详述其他特征,如组合聚合、导航、判别式、关联类、特殊种类的依赖和泛化。