UML的六大关系---泛化、实现、关联、聚合、组合、依赖

文章目录

  • 前言
  • 1. 泛化关系(Generalization)
  • 2. 实现关系(Realization)
  • 3. ‌关联关系(Association)
  • 4. 聚合关系(Aggregation)
  • 5. 组合关系(Composition)
  • 6. 依赖关系(Dependency)
  • 总结

前言

讲到设计模式,就会有 U M L UML UML类图这个东西。
一开始就很难理解各种线啥意思,这里做一个笔记记录一下。

同时如果我的设计专栏博客里面对类图有些问题的话,这里可以做一下回顾。


1. 泛化关系(Generalization)

表示一般与特殊的关系,通过带空心三角形的实线表示,指向父类。
例如,动物和老虎的关系,其中动物是父类,老虎是动物的一个具体类型。‌

在C++中,继承关系其实就是泛化关系。
在这里插入图片描述

2. 实现关系(Realization)

表示类与接口之间的关系,通过带空心三角形的虚线表示,箭头指向接口。例如,一个操作接口有绘画接口,Person类有Draw去实现。

这个实现就相当于虚函数,子类重载函数。

在这里插入图片描述

3. ‌关联关系(Association)

表示类与类之间的联系,通过实线表示。关联可以是双向的或单向的,通过箭头表示方向。
例如,老师与学生之间的关系,老师有多个学生,每个学生也有多位老师,双向关联。
一个学生只拥有一张床,单向关联。
在这里插入图片描述

4. 聚合关系(Aggregation)

表示整体与部分的关系,部分可以离开整体单独存在。通过带空心菱形的实线表示,菱形指向整体。
例如,汽车与轮胎的关系,轮胎可以脱离汽车独立存在。‌

在这里插入图片描述

5. 组合关系(Composition)

也是整体与部分的关系,但部分不能离开整体单独存在。通过带实心菱形的实线表示,菱形指向整体。例如,人和心脏的关系。可以理解为心脏、血液、骨骼…组成了一个人
在这里插入图片描述

6. 依赖关系(Dependency)

表示一个类使用另一个类。通过带箭头的虚线表示,箭头指向被使用的类
例如,人雕刻要用工具,人相当于依赖工具。

在这里插入图片描述

最后贴一个我看书的一个总的图,结合了各种关系。上面六种明白了之后,考虑一下总图。
下面这幅图能看明白,后面看设计模式的类图都算是比较easy了。
在这里插入图片描述

总结

六种关系的熟悉是学习设计模式的基础。
这里做一个记录,后面如果有遗忘,做一个回顾。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android RSA 加解密

文章目录 一、RSA简介二、RSA 原理介绍三、RSA 秘钥对生成1. 密钥对生成2. 获取公钥3. 获取私钥 四、PublicKey 和PrivateKey 的保存1. 获取公钥十六进制字符串1. 获取私钥十六进制字符串 五、PublicKey 和 PrivateKey 加载1. 加载公钥2. 加载私钥 六、 RSA加解密1. RSA 支持三…

selenium.common.exceptions.NoAlertPresentException: Message:

这个错误 selenium.common.exceptions.NoAlertPresentException 表示在尝试访问警告框时,当前页面上并没有活动的警告框。这通常发生在两种情况下: 警告框实际上并没有出现,或者在你尝试访问它之前已经被自动处理或关闭了。你的代码在警告框…

CTF-Web习题:2019强网杯 UPLOAD

题目链接:2019强网杯 UPLOAD 解题思路 打开靶场如下图所示,是一个注册和登录界面 那就注册登录一下,发现是一个提交头像的页面: 试了一下只有能正确显示的png图片才能提交成功,同时F12拿到cookie,base6…

树形背包问题

一些题目给定了树形结构,在这个树形结构中选取一定数量的点或边(也可能是其他属性),使得某种与点权或者边权相关的花费最大或者最小。解决这类问题,一般要考虑使用树上背包。 树上背包,顾名思义&#xff0c…

Linux 基础开发工具 : Vim编辑器

Vim 是 Linux 和其他类 Unix 系统上广泛使用的文本编辑器之一。它基于更早的 vi 编辑器,但添加了许多增强功能和扩展。Vim 是“Vi IMproved”的缩写,意为“改进的 Vi”,我们常使用Vim编辑器编写c/c代码。 ps:该篇介绍均为最基础介…

驱动开发系列07 - 驱动程序如何分配内存

一:概述 Linux 内核提供了丰富的内存分配函数、在本文中,我们将介绍在设备驱动程序中分配和使用内存的方法,以及如何优化系统的内存资源。由于内核为驱动程序提供了统一的内存管理接口。所以我们不会去讨论不同架构是如何管理内存的,文本不涉及分段、分页等问题,此外在本文…

Blender中保存透明图片

在Blender中保存透明图片,主要是通过在渲染设置中调整背景透明度,并选择合适的文件格式来保存图像。以下是一个详细的步骤指南: 一、设置渲染属性 打开Blender并加载你想要渲染的模型。在右侧的属性编辑器中,找到并点击“渲染属…

解决Visual studio内报错信息:MSB8036:找不到 Windows SDK 版本问题

问题描述: 找不到WindowsSDK版本,请安装所需版本的Windows SDK,或者在项目属性页中通过右键单击解决方案并选择“重定解决方案目标”来更改SDK版本。 首先,如果你尝试了以下两种方法: (1)重新…

【Qt】 FFmpeg+Qt windows 32位或者64位环境搭建

简介 目前Ffmpeg官网(64位连接)下载的均为64位编译的,这要求我们采用的Qt creator也采用64位编译器。但是仍存在部分用户采用32位编译器,所以这部分用户需下载32 Ffmpeg(32位连接)。 根据使用的编译器位数…

Linux下安装Redis(超简单)

1.下载 选着自己需要下载的版本后,右击选择复制链接,然后利用命令进行下载,进入Xshell控制台,输入wget将复制的链接粘帖上,这里我选择的是6.0.6版本。 命令如下: wget https://download.redis.io…

7款主流大模型实测:简单的数感测试全翻车

实测strawberry中有2个字母“r”?不会比大小的大模型也几乎数不对数,数理能力差到惊人! 科技新知 原创 谁能想到,号称“超级大脑”的大模型,竟然在几道简单的数学题上败给了小学生。 近日,国内火热的音乐…

Vue.js 2 项目实战(三):综合案例-小黑记事本

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计目标是通过采用易于上手的结构和强大的功能,使前端开发变得更加简便和高效。以下是 Vue.js 的一些关键特性和优点: 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&a…

网络及操作系统知识点汇总

一.网络相关 1.网络模型 (1)七层网络模型 从下到上:物理层-数据链路层-网络层-传输层-会话层-表示层-应用层 (2)TCP/IP网络模型 简化的七层模型:数据链路层-网络层-传输层-应用层 应用层,负…

HR怎么看待PMP证书呢?

不是HR,但 HR 的招人标准也是根据市场跟岗位需求来的吧。据我了解,PMP 证书目前还是有市场的,大家可以根据自己的行业跟公司,去判断下 PMP 的含金量,看自己是否需要去考。一定要结合自己的需求分析,盲目跟风…

【QT】定时器事件 - QTimerEvent QTimer

qt 系统 - 定时器 定时器1. QTimerEvent2. QTimer3. 获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执…

EXO项目解析:pynvml怎么实现监控的,包括什么参数

目录 pynvml怎么实现监控的,包括什么参数 pynvml实现监控的方式 pynvml包括的主要参数 GPU功耗的组成 举例说明 注意事项 EXO项目解析:https://github.com/exo-explore/exo?tab=readme-ov-file 这段代码是一个使用setuptools库编写的Python包安装脚本,主要用于定义和…

GIT命令学习 一

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

C++文件操作-文本文件-读文件

第一种 #include<iostream>//1、包含头文件 fstream #include<fstream> using namespace std;void test01() {//2、创建流对象ifstream ifs;//3、打开文件 并且判断是否打开成功ifs.open("test.txt", ios::in);if (!ifs.is_open()){cout << "…

【Git】(基础篇六)—— 发现好项目

发现github上的好项目 在开源社区中&#xff0c;发现好的项目&#xff0c;不论是对于自己的学习&#xff0c;还是在前人的基础上继续改进&#xff0c;都十分重要&#xff0c;本文为你介绍如何在github上面找到好的项目&#xff08;gitee同理&#xff09; 关注活跃大牛 GitHu…

ARM架构(二)—— arm v7-a/v8/v9寄存器介绍

1、ARM v7-A寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样&#xff0c; 通用寄存器&#xff1a;31个 1.2 程序状态寄存器 CPSR是程序状态毒存器&#xff0c;保存条件标志位&#xff0c;中断禁止位&#xff0c;当前处理器模式等控制和状态位。每种异常模式下还存在SPS…