当前位置: 首页 > news >正文

Markdown类图之继承、实现、关联、依赖、组合、聚合总结(十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解Markdown类图之继承、实现、关联、依赖、组合、聚合的区别?以及如何使用。

2.Markdown类图继承、实现、关联、依赖、组合、聚合的定义

  1. 继承(Inheritance):一种类与类之间的关系,表示一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承可以实现代码的重用和扩展。

  2. 实现(Implementation):一种类与类之间的关系,表示一个类实现了另一个类定义的接口或协议。实现关系用于描述类之间的约定和契约,确保实现类具有指定的方法和行为。

  3. 关联(Association):一种类与类之间的关系,表示两个类之间的联系和连接。关联关系是对象之间最普遍和常见的关系,可以是单向的、双向的、一对一的、一对多的、多对多的。

  4. 依赖(Dependency):一种类与类之间的关系,表示一个类在执行过程中需要另一个类的协助或依赖。依赖关系通常以参数、返回值、局部变量等方式表现。

  5. 组合(Composition):一种类与类之间的关系,表示一个类由其他类组合而成,并且组合的类不能独立存在。组合关系是一种强关联关系,一旦组合的类不存在,则整个类也不存在。

  6. 聚合(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类图之继承、实现、关联、依赖、组合、聚合总结(十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

@MultipartConfig注解

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

Python并发编程简介

1、Python对并发编程的支持 多线程: threading, 利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成多进程: multiprocessing, 利用多核CPU的能力&#xff0c;真正的并行执行任务异步IO: asyncio,在单线程利用CPU和IO同时执行的原理&#xff0c;实现函数异步执行使用Lo…...

WebSocket介绍及部署

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09;。 WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;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))输出为&#xff1a; tensor(36.) …...

睿伴科创上线了

Robotutor睿伴&#xff0c;一个专业的青少儿编程科创教育品牌和科创服务平台。 Robotutor睿伴拥有一个超过5年的青少儿编程科创教育团队&#xff0c;积累了丰富的课程研发&#xff0c;教学服务和赛事辅导经验。并和上海多所知名高校、上海市计算机学会、上海青少年科学社等开展…...

域名抢注和域名注册

随着互联网的发展&#xff0c;域名已经成为了企业和个人在网络上展示自己的重要标志。如何获得一段好记、易拼写、有意义的域名&#xff0c;是很多人都面临的问题。本文将介绍域名抢注和域名注册的相关内容&#xff0c;并推荐ym.qqmu.com这个可靠的域名注册平台。 一、什么是域…...

【20】c++设计模式——>组合模式

组合模式定义 C组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;他允许将对象组合成树形结构来表示“部分-整体”的层次结构&#xff1b;在组合模式中有两种基本类型的对象&#xff1a;叶子对象和组合对象&#xff0c;叶子对象时没有子对象…...

Jetpack:004-如何使用文本组件

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

JVM(八股文)

目录 一、JVM简介 二、JVM中的内存区域划分 三、JVM加载 1.类加载 1.1 加载 1.2 验证 1.3 准备 1.4 解析 1.5 初始 1.6 总结 2.双亲委派模型 四、JVM 垃圾回收&#xff08;GC&#xff09; 1.确认垃圾 1.1 引用计数 1.2 可达性分析&#xff08;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&#xff1a; 截图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单</title></head><body><table style"background-color:red" bo…...

详解一典型的反激式开关电源方案

理解一个单端反激式开关电源方案&#xff1a; 1、抛出问题&#xff1a; 如图&#xff0c;在某系统方案上看到下图所示的单端反激式开关电源方案。 2、解析问题&#xff1a; 2.1、乍一看&#xff1a; 典型的AC-DC电路&#xff0c;考虑了安规及过压过流保护&#xff0c;如&am…...

AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型)

AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型) 基带处理&#xff08;Baseband Processing&#xff09;是一种信号处理技术&#xff0c;用于在通信系统中处理和调制基带信号。基带信号是指未经过调制的信号&#xff0c;通常包含原始数…...

阿里云上了新闻联播

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 阿里新任的CEO吴泳铭上央视新闻联播了! 在昨天的新闻联播里&#xff0c;出席科技座谈会&#xff0c;有一个特别镜头&#xff0c;出现了阿里新任CEO吴泳铭的镜头。 这个信号意义明显&#xff0c;我…...

算法练习12——跳跃游戏

LeetCode 55 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 贪…...

Java架构师系统架构设计服务拆分

目录 1 服务拆分和子系统模块拆分1.1 服务化架构的优势2 描绘系统蓝图里面的详解服务2.1 为什么拆分服务3 服务拆分的基本要求3.1 服务功能是自包含的3.2 服务呢应该具备独立性和专业性3.3 服务是无状态的3.4 服务之间采用轻量级的通讯机制4 服务拆分的基本方法4.1 按业务边界拆…...

通用任务批次程序模板

通用批次任务模板 我们总会遇到需要使用批次任务处理问题的场景&#xff0c;任务有很多不同类型的任务&#xff0c;同时这些任务可能都有大致相同&#xff0c;甚至抽象出来共同的执行阶段状态。 任务的执行肯定无法保证一帆风顺&#xff0c;总会在某个时间阶段被打断&#xff…...

Rust专属开发工具——RustRover发布

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

数据结构:链表(1)

顺序表的优缺点 缺点&#xff1a; 1.插入数据必须移动其他数据&#xff0c;最坏情况下&#xff0c;就是插入到0位置。时间复杂度O(N) 2.删除数据必须移动其他数据&#xff0c;最坏情况下&#xff0c;就是删除0位置。时间复杂度O(N) 3.扩容之后&#xff0c;有可能会浪费空间…...

软件测试之概念篇2(瀑布模型、螺旋模型、增量模型和迭代模型、敏捷模型,V模型、W模型)

目录 开发模型 &#xff08;1&#xff09;瀑布模型 &#xff08;2&#xff09;螺旋模型 &#xff08;3&#xff09;增量模型和迭代模型 &#xff08;4&#xff09;敏捷模型 &#xff08;5&#xff09;测试模型&#xff08;V模型、W模型&#xff09; V模型 W模型 开发模型…...

【【萌新的SOC学习之重新起航SOC】】

萌新的SOC学习之重新起航SOC ZYNQ PL 部分等价于 Xilinx 7 系列 FPGA PS端&#xff1a;Zynq 实际上是一个以处理器为核心的系统&#xff0c;PL 部分可以看作是它的一个外设。 我们可以通过使用AXI(Advanced eXtensible Interface)接口的方式调用 IP 核&#xff0c;系统通过 AX…...

ElasticSearch 学习7 集成ik分词器

网上找了一大堆&#xff0c;很多都介绍的不详细&#xff0c;开始安装完一直报错找不到plugin-descriptor.properties&#xff0c;有些懵这个东西不应该带在里面吗&#xff0c;参考了一篇博客说新建一个这个&#xff0c;新建完可以启动&#xff0c;但是插入索引数据会报错找不到…...

[NewStarCTF 2023 公开赛道] week1

最近没什么正式比赛&#xff0c;都是入门赛&#xff0c;有moectf,newstar,SHCTF,0xGame都是漫长的比赛。一周一堆制。 这周newstar第1周结束了&#xff0c;据说py得很厉害&#xff0c;第2周延期了&#xff0c;什么时候开始还不一定&#xff0c;不过第一周已经结束提交了&#…...

ThreeJS-3D教学六-物体位移旋转

之前文章其实也有涉及到这方面的内容&#xff0c;比如在ThreeJS-3D教学三&#xff1a;平移缩放物体沿轨迹运动这篇中&#xff0c;通过获取轨迹点物体动起来&#xff0c;其它几篇文章也有旋转的效果&#xff0c;本篇我们来详细看下&#xff0c;另外加了tween.js知识点&#xff0…...

BC v1.2充电规范

1 JEITA Reference to https://www.mianbaoban.cn/blog/post/169964 符合 JEITA 规范的锂离子电池充电器解决方案 2 Battery Fuel Gauge 2.1 Cycle Count&#xff08;充放电循环次数&#xff09; 此指令回传一只读字段&#xff0c;代表电芯组已经历的完整充放电循环数。当放电容…...

判断一个整数是否回文

回文数字的定义&#xff1a;第一位和最后一位相等&#xff0c;第二位和倒数第二位相等...依次类推&#xff0c;比如1221,12321等等&#xff0c;也就是说一个数字如果是回文&#xff0c;那么将它反转之后&#xff0c;一定和原来的值相等 解法一&#xff1a;投机取巧&#xff0c…...

【广州华锐互动】车辆零部件检修AR远程指导系统有效提高维修效率和准确性

在快速发展的科技时代&#xff0c;我们的生活和工作方式正在被重新定义。这种变化在许多领域都有所体现&#xff0c;尤其是在汽车维修行业。近年来&#xff0c;AR&#xff08;增强现实&#xff09;技术的进步为这个行业带来了前所未有的可能性。通过将AR技术与远程协助系统相结…...

简单实现接口自动化测试(基于python+unittest)

简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手&#xff0c;一步步调整优化接口调用&#xff0c;以及增加基本的结果判断&#xff0c;讲解Python自带的Unittest框架调用&#xff0c;期望各位可以通过本文对接口自动化测试有一个大致的了解。 引言 为什么要…...