首页 » 软件开发 » 五分钟看懂UML类图与类的关系详解(关系关联聚合五分钟看懂)

五分钟看懂UML类图与类的关系详解(关系关联聚合五分钟看懂)

落叶飘零 2024-07-24 13:59:13 0

扫一扫用手机浏览

文章目录 [+]

基本概念

类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。
类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

类图的3个基本组件:类名、属性、方法。

五分钟看懂UML类图与类的关系详解(关系关联聚合五分钟看懂) 软件开发
(图片来自网络侵删)

泛化(generalization):表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。
直接使用语言中的继承表达。
在类图中使用带三角箭头的实线表示,箭头从子类指向父类。

实现(Realization):在类图中就是接口和实现的关系。
这个没什么好讲的。
在类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。

依赖(Dependency):对象之间最弱的一种关联方式,是临时性的关联。
代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。
一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。
在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。

关联(Association) : 对象之间一种引用关系,比如客户类与订单类之间的关系。
这种关系通常使用类的属性表达。
关联又分为一般关联、聚合关联与组合关联。
后两种在后面分析。
在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。
可以是单向和双向。

聚合(Aggregation) : 表示has-a的关系,是一种不稳定的包含关系。
较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。
如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。
在类图使用空心的菱形表示,菱形从局部指向整体。

组合(Composition) : 表示contains-a的关系,是一种强烈的包含关系。
组合类负责被组合类的生命周期。
是一种更强的聚合关系。
部分不能脱离整体存在。
如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。
在类图使用实心的菱形表示,菱形从局部指向整体。

多重性(Multiplicity) : 通常在关联、聚合、组合中使用。
就是代表有多少个关联对象存在。
使用数字..星号(数字)表示。
如下图,一个割接通知可以关联0个到N个故障单。

聚合和组合的区别

这两个比较难理解,重点说一下。
聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。
组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

实例分析

联通客户响应OSS。
系统有故障单、业务开通、资源核查、割接、业务重保、网络品质性能等功能模块。
现在我们抽出部分需求做为例子讲解。

大家可以参照着类图,好好理解。

1. 通知分为一般通知、割接通知、重保通知。
这个是继承关系。

2. NoticeService和实现类NoticeServiceImpl是实现关系。

3. NoticeServiceImpl通过save方法的参数引用Notice,是依赖关系。
同时调用了BaseDao完成功能,也是依赖关系。

4. 割接通知和故障单之间通过中间类(通知电路)关联,是一般关联。

5. 重保通知和预案库间是聚合关系。
因为预案库可以事先录入,和重保通知没有必然联系,可以独立存在。
在系统中是手工从列表中选择。
删除重保通知,不影响预案。

6. 割接通知和需求单之间是聚合关系。
同理,需求单可以独立于割接通知存在。
也就是说删除割接通知,不影响需求单。

7. 通知和回复是组合关系。
因为回复不能独立于通知存在。
也就是说删除通知,该条通知对应的回复也要级联删除。

经过以上的分析,相信大家对类的关系已经有比较好的理解了。
大家有什么其它想法或好的见解,欢迎拍砖。

如果对java微服务、分布式、高并发、高可用、大型互联网架构技术、面试经验交流。
感兴趣可以关注我的头条号,我会在微头条不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。
欢迎分享,欢迎评论,欢迎转发

标签:

相关文章

C语言表白代码,编程之美,爱意绵绵

在这个科技飞速发展的时代,编程已经成为了我们生活中不可或缺的一部分。而C语言作为一门经典的编程语言,更是备受青睐。今天,就让我们用...

软件开发 2024-12-04 阅读9 评论0

16倍速生活方式,高效工作与生活的完美融合

随着科技的飞速发展,我们的生活节奏也在不断加快。在这个快节奏的时代,如何高效地平衡工作与生活,成为了许多人关注的焦点。本文将探讨1...

软件开发 2024-12-04 阅读8 评论0

C语言编程猜数游戏,编程与娱乐的完美融合

在科技日新月异的今天,编程已经成为一项重要的技能。作为计算机科学的基础,编程不仅可以锻炼我们的逻辑思维,还能提高我们的动手能力。而...

软件开发 2024-12-04 阅读8 评论0

C语言病毒代码介绍,技术与道德的双重挑战

随着信息技术的飞速发展,网络安全问题日益凸显。病毒作为一种恶意软件,严重威胁着计算机系统的稳定运行。C语言作为一种功能强大的编程语...

软件开发 2024-12-04 阅读6 评论0