天天看点

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

一、六大关系

继承/泛化(Generalization):

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字

extends

明确标识,在设计时一般没有争议性;

实现(Realization):

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字

implements

明确标识,在设计时一般没有争议性;

依赖(Dependency):

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;

比如:某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;

表现在代码层面:

为类B作为参数被类A在某个method方法中使用;

关联(association):

他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;

表现在代码层面:

为被关联类B以类属性的形式出现在关联类A中

也可能是关联类A引用了一个类型为被关联类B的全局变量

聚合(aggregation):

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即

has - a

的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;

比如:计算机与CPU、公司与员工的关系等;

表现在代码层面:和关联关系是一致的,只能从语义级别来区分;

组合(composition):

组合也是关联关系的一种特例,他体现的是一种

contains - a

的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;

比如:你和你的大脑;

表现在代码层面:和关联关系是一致的,只能从语义级别来区分;

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;

其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;

但总的来说,后几种关系所表现的强弱程度依次为:

组合>聚合>关联>依赖

聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同

聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子

程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期

二、关系之间的区别 ★

1.聚合与组合

(1)聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。

(2)部件的生命周期不同

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

(3)聚合关系是“has - a”关系,组合关系是“contains - a”关系。

2.关联和聚合

(1)表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

(2)关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。

(3)关联是一种结构化的关系,指一种对象和另一种对象有联系。

(4)关联和聚合是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。

3.关联和依赖

(1)关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

(2)依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。

三、六大联系线条/箭头 ★

泛化 /继承:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

实现:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

依赖:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

关联:

直接关联:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

普通关联:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

聚合:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★

组合:

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★
UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)一、六大关系二、关系之间的区别 ★三、六大联系线条/箭头 ★