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

UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)

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

UML中类与类,已经类与接口,接口与接口的关系有:泛化(generalization),关联(association),依赖(dependency),实现(realization)这几种。

 
泛化(generalization)关系时指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力,继承是类与类或者接口与接口最常见的关系,在Java中通过关键字extends来表示。

 
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第1
张图片

实现(realization)是指一个class实现interface接口(一个或者多个),表示类具备了某种能力,实现是类与接口中最常见的关系,在Java中通过implements关键字来表示。

 
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第2
张图片

依赖(dependency)关系也是表示类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。在代码层面,为类B作为参数被类A在某个方法中使用。

在java中,依赖表现为:局部变量,方法中的参数和对静态方法的调用。

 
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第3
张图片

关联(association)关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。

关联可以使用单箭头表示单向关联,使用双箭头或者不适用箭头表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。

0..1 表示可以有0个或者1个实例

0..* 表示对实例的数目没有限制

1     表示只能有一个实例

1..* 表示至少有一个实例

关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,为被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。

在Java中,关联关系是使用实例变量来实现的

 
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第4
张图片

聚合(aggregation)是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,即has-a关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU,公司与员工的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。

聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次,而聚合则明显的在两个不同的层次。

 
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第5
张图片

组合(compostion)也是关联关系的一种特例,体现的是一种contain-a关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。

体现在代码层面与关联时一致的,只能从语义来区分。

组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不同脱离“整体”单独存在,其生命周期应该是一致的。

 
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第6
张图片

总结:

主要是关联关系的细化需要注意强弱,由若到强分别是 依赖 < 关联 < 聚合 < 组合





这篇博客对类之间的关系进行了整理,在用UML进行类图设计时,对类之间的关系更加清晰明了.

       

       一、表示符号上的区别


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第7
张图片 

二、具体区别与联系

继承(泛化)

       指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系,可分单重继承,多重继承(Java不支持);在Java中此类关系通过关键字extends明确标识。


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第8
张图片
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第9
张图片

       实现

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


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第10
张图片

      依赖

      可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某个老师要授课,则需要有这么一门课让他教授,此时老师与课之间的关系就是依赖;表现在代码层面,为类Course作为参数被类Professor在Teach方法中使用;


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第11
张图片

      关联

      它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,普通关联关系的两个类处于同一层次上,关联可以是单向(只有一个类知道另外一个类的公共属性和操作)的也可以是双向(两个类都知道另一个类的公共属性和操作)的;大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。

双向关联:


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第12
张图片

单向关联:


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第13
张图片

      聚合

      聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如书本与暑假、公司与员工的关系等;具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第14
张图片


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第15
张图片

      组合

      组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,也可以理解为如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。比如你和你的大脑或一本书和它的书页。


UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第16
张图片
UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第17
张图片

      综上所述,对于继承、实现这两种关系比较简单,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;从后几种关系所表现的强弱程度来看,依次为:组合>聚合>关联>依赖。在面向对象的设计过程中,能采取强度较大的关系,决不能采取强度小的关系。



https://www.jianshu.com/p/7189d105058a







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

这篇文章最后更新于2020-11-11,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别
« 上一篇
工具软件导航
下一篇 »

发表评论

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

日历

热门文章