PlantUML绘制UML图教程

UML(Unified Modeling Language)是一种通用的建模语言,广泛用于软件开发中对系统进行可视化建模。PlantUML是一款强大的工具,通过简单的文本描述,能够生成UML图,包括类图、时序图、用例图等。PlantUML是一款强大的工具,用于绘制UML图和其他类型的图表,包括系统架构图。在本教程中,我们将使用PlantUML插件在VSCode中绘制系统架构图。


一、PlantUML基本语法

PlantUML是一种使用文本描述生成UML图的工具,其语法简洁而直观。以下是对你提供的代码的PlantUML语法总结:

1、定义类

使用 !define RECTANGLE class 定义一个类。类的名称放在花括号内,类的成员通过 + 符号表示。

!define RECTANGLE class RECTANGLE "类名" { +成员1() +成员2() }

2、绘制类之间的关系

使用箭头表示不同类之间的关系。例如,A -> B: 消息表示A类向B类发送消息。

A -> B: 消息

3、绘制类之间的关联关系

使用->箭头表示关联关系,如A -> B表示A关联到B。

A -> B

4、创建实例:

使用类定义语法,如RECTANGLE "实例名" {},定义一个类的实例。

RECTANGLE "实例名" { }

5、绘制时序

使用->箭头表示时序,如 A -> B: 操作表示A执行操作后,将消息传递给B。

A -> B: 操作

6、注释

使用'符号表示单行注释。

' 这是注释

7、隐藏脚注

使用hide footbox命令隐藏脚注。

hide footbox

8、定义集合

使用collections命令定义集合,如collections Harmony设备 as B #lightblue。

collections Harmony设备 as B #lightblue

9、定义队列

使用queue命令定义队列,如queue 云服务器 as C #orange。

queue 云服务器 as C #orange

10、定义数据库

使用database命令定义数据库,如database 云数据库 as D #blue。

database 云数据库 as D #blue

11、定义实体

使用entity命令定义实体,如entity 开发板 as F #lightgreen。

entity 开发板 as F #lightgreen

12、添加注释

使用note over命令添加注释,如note over F : 环境更新事件。

note over F : 环境更新事件

13、激活组件

使用activate命令激活组件的执行状态,如activate F #lightgreen。

activate F #lightgreen

14、绘制同步关系

使用-[#color]>箭头表示同步关系,如F-[#lightgreen]>G : 请求更新表示开发板向数据库发起请求更新。

F-[#lightgreen]>G : 请求更新

15、停用组件

使用deactivate命令停用组件,如deactivate G。 

F-[#lightgreen]>C : 请求同步云端

通过这些基本的语法元素,开发者可以利用PlantUML轻松描述和绘制各种UML图,从而更好地可视化和理解系统的结构和交互关系。


二、实例演示

1、安装VSCode

首先,确保你已经安装了Visual Studio Code。


2、安装PlantUML插件

然后,按照以下步骤安装PlantUML插件:

  1. 打开VSCode,进入Extensions(Extensions图标或通过快捷键Ctrl+Shift+X)。
  2. 搜索"PlantUML"并安装"PlantUML"插件。


3、编写PlantUML代码

使用PlantUML的语法,我们可以描述系统架构并绘制图表。

① 绘制流程图

以下是我绘制的一个流程图的PlantUML代码:

@startuml

!define RECTANGLE class

RECTANGLE "EVB RK3568\n开发板" {
}

RECTANGLE "Node.js和\nNode-RED" {
  +getData()
  +processData()
}

RECTANGLE "SQLite\n数据库模块" {
  +storeData()
}

RECTANGLE "Opcua\n数据获取" {
  +fetchData()
}

RECTANGLE "MQTT" {
  +publishData()
}

RECTANGLE "Windows10+DevEco Studio\n用户界面" {
  +displayData()
  +setThreshold()
}

RECTANGLE "服务器" {
  +receiveData()
  +triggerAlarm()
}

"EVB RK3568\n开发板" -> "Node.js和\nNode-RED": 传感器数据
"Node.js和\nNode-RED" -> "SQLite\n数据库模块": storeData()
"Node.js和\nNode-RED" -> "Opcua\n数据获取": fetchData()
"Node.js和\nNode-RED" -> "MQTT": publishData()
"MQTT" -> "服务器": receiveData()

"服务器" -> "Windows10+DevEco Studio\n用户界面": displayData()
"Windows10+DevEco Studio\n用户界面" -> "服务器": setThreshold()

@enduml

代码编写完成后,点击 Alt + D,可以绘制成图。

绘制出的成图如下: 


 ② 绘制时序图1

以下是我绘制的一个时序图的PlantUML代码:

@startuml
hide footbox
collections Harmony设备 as B #lightblue
queue 云服务器 as C #orange
database 云数据库 as D #blue
queue 嵌入式上层应用 as E #skyblue
entity 开发板 as F #lightgreen
database SQLite as G #green

note over F : 环境更新事件
activate F #lightgreen
F-[#lightgreen]>G : 请求更新
activate G #green
G-[#green]>G : 提示结果
note over of G:操作成功
G-[#green]>F : 返回结果
deactivate G
F-[#lightgreen]>E : 更新显示
activate E #skyblue
deactivate E
F-[#lightgreen]>C : 请求同步云端
activate C #orange
C-[#orange]>D : 更改数据
deactivate C
activate D #blue
D-[#blue]>C : 返回结果
deactivate D
activate C #orange
C-[#orange]> F : 返回数据
deactivate C
deactivate F

@enduml

代码编写完成后,点击 Alt + D,可以绘制成图。

绘制出的成图如下: 


③ 绘制时序图2 

以下是我绘制的一个时序图的PlantUML代码:

@startuml
hide footbox
actor 用户 as A #grey
collections Harmony设备 as B #lightblue
queue 云服务器 as C #orange
database 云数据库 as D #blue
queue 嵌入式上层应用 as E #skyblue
entity 开发板 as F #lightgreen
database SQLite as G #green

activate A #grey
note over A : 用户查看操作
A-[#grey]>B : 查询事件
deactivate A
activate B #skyblue
B-[#lightblue]>C : 请求数据
deactivate B
activate C #orange
C-[#orange]>D : 查询
deactivate C
activate D #blue
D-[#blue]>C : 返回数据
deactivate D
activate C #orange
C-[#orange]>B : 返回数据
deactivate C
activate B #skyblue
B-[#skyblue]>A : 显示内容
deactivate B

activate A #grey
note over A : 用户更改操作
A-[#grey]>B : 更新事件
deactivate A
activate B #skyblue
B-[#skyblue]>C : 请求更新
deactivate B
activate C #orange
C-[#orange]>F : 请求更新
deactivate C
activate F #lightgreen
F-[#lightgreen]>G : 请求更新
deactivate F
activate G #green
G-[#green]>F : 返回结果
deactivate G
activate F #lightgreen
F-[#lightgreen]>C : 发送修改请求
deactivate F
activate C #orange
C-[#orange]>D : 更新数据
deactivate C
activate D #blue
D-[#blue]>C : 返回结果
deactivate D
activate C #orange
C-[#orange]>B : 返回结果
deactivate C
activate B #skyblue
B-[#skyblue]>A : 返回结果
deactivate B
activate A #grey
A-[#grey]>A : 提示结果
note over of A:操作成功
deactivate A


@enduml

代码编写完成后,点击 Alt + D,可以绘制成图。

绘制出的成图如下: 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端web入门第四天】01 复合选择器与伪类选择器

文章目录: 1. 复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器1.4 交集选择器(了解) 2.伪类选择器 2.1 伪类-文本2.2 伪类-超链接(拓展) 1. 复合选择器 什么叫复合选择器? 由两个或多个基础选择器,通过不同的方式组合而成。 复合选择器的作…

Python中使用opencv-python库进行颜色检测

Python中使用opencv-python库进行颜色检测 之前写过一篇VC中使用OpenCV进行颜色检测的博文,当然使用opencv-python库也可以实现。 在Python中使用opencv-python库进行颜色检测非常简单,首选读取一张彩色图像,并调用函数imgHSV cv2.cvtColor…

从REPR设计模式看 .NET的新生代类库FastEndpoints的威力

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 又到了一年年末,春节将至…

Android SDK 上传 Maven 喂奶级教程

最近领导给安排了个任务,让我把我们现有的一个 SDK 上传到 Maven 上去,方便客户直接用 gradle 依赖,不再需要拷贝 jar 和 so 了,此前我也看过一些相关的文章我想问题也不大,觉得工作量也就一两天的事情,主要…

深度学习在知识图谱问答中的革新与挑战

目录 前言1 背景知识2 基于深度学习改进问句解析模型2.1 谓词匹配2.2 问句解析2.3 逐步生成查询图 3 基于深度学习的端到端模型3.1 端到端框架3.2 简单嵌入技术 4 优势4.1 深入的问题表示4.2 实体关系表示深挖4.3 候选答案排序效果好 5 挑战5.1 依赖大量训练语料5.2 推理类问句…

【原创 附源码】Flutter海外登录--Tiktok登录最详细流程

最近接触了几个海外登录的平台,踩了很多坑,也总结了很多东西,决定记录下来给路过的兄弟坐个参考,也留着以后留着回顾。更新时间为2024年2月7日,后续集成方式可能会有变动,所以目前的集成流程仅供参考&#…

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 (都是傻瓜式安装),然后注册小程序账号: 拿到appid: ②简单通过demo使用微信开发者工具和…

Ribbon全方位解析:构建弹性的Java微服务

第1章 引言 大家好,我是小黑,咱们今天聊聊Ribbon,这货是个客户端负载均衡工具,用在Spring Cloud里面能让咱们的服务调用更加灵活和健壮。负载均衡,听起来挺高大上的,其实就是把外界的请求平摊到多个服务器上,避免某个服务器压力太大,其他的却在那儿闲着。 Ribbon的牛…

npm install express -g报错或一直卡着,亲测可解决

问题描述: 最近学习vue3前端框架,安装Node.js之后,在测试是否可行时,cmd窗口执行了:npm install express -g,发现如下图所示一直卡着不动,最后还报错了,网上找了好久,各…

Springboot根据环境读取application配置文件

目录 1. 首先创建两个不同配置文件 2. pom.xml 配置文件 3. 指定环境 4. 最后启动测试 1. 首先创建两个不同配置文件 分别为开发环境和生产环境 application-dev.properties 和 application-prod.properties application-dev.properties 配置为 1931 端口 application-pro…

12个最常用的matplotlib图例 !!

文章目录 1、折线图 2、散点图 3、直方图 4、柱状图 5、箱线图 6、热力图 7、饼图 8、面积图 9、等高线图 10、3D图 11、时间序列图 12、树状图 总结 1、折线图 折线图(Line Plot):用于显示数据随时间或其他连续变量的变化趋势。在实际项目中…

奇异果投屏的进化之路

笔者按:奇异果投屏伴随奇异果TV一路发展至2022年,日活用户已达300多万,用户和我们都对投屏的功能和性能提出了更多的诉求和更高要求,因此2022开始系统地对投屏功能和性能做了扩展和优化。本文立足于TV端,为大家介绍爱奇…

百家cms代审

环境搭建 源码链接如下所示 https://gitee.com/openbaijia/baijiacms 安装至本地后 直接解压到phpstudy的www目录下即可 接下来去创建一个数据库用于存储CMS信息。(在Mysql命令行中执行) 接下来访问CMS,会默认跳转至安装界面 数据库名称和…

spring boot(2.4.x 开始)和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 spring boot 2.4.x 版本之前通过 ConfigFileApplicationListener 加载配置 https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/mai…

ElasticSearch之search API

写在前面 本文看下查询相关内容,这也是我们在实际工作中接触的最多的,所以有必要好好学习下! 1:查询的分类 主要分为如下2类: 1:基于get查询参数的URI search 2:基于post body的request body search&am…

8868体育助力法甲巴黎圣日耳曼俱乐部 运作球员转会

法甲的巴黎圣日耳曼足球俱乐部是8868的体育助力球队之一,根据法国媒体RMC的消息,巴黎圣日尔曼仍然希望在一月份增强球队的后防实力。虽然之前球队已经从圣保罗引进了20岁的巴西中后卫卢卡斯-贝拉尔多,而这名小将也将会是巴黎圣日耳曼冬窗的一…

nodejs+vue高校实验室耗材管理系统_m20vy

用户功能: 登录后要有一个首页 比如:可以看见目前的耗材消耗记录,可做成图表菜单栏在左侧显示 1.个人信息管理 可以对基本信息进行修改,(修改密码时需要验证) 2.耗材管理(耗材信息) 普通用户可以查询当前相关耗材信息[…

Easy Excel动态表头的实现

步骤: 1.查找官方API文档理解实现 2.实现融入到代码里面 一:Easy Excel动态头实时生成头写入 动态头实时生成头写入 二:实现 目的:实现表头为,第一列是固定列,第二列为动态生成的时间段的每一天的日期…

【JAVA WEB】CSS

目录 CSS是什么? 基本语法规范 引入方式 内部样式表 行内样式表 外部样式表 常用选择器的种类 基础选择器 标签选择器 类选择器 id选择器 通配符选择器 复合选择器 后代选择器 伪类选择器 常用元素属性: 字体属性: 文本属性…

初始web服务器(并基于idea来实现无需下载的tomcat)

前言 前面学习了对应的http协议,我们知道了他是在网络层进行数据传输的协议,负责相应数据以及接收数据的规则,但是在人员开发后端的时候不仅仅需要你写io流进行数据传输,还需要你进行对应的tcp协议来进行数据打包发送http协议-CSD…