Markdown类图之继承、实现、关联、依赖、组合、聚合总结(十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解Markdown类图之继承、实现、关联、依赖、组合、聚合的区别?以及如何使用。
2.Markdown类图继承、实现、关联、依赖、组合、聚合的定义
-
继承(Inheritance):一种类与类之间的关系,表示一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承可以实现代码的重用和扩展。
-
实现(Implementation):一种类与类之间的关系,表示一个类实现了另一个类定义的接口或协议。实现关系用于描述类之间的约定和契约,确保实现类具有指定的方法和行为。
-
关联(Association):一种类与类之间的关系,表示两个类之间的联系和连接。关联关系是对象之间最普遍和常见的关系,可以是单向的、双向的、一对一的、一对多的、多对多的。
-
依赖(Dependency):一种类与类之间的关系,表示一个类在执行过程中需要另一个类的协助或依赖。依赖关系通常以参数、返回值、局部变量等方式表现。
-
组合(Composition):一种类与类之间的关系,表示一个类由其他类组合而成,并且组合的类不能独立存在。组合关系是一种强关联关系,一旦组合的类不存在,则整个类也不存在。
-
聚合(Aggregation):一种类与类之间的关系,表示一个类包含其他类的实例,而这些实例可以独立存在。聚合关系是一种弱关联关系,即使聚合的类不存在,包含类仍然可以存在。
区分这些类关系的关键在于理解它们的语义和用途。继承和实现关系是针对类之间的继承和接口实现关系,关联和依赖关系描述了类之间的联系和依赖关系,组合和聚合关系描述了类之间的整体与部分的关系。在设计类之间的关系时,需要根据实际需求和语义来选择适合的关系类型。
3.类图中的符号表示
4.Markdown类图继承、实现、关联、依赖、组合、聚合应用实例
1. 继承(Inheritance):表示一个类可以继承另一个类的属性和方法。继承关系用于实现类的层次结构和代码的重用。子类继承父类的属性和方法,并可以扩展或重写它们。示例代码:
class Animal {// 父类Animal的属性和方法
}class Dog extends Animal {// 子类Dog继承了父类Animal的属性和方法,并可以扩展或重写它们
}
2. 实现(Implementation):表示一个类实现了另一个类定义的接口或协议。实现关系用于描述类之间的约定和契约,确保实现类具有指定的方法和行为。示例代码:
interface Drawable {void draw();
}class Circle implements Drawable {// 类Circle实现了接口Drawable的方法draw()
}
3. 关联(Association):表示两个类之间的连接和关系。关联关系可以是单向的、双向的,一对一的、一对多的或多对多的。关联关系通常是通过类之间的字段或参数来实现。示例代码:
class Car {// 类Car与类Engine之间存在关联关系,Car拥有一个Engineprivate Engine engine;
}
4. 依赖(Dependency):表示一个类在执行过程中需要另一个类的协助或依赖。依赖关系通常是通过类之间的方法参数或局部变量来实现。示例代码:
class Car {// 类Car依赖于类Engine的方法start()public void start(Engine engine) {engine.start();}
}
5. 组合(Composition):表示一个类由其他类组合而成,并且组合的类不能独立存在。组合关系是一种强关联关系,一旦组合的类不存在,则整个类也不存在。示例代码:
class Car {// 类Car由类Engine组合而成,Car拥有一个Engineprivate Engine engine;
}
6. 聚合(Aggregation):表示一个类包含其他类的实例,而这些实例可以独立存在。聚合关系是一种弱关联关系,即使聚合的类不存在,包含类仍然可以存在。示例代码:
class Department {// 类Department包含多个类Employee的实例,Employee可以独立存在private List<Employee> employees;
}
5.说明
举例说明:
1.继承:
定义:是一种继承关系,表示子类继承父类的所有特征和行为。
表示:使用带三角箭头的实线,箭头指向父类。示例:
Animal <|-- Person
Animal <|-- Dog2.实现
定义:类实现接口或者抽象类,表示类是接口所有特征和行为的实现
表示:带三角箭头的虚线,箭头指向接口或抽象类。
示例:
Person <|.. Man
Person <|.. Woman3.组合
定义:是一种整体与部分的关系,但部分不能离开整体而单独存在,随整体的创建而创建,称为强聚合(也属于关联关系的一种),要求代表整体的对象负责代表部分的对象的生命周期。
表示:带实心菱形的实线,实心菱形指向整体。示例:
Company *-- Department4.聚合
定义:是一种整体与部分的关系,且部分可以离开整体而单独存在,是关联关系的一种,强关联关系。关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
表示:带空心菱形的实现,空心菱形指向整体。示例:
Car *-- Wheel5.关联
定义:是一种拥有的关系,它使一个类知道另一个类的属性和方法;关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
表示:带普通箭头的实心线,指向被拥有者。
示例:老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。示例:
Teacher -- Student
Student <-- Course6.依赖
定义:是一种使用关系,即一个类的实现需要另一个类的协助。(一个公司可以有一个或多个员工,但一个员工只能为一家公司工作。)
表示:带普通箭头的虚线,箭头指向被使用者。示例:
Oxygen <.. Animal
相关文章:

Markdown类图之继承、实现、关联、依赖、组合、聚合总结(十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

@MultipartConfig注解
前言: 在学习Javaweb的Servlet文件上传和下载的过程中,我们会遇到一个特殊的注解---MultipartConfig。 MultipartConfig的适用情况: 1.文件上传: 当您的应用程序需要接收用户上传的文件时,可以在相应的 Servlet 上使用 Multipart…...

Python并发编程简介
1、Python对并发编程的支持 多线程: threading, 利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成多进程: multiprocessing, 利用多核CPU的能力,真正的并行执行任务异步IO: asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行使用Lo…...
WebSocket介绍及部署
WebSocket是一种在单个TCP连接上进行全双工通信的协议,其设计的目的是在Web浏览器和Web服务器之间进行实时通信(实时Web)。 WebSocket协议的优点包括: 1. 更高效的网络利用率:与HTTP相比,WebSocket的握手…...

自动求导,计算图示意图及pytorch实现
pytorch实现 x1 torch.tensor(3.0, requires_gradTrue) y1 torch.tensor(2.0, requires_gradTrue) a x1 ** 2 b 3 * a c b * y1 c.backward() print(x1.grad) print(y1.grad) print(x1.grad 6 * x1 * y1) print(y1.grad 3 * (x1 ** 2))输出为: tensor(36.) …...
睿伴科创上线了
Robotutor睿伴,一个专业的青少儿编程科创教育品牌和科创服务平台。 Robotutor睿伴拥有一个超过5年的青少儿编程科创教育团队,积累了丰富的课程研发,教学服务和赛事辅导经验。并和上海多所知名高校、上海市计算机学会、上海青少年科学社等开展…...
域名抢注和域名注册
随着互联网的发展,域名已经成为了企业和个人在网络上展示自己的重要标志。如何获得一段好记、易拼写、有意义的域名,是很多人都面临的问题。本文将介绍域名抢注和域名注册的相关内容,并推荐ym.qqmu.com这个可靠的域名注册平台。 一、什么是域…...

【20】c++设计模式——>组合模式
组合模式定义 C组合模式(Composite Pattern)是一种结构型设计模式,他允许将对象组合成树形结构来表示“部分-整体”的层次结构;在组合模式中有两种基本类型的对象:叶子对象和组合对象,叶子对象时没有子对象…...

Jetpack:004-如何使用文本组件
文章目录 1. 概念介绍2. 使用方法2.1 通用参数2.2 专用参数 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack组件在布局中的对齐方式,本章回中主要介绍文 本组件的使用方法。闲话休提,让我们一起Talk Android Jetpack吧 1. 概念介绍 我们在本章…...

JVM(八股文)
目录 一、JVM简介 二、JVM中的内存区域划分 三、JVM加载 1.类加载 1.1 加载 1.2 验证 1.3 准备 1.4 解析 1.5 初始 1.6 总结 2.双亲委派模型 四、JVM 垃圾回收(GC) 1.确认垃圾 1.1 引用计数 1.2 可达性分析(Java 采用的方案&a…...
C#WPF标记扩展应用实例
本文介绍C#WPF标记扩展应用实例 一、标记扩展 标记扩展是一个 XAML 语言概念。 用于提供特性语法的值时,大括号({ 和 })表示标记扩展用法。 此用法指示 XAML 处理不要像通常那样将特性值视为文本字符串或者可转换为字符串的值。就是类似于值用变量的意思。 WPF 应用编程中…...

四维曲面如何画?matlab
clc; clear all [theta,phi]meshgrid(linspace(0,pi,50),linspace(0,2*pi,50)); zcos(theta); xsin(theta).*cos(phi); ysin(theta).*sin(phi); f-1*((x.*y).2(y.*z).2(z.*x).^2); surf(sin(theta).*cos(phi).*f,sin(theta).*sin(phi).*f,cos(theta).*f,f) 结果...

软件培训测试高级工程师多测师肖sir__html之作业11
html之作业 案例1: 截图: 代码: <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单</title></head><body><table style"background-color:red" bo…...

详解一典型的反激式开关电源方案
理解一个单端反激式开关电源方案: 1、抛出问题: 如图,在某系统方案上看到下图所示的单端反激式开关电源方案。 2、解析问题: 2.1、乍一看: 典型的AC-DC电路,考虑了安规及过压过流保护,如&am…...
AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型)
AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型) 基带处理(Baseband Processing)是一种信号处理技术,用于在通信系统中处理和调制基带信号。基带信号是指未经过调制的信号,通常包含原始数…...

阿里云上了新闻联播
我是卢松松,点点上面的头像,欢迎关注我哦! 阿里新任的CEO吴泳铭上央视新闻联播了! 在昨天的新闻联播里,出席科技座谈会,有一个特别镜头,出现了阿里新任CEO吴泳铭的镜头。 这个信号意义明显,我…...
算法练习12——跳跃游戏
LeetCode 55 跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 贪…...
Java架构师系统架构设计服务拆分
目录 1 服务拆分和子系统模块拆分1.1 服务化架构的优势2 描绘系统蓝图里面的详解服务2.1 为什么拆分服务3 服务拆分的基本要求3.1 服务功能是自包含的3.2 服务呢应该具备独立性和专业性3.3 服务是无状态的3.4 服务之间采用轻量级的通讯机制4 服务拆分的基本方法4.1 按业务边界拆…...
通用任务批次程序模板
通用批次任务模板 我们总会遇到需要使用批次任务处理问题的场景,任务有很多不同类型的任务,同时这些任务可能都有大致相同,甚至抽象出来共同的执行阶段状态。 任务的执行肯定无法保证一帆风顺,总会在某个时间阶段被打断ÿ…...

Rust专属开发工具——RustRover发布
JetBrains最近推出的Rust集成开发工具——RustRover已经发布,官方网站:RustRover: Rust IDE by JetBrains JetBrains出品过很受欢迎的开发工具IntelliJ IDEA、PyCharm等。 RustRover优势 Rust集成环境,根据向导可自动下载安装rust开发环境提…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...