一起来学UML(3)——类间的依赖、关联、聚合、组合关系

 

 首先回顾一下上一节的内容:类实现接口为虚线箭头,类继承(泛化)一个类为实线箭头。

本节描述类间的依赖(Dependency)、关联(Association)、聚合(Aggravation)、组合(Composition)关系,这四种关系令大多数人头疼,希望本文的描述能解开大家的疑惑。

在对这四个关系进行描述之前,大家先看一下下面的类关系图。Car类有三个成员变量,一个Tire指针,一个Door,一个Person指针,以及一个方法cleanCar,该方法传入一个洗车设备的参数。

我们这里对汽车这个类做一个说明:

1. 汽车是由轮胎Tire组成,就算没有汽车,轮胎也是可以单独存在的

2. 没有了汽车便没有汽车门(这里把门看作是一个空间的概念,而不是看做物理的那种门,就好比没有颜色概念的话也就没有黑色这种说法,这里即:没有车就没有门,这是为了说明一种关系)

3. 汽车需要人开,车的存在和人的存在没有关系,仅仅是说车需要人来开

4. 有一个洗车的方法,该方法需要传入一个洗车设备,这个洗车设备并不是车的一部分,只有洗车的时候才会临时用到该设备。

 

以及相应的描述,我们来逐一描述依赖、关联、聚合、组合这四种关系。

1. 依赖。Car与CleanMachine之间的关系为聚合,Car与CleanMachine是一种临时关系,即CleanMachine作为Car的方法的参数,或者方法中的局部变量;

2. 组合。Car与Door之间的关系为组合,Car由Door组成,但是一旦没有了Car,Door也就不存在了;

3. 聚合。Car与Tire之间的关系为聚合,Car有Tire组成,但是没有了Car,Tire依然是存在的;

4. 关联。Car与Person之间的关系为关联,Car需要Person来开,但是Car不是由Person组成。

我们从一个类A的角度看与另一个类B的关系,进一步说明:

1. 依赖表现为类B为类A中的成员函数的参数、或成员函数中的局部变量,而不是作为成员变量

2. 从关联到聚合到组合的关系越来越强,都是成员变量,但是:

    a. 在关联中,类B是类A的指针型成员变量(即A类型对象的消失了,B类型对象依然可以存在),同时类A和类B没有整体和部分的关系,例如汽车和人之间的关系;

    b. 在聚合中,类B是类A的指针型成员变量(即A类型对象的消失了,B类型对象依然可以存在),同时类A和类B是整体和部分的关系,例如汽车和轮胎之间的关系;

    c. 在组合中,类B是类A非指针型成员变量(即A类型对象的消失了,B类型对象也消失了),同时类A和类B是整体和部分的关系,例如汽车和门(这个空间)之间的关系;

一起来学UML(1)——UML建模工具Umbrello初体验

一起来学UML(2)——类图和泛化

一起来学UML(3)——类间的依赖、关联、聚合、组合关系

一起来学UML(4)——类图中的多重性(Multiplicity)

一起来学UML(5)——用例图

你可能感兴趣的:(工具,UML)