UML之在Markdown中使用Mermaid绘制类图

1.UML概述

UML(Unified modeling language UML)统一建模语言,是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路。

  • 类图是描述类与类之间的关系的,是UML图中最核心的。
  • 类图的是用于描述系统中类(对象)本身的组成和类(对象)之间的各种静态关系。
  • 类关系涉及 依赖、关联、聚合、组合、实现、泛化(继承) 这六种关系,耦合度依次递增。

2.Mermaid 类图

mermaid地址:Mermaid Github

mermaid是一种JavaScript库, 可以用于生成流程图、序列图、甘特图等各种图表。由于其简单易用、功能强大,越来越多的人开始使用它来创建图表。

本人大部分情况下是在Markdown文档中使用Mermaid,加上IDEA也可以直接导出Mermaid格式的类图,整理笔记比较方便。

因此本文档的软件环境为:IDEA为代码编辑器、Obsidian为Markdown编辑器。以此为参考。

本文主要演示Mermaid类图的画法。

一些关键字如下:

关键字定义
classDiagram定义类图
class{}定义一个类,属性和方法写在{}内,如无内容,则不写{}
+权限:公共
-权限:私有
#权限:保护
~权限:包 / 内部
$静态

Markdown中格式如下:

在这里插入图片描述

3.类属性与方法

  • 类:格式:class 类名{} ,如果类内容为空,则省略{}。比如class Objectclass Person{}
  • 属性: 格式:权限 类型 属性名,比如- String name
  • 方法:格式:权限 方法名(参数类型) 返回值类型 ,比如+ goSchool(Bus) boolean
classDiagram
class Student{- String name+ Integer age+ goSchool(Bus) boolean- goHome() String# doHomework() Object[]~ examine() List~string~
}
Student
- String name
+ Integer age
+goSchool(Bus)
-goHome()
#doHomework()
~examine()

4.类注释

注释有两种:

  • 一种是表明类性质的标记型注释;
  • 一种是单纯的注释,写在%%后面,解析器会自动忽略该行内容,比如:
classDiagram
%% 这是一个注释,解析器自动忽略
class Student

特殊标记包括:

  • <<interface>> 接口
  • <<abstract>> 抽象类
  • <<service>> 服务等级
  • <<enumeration>> 枚举

定义方式有以下两种:

  • 方式1:定义在类之后的单独一行
classDiagram
class ICourse{+ String name	+ select() Boolean
}
<<interface>> ICourse
«interface»
ICourse
+ String name
+select()
  • 方式2:与类一起定义在嵌套结构中
classDiagram
class Gender{<<enumeration>>MALEFEMALE
}
«enumeration»
Gender
MALE
FEMALE

5.类关系(重要)

常用的类关系有以下几种,按照耦合度由低到高排序:

关系图形mermaid符号说明
依赖在这里插入图片描述..>只要在类中引用了另一个类的类,那么它们之间就是依赖关系。
比如类A中有方法m,方法m的返回值类型为类B,此时,类A与类B依赖。
关联在这里插入图片描述-->相较于依赖关系,关联关系的依赖性更高。
比如类A中有成员属性b,此时类A与类B关联。
聚合在这里插入图片描述--o关联性是更强的关联关系。是整体和个体的关系。但二者可分割。
比如类A中有成员属性b,并且属性b通过setter赋值,此时二者就是聚合关系。
组合在这里插入图片描述*--关联性是更强的关联关系。是整体和部分的关系。二者不可分割。
比如类A中有成员属性b,并且属性b是在类A的构造方法中赋值,此时二者就是组合关系。
实现在这里插入图片描述…|>类A实现了类B(接口或抽象类)
泛化
(继承)
在这里插入图片描述–|>类A继承了类B

还包括一些不常用的,比如:

  • -- 链接(实线)
  • .. 链接(虚线)

表示方式:

 classDiagramclassA --|> classB : InheritanceclassC --* classD : CompositionclassE --o classF : AggregationclassG --> classH : AssociationclassI -- classJ : Link(Solid)classK ..> classL : DependencyclassM ..|> classN : RealizationclassO .. classP : Link(Dashed)
Inheritance
Composition
Aggregation
Association
Link(Solid)
Dependency
Realization
Link(Dashed)
classA
classB
classC
classD
classE
classF
classG
classH
classI
classJ
classK
classL
classM
classN
classO
classP

6.关系的基数 / 多重性

类图中的多重性或基数表示一个类的实例数,这些实例可以链接到另一个类的实例。

比如,学生与班级,一个学生对应一个班级,但一个班级对应多个学生。

选项有:

代码说明
1只有1个
0…10或1个
1…*1个或多个
*多个
nn个(n>1)
0…n0个到n个(n>1)
1…n1个到n个(n>1)

表示方式:

classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
1
*
1
1..*
Contains
many
Customer
Ticket
Student
Course
Galaxy
Star

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

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

相关文章

第二十四回 王婆计啜西门庆 淫妇药鸩武大郎-Numpy索引和切片操作示例

郓哥被王婆打了&#xff0c;就去找武大郎。将情况一说&#xff0c;两人商定去抓奸。一天武大郎只做了两三扇炊饼&#xff0c;约好了时间&#xff0c;郓哥进去顶住大门不让王婆关&#xff0c;武大郎直接跑进去&#xff0c;西门庆刚开始躲到床底下&#xff0c;后被潘金莲提醒&…

C++——stl,string容器详解

目录 1.string是什么 2.string的构造 代码示例&#xff1a; 3.string的赋值操作 代码示例&#xff1a; 4.string字符串拼接 ​编辑 代码示例&#xff1a; 5.string查找和替换 代码示例&#xff1a; 6.字符串比较 代码示例&#xff1a; 7.string字符存取 代码示例…

springboot与Elasticsearch版本兼容对比

首先 大家在下载 Elasticsearch 时 最好先弄清楚版本 因为 如果 Spring Boot 版本 不兼容 Elasticsearch 那就是到头一场空了 Elasticsearch 版本 6.x 可以兼容 Spring Boot 2.x Elasticsearch 版本 7.x 可以兼容 Spring Boot 2.x 3.x 4x Elasticsearch 版本 7.x 以及 8.x 可以…

车位检测,YOLOV8,OPENCV调用

车位检测YOLOV8NANO,opencv调用 车位检测&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID

CodeFuse-VLM 开源,支持多模态多任务预训练/微调

CodeFuse-MFT-VLM 项目地址&#xff1a;https://github.com/codefuse-ai/CodeFuse-MFT-VLM CodeFuse-VLM-14B 模型地址&#xff1a;CodeFuse-VLM-14B CodeFuse-VLM框架简介 随着huggingface开源社区的不断更新&#xff0c;会有更多的vision encoder 和 LLM 底座发布&#x…

记一次VulnStack渗透

信息收集 netdiscover的主机发现部分不再详解&#xff0c;通过访问端口得知20001-2003端口都为web端口&#xff0c;所以优先考虑从此方向下手 外网渗透 GetShell Struct漏洞 访问2001端口后&#xff0c;插件Wappalyzer爬取得知这是一个基于Struct的web站点&#xff0c;直接…

基于深度置信网络的多模态过程故障评估方法及应用

源自&#xff1a;自动化学报 作者&#xff1a;张凯, 杨朋澄, 彭开香, 陈志文 “人工智能技术与咨询” 发布 摘 要 传统的多模态过程故障等级评估方法对模态之间的共性特征考虑较少, 导致当被评估模态故障信息不充分时, 评估的准确性较低. 针对此问题, 首先, 提出一种共性–…

最新模型VMamba:颠覆视觉Transformer,下一代主流Backbone?

论文标题&#xff1a; VMamba: Visual State Space Model 论文作者&#xff1a; Yue Liu, Yunjie Tian, Yuzhong Zhao, Hongtian Yu, Lingxi Xie, Yaowei Wang, Qixiang Ye, Yunfan Liu 1. 摘要 卷积神经网络&#xff08;CNN&#xff09;与视觉Transformer&#xff08;ViT…

【数据结构与算法】(11)基础数据结构 之 二叉树 二叉树的存储与遍历及相关示例 详细代码讲解

目录 2.10 二叉树1) 存储2) 遍历广度优先深度优先递归实现非递归实现 习题E01. 前序遍历二叉树-Leetcode 144E02. 中序遍历二叉树-Leetcode 94E03. 后序遍历二叉树-Leetcode 145E04. 对称二叉树-Leetcode 101E05. 二叉树最大深度-Leetcode 104E06. 二叉树最小深度-Leetcode 111…

Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server

问题描述 写了一个Django项目&#xff0c;部署到云主机后&#xff0c;访问发现图片无法访问&#xff0c;报错The requested resource was not found on this server 图片是一个词云图&#xff0c;根据爬虫爬取的信息生成的&#xff0c;根据爬取的信息会改变&#xff0c;所以没…

宠物空气净化器是宠物家庭必备?宠物空气净化器改善空气质量吗?

作为一个长期养猫的猫奴&#xff0c;我们都深刻体会到猫毛问题的困扰。然而&#xff0c;我们需要明确一点&#xff0c;肉眼可见的猫毛可以通过扫把或拖把清理掉。真正令人担忧的是那些肉眼不可见的浮毛、粉尘和微小颗粒&#xff0c;它们在无形中对人和宠物的健康环境造成影响。…

车载测试中:如何处理 bug

一&#xff1a;Jira 提交 bug 包含那些内容 二&#xff1a;如何处理现上 bug 三&#xff1a;车载相关的 bug 如何定位 四&#xff1a;遇到 bug &#xff0c;复现不出来怎么办 五&#xff1a;bug 的处理流程 一&#xff1a;Jira 提交 bug 包含那些内容二&#xff1a;如何处理现上…