UML中依赖,关联,聚合,组合的含义(结合UML图和实战代码详解)

1. 什么是UML图?

UML-Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。
UML是在开发阶段,说明、可视化、构建和书写一个面向对象软件密集系统的制品的开放方法。最佳的应用是工程实践,对大规模,复杂系统进行建模方面,特别是在软件架构层次,已经被验证有效。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出来。一份典型的建模图表通常包含几个块或框,连接线和作为模型附加信息之用的文本。这些虽简单却非常重要,在UML规则中相互联系和扩展。
更多介绍点击链接了解:
https://baike.baidu.com/item/UML%E5%9B%BE/6963758?fr=aladdin

2. UML图中的各种关系含义

2.1 依赖

2.1.1 简单理解及画法

这个依赖,通俗一点就是:人要依赖氧气、水、食物......才能生存,需要依赖氧气、水、食物......,人要依赖很多东西才能生存,如下图所示,氧气只是人依赖的一部分,如下图所示,画法如下图所示
在这里插入图片描述

在这里插入图片描述

2.1.2 那么在UML中的依赖是怎样的呢?

其实和上述所描述的差不多,如下图,类A依赖类B,那么类A中一定有B的存在,这个存在可能依赖关系在 Java 或 C++ 语言中体现为局部变量(函数参数等)、方法的参数或者对静态方法的调用,是组成类A的一部分。缺少了类B,类A就实现不了一部分功能了,如人缺少了手,就不能打游戏了,所以类A依赖类B
依赖方要用虚线剪头指向被依赖的类,如下图所示
在这里插入图片描述

2.1.3 实战中UML图的画法和表现及相应的代码

如在我写的一个项目中,类UserEventHandler依赖类LoginReqEv,类LoginReqEv是类UserEventHandler中一个函数的变量
补充一下,-号在这个变量或者函数的前面表示它是这个类私有的(private),+号表示是公有的(pubulic),#表示是保护的(protected),UML类图,和代码图如下图所示
在这里插入图片描述

在这里插入图片描述

2.2 关联

2.2.1 简单理解,以及在UML中的画法

A关联于B,则B体现为A的全局变量(成员变量),反之,关联分为双向关联和单向关联,被关联方被实心箭头所指,画法如下图所示,其中双向关联有两种画法,还有一种特殊的自关联,一般在单例模式中出现,我就不介绍了。
在这里插入图片描述

2.2.2 实战中UML图的画法和表现及相应的代码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3 聚合

2.3.1 简单理解

聚合的关系比关联要强,聚合和组合比较像,都有关联的特征;
在聚合关系中,整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;
组合的生命周期一样,才叫组合嘛!
聚合换一种话说,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在
比如有一个类A和一个类B,如果B是A的聚合(A是整体,B是部分),要满足如下特征:

1. B是A的指针型成员变量
2. A和B有具有各自的生命周期,当A虚构时,即生命周期结束时,B不受影响(整体解散时,部分不受影响)

我查阅了很多资料,发现聚合是一个强关联,它肯定有关联的特征(成员变量中的指针型成员变量),也有自己的特征,各有各的生命周期。只有指针型成员变量才会有自己的独立分配内存空间,当整体不存在时,指针型成员变量还存在,但是有一种特殊情况,就是整体的虚构函数中,如果把指针型成员变量delete回收内存的话,指针型成员变量就随着整体的消逝而灭亡了,这就属于组合了,如下图1所示,这种情况是聚合。如下图2所示,这种情况是组合;

所以是聚合还是组合,要看具体的代码是怎么写了

在这里插入图片描述
在这里插入图片描述

2.3.2 实战中UML图的画法和表现及相应的代码

画法,空心菱形加实心箭头,指向成员变量对应的类,代码如上图一所示,UML图的画法如下图所示
在这里插入图片描述

2.4 组合

2.4.1 简单理解

组合换一种话说,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离不可以脱离整体,整体消失时,部分也随之消失一般在整体虚构时,部分也虚构了(普通成员变量)或者回收内存了(指针成员变量)
有以下特征:

1. 属于整体的一部分,即为整体的成员变量
2. 生命周期随着整体的虚构(消失)而消失,生命周期相同
如果是指针成员变量的话,它在整体的其他函数方法中回收,或者没有在整体的虚构函数中回收,它就不属于组合了。

2.4.2 实战中UML图的画法和表现及相应的代码

画法,实心菱形加实心箭头,指向成员变量对应的类,图和相应的代码如下
在这里插入图片描述

在这里插入图片描述

画图不易,觉得写得不错的,给个赞和收藏或者关注哦在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值