统计
  • 建站日期:2021-03-10
  • 文章总数:518 篇
  • 评论总数:151 条
  • 分类总数:32 个
  • 最后更新:4月20日
文章 代码笔记

java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别

梦幻书涯
首页 代码笔记 正文

分别介绍这几种关系:

UML关系:继承(泛化)、实现、依赖、关联、聚合、组合的联系与区别

一、表示符号上的区别


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第1
张图片

二、具体区别与联系

1. 继承/泛化(Generalization

【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性。

【箭头指向】:带三角箭头的实线,箭头指向父类


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第2
张图片 
java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第3
张图片

2.实现(Realization

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现. 一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

【箭头指向】:带三角箭头的虚线,箭头指向接口


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第4
张图片
java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第5
张图片

3.依赖(Dependency)

【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某个老师要授课,则需要有这么一门课让他教授,此时老师与课之间的关系就是依赖;

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第6
张图片
java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第7
张图片

4.关联(Association)

【关联关系】:是类与类之间的联接,它使一个类知道另一个类的属性和方法。两个类或者类与接口之间语义级别的一种强依赖关系,这种关系比依赖更强,一般是长期性的,而且双方的关系一般是平等的。比如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量/全局变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第8
张图片

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

下图为自身关联:


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第9
张图片

5.聚合(Aggregation

【聚合关系】:关联关系的一种特例是强的关联关系聚合是整体与部分的关系,且部分可以离开整体而单独存在,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,比如计算机与CPU、公司与员工、车和轮胎的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

聚合关系也是使用实例变量实现的java 语法上是分不出关联和聚合的关联关系中两个类是处于相同的层次而聚合关系中两不类是处于不平等的层次一个表示整体一个表示部分.

【代码体现】:成员变量/全局变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第10
张图片

6.组合(Composition)

【组合关系】:也是关联关系的一种特例,是比聚合关系还要强的关系,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如:公司和部门是整体和部分的关系,没有公司就不存在部门合成关系不能共享。

组合跟聚合几乎相同,唯一的区别就是"部分"不能脱离"整体"单独存在,就是说,"部分"的生命期不能比"整体"还要长。

【代码体现】:成员变量/全局变量

【箭头及指向】:带实心菱形的实线,菱形指向整体


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第11
张图片

各种关系的强弱顺序:    

泛化=实现>组合>聚合>关联>依赖

下面这张UML图,比较形象地展示了各种类图关系:


java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第12
张图片

三、综合比较

1.聚合与组合

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

2)部件的生命周期不同

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

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

3)聚合关系是"has-a"关系,组合关系是"contains-a"关系。

2.关联和聚合

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

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

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

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

3.关联和依赖

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

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

4.综合比较

这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:

组合>聚合>关联>依赖

 

结合了两篇博客如下:

http://blog.sina.com.cn/s/blog_94c2c46a0102vaiz.html

http://blog.csdn.net/wzjking0929/article/details/51803110


版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2020-11-11,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
最全的微软msdn原版windows系统镜像和office下载地址集锦
« 上一篇
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。
Array

日历

热门文章