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开发环境提…...
Boss-Key终极指南:Windows窗口隐藏与隐私保护完整解决方案
Boss-Key终极指南:Windows窗口隐藏与隐私保护完整解决方案 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在数字化办公环境中…...
基于Claude API构建本地化智能对话应用栈:从架构设计到生产部署
1. 项目概述与核心价值最近在尝试构建一个基于Claude API的本地化应用栈时,我发现了dtannen的claude-stacks项目。这本质上不是一个单一的应用程序,而是一个精心设计的、模块化的技术栈蓝图。它旨在为开发者提供一个快速启动和运行Claude API应用的完整解…...
基于Claude的AI编程助手:从代码生成到自动化审查的全流程实践
1. 项目概述:当Claude遇上代码,一个全能型AI编程助手的诞生最近在GitHub上闲逛,发现了一个挺有意思的项目,叫“everything-claude-code”。光看名字,你可能会觉得这又是一个普通的AI代码生成工具,但实际深入…...
浏览器插件实现AI提示词无缝集成:提升对话效率的工程实践
1. 项目概述与核心价值最近在折腾AI工具链的时候,发现了一个挺有意思的GitHub项目:fatihsolhan/prompts-chat-extension。乍一看名字,你可能会觉得这又是一个“提示词管理”或者“聊天增强”的浏览器插件,市面上这类工具已经多如牛…...
DeepSeek Chat功能测试深度复盘(98.7%覆盖率背后的3个致命盲区)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek Chat功能测试深度复盘总览 DeepSeek Chat 作为开源大模型对话系统的重要落地形态,其功能稳定性、响应一致性与上下文理解能力在真实场景中面临多重压力考验。本次复盘覆盖 127 次跨…...
初创团队如何借助 Taotoken 的 Token Plan 有效控制大模型使用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何借助 Taotoken 的 Token Plan 有效控制大模型使用成本 对于初创团队和独立开发者而言,在项目早期验证想法…...
智能车竞赛实战:从PID控制到图像识别的嵌入式系统开发全解析
1. 项目概述:一场硬核的嵌入式综合实战“飞思卡尔杯”智能车竞赛,这个名字对于很多电子、自动化、计算机相关专业的同学来说,绝对是一个如雷贯耳的存在。它不仅仅是一个比赛,更像是一个集机械、电子、控制、算法于一体的微型“工业…...
电源扰动测试与功率分析仪应用实践
1. 电源扰动测试的核心价值与行业需求在电力电子产品的研发验证阶段,电源扰动测试是评估设备可靠性的关键环节。我曾在某工业电源模块项目中,因忽视电源扰动测试导致产品在东南亚市场出现大规模故障——当地电网电压频繁跌落至170V,使得我们的…...
Go语言系统编程与命令行工具
Go语言系统编程与命令行工具 一、命令行参数解析 Go语言提供了多个标准库来处理命令行参数,包括flag包和os包。 使用flag包 package mainimport ("flag""fmt" )func main() {// 定义命令行参数name : flag.String("name", "Gues…...
中小团队在ubuntu服务器利用taotoken管理多项目api密钥与用量
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小团队在 Ubuntu 服务器利用 Taotoken 管理多项目 API 密钥与用量 在 Ubuntu 服务器上运行多个 AI 实验项目是许多中小型技术团队…...
