在UML的类图中,类图之间的关系分为4中:关联(Association)、依赖(Dependency)、泛化(Generalization)和实现(Realization)。

一、关联(Association)

关联关系是一种“拥有”关系,它使一种类“知道”另一种类的属性和方法。

举例:企鹅和气候两个类,企鹅需要‘知道’气候的变化和‘了解’气候规律,才去决定什么时候迁徙,像这样的关系,我们称为关联。

类关系图 自动生成 android studio_泛化


(1)聚合(Aggregation):关联的一种弱的“拥有”关系。

聚合关系体现的整体和部分的关系,且部分离开整体可单独存在。举例:企鹅群和企鹅。企鹅群是一个类,由许多企鹅组成。但是企鹅离开企鹅群可单独存在。

类关系图 自动生成 android studio_泛化_02


(2)组合(Composition):关联的一种强的“拥有”关系。

组合关系体现的是严格的部分和整体的关系,部分一旦脱离整体将不存在。举例:企鹅和翅膀。企鹅有两只翅膀,当企鹅消失的时候,这对翅膀也将会消失。

类关系图 自动生成 android studio_类图_03


二、依赖(Dependency)

依赖关系体现的一种“使用”关系,即一个类的实现需要使用另一个类的方法或者属性。举例:企鹅和氧气。企鹅生存需要呼吸氧气,它们两者之间就是一个“使用”关系,也就是依赖。

类关系图 自动生成 android studio_父类_04


三、泛化(Generalization)

泛化关系体现的是一种继承关系。子类泛化出父类,而父类特化出的子类拥有父类所有的属性和方法。举例:动物和企鹅。动物是一个父类,其属性是一双眼睛,方法是呼吸,那么企鹅继承与动物这个类,就会拥有一双眼睛和呼吸的行为。

类关系图 自动生成 android studio_类图_05


四、实现(Realization)

实现关系体现的是类与接口的关系,类是接口所有特征和行为的实现。举例:定义一个行为是“呼吸”的接口,企鹅类实现这个“呼吸”的动作。

类关系图 自动生成 android studio_泛化_06


关系对比

关联VS聚合VS组合
 三者都体现类之间的“拥有”关系,聚合和组合,都是整体和部分的关系,只是两种关系中类的生命周期不同。聚合是“弱拥有”,组合是“强拥有”。
 
 关联VS依赖
 这两种关系的区别很明显,关联体现的是“拥有”,依赖体现的是“使用”。

 泛化VS实现
 泛化体现两个类之间的关系,实现是类与接口之间的关系。泛化强调的是类之间的继承,实现强调的是类对接口的实现。
 通过对比总结出类图之间4种关系的强弱:依赖<关联<聚合<组合<泛化=实现

总结
UML图9种图中类图对软件实施有着指导性作用,在代码中创建类往往要参照着类图。那么,类图之间的关系则是代码中实现各种类之间调用的“Key”。有了这把钥匙,软件开发人员才能更加明了地编写代码

作者:MHJ609