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

PlantUML入门教程:画时序图

软件工程中会用到各种UML图,例如用例图、时序图等。那我们能不能像写代码一样去画图呢?
今天推荐一款软件工程师的作图利器--PlantUML,它能让你用写代码的方式快速画出UML图。

一、什么是PlantUML?
PlantUML是一个允许你快速作出UML图的组件:

  • 序列图
  • 用例图
  • 类图
  • 对象图
  • 活动图(这里是传统的语法)。
  • 组件图
  • 部署图
  • 状态图
  • 时序图

也支持以下非UML图表:

  • JSON数据
  • YAML数据
  • Extended Backus-Naur Form (EBNF)图表
  • 网络图(nwdiag)
  • 线框图形界面或UI模拟图(盐)。
  • 架构图
  • 规范和描述语言(SDL)
  • Ditaa图
  • 甘特图
  • 思维导图
  • 工作分解结构图(WBS)
  • 用AsciiMath或JLaTeXMath符号进行数学计算
  • 实体关系图(IE/ER)。

此外:

  • 超链接和工具提示
  • 克里奥尔语:富文本、表情符号、unicode、图标
  • OpenIconic图标
  • Sprite图标
  • AsciiMath数学表达式

关于PlantUML的更多信息,可通过查阅PLantUML官网获取:
https://plantuml.com/zh/


二、如何使用PlantUML?
使用PlantUML画图有多种方式,一种是使用PlantUML在线编辑器,另一种是使用VSCode/PyCharm/IDEA等软件支持的插件来编写。
PlantUML在线编辑器:
http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

下面我们演示一个PlantUML画时序图例子:

@startuml
/'boundary  分界; control  控制器; entity  数据对象; database  数据库; collections  集合'/
'为了图标更加简洁,去掉底部重复的对象
hide footbox
autonumberparticipant SERVICE
database    DB
participant AGENTrnote over DB
Database, 数据驱动设计
endnoteSERVICE ->o SERVICE: 服务端处理
SERVICE [#Red]-> DB: 写状态,触发更新事件
note right
Pub/Sub机制
endnote
DB -> AGENT: 发布更新事件activate AGENT
alt 激活事件AGENT --> AGENT: 激活处理
else 去激活事件AGENT --> AGENT: 去激活处理
else 升级事件AGENT <--> AGENT: 升级处理
end
AGENT [#Blue]-> DB: 写状态,触发更新事件
deactivate AGENT@enduml


时序图用来标识某个操作的整个流程,通过时序图可以很清晰地知道某个操作的全流程,以及相关的交互方。

如下是上述代码作出的时序图:

更多PlantUML作图演示,可参考:
https://www.cnblogs.com/wangbin2188/p/16128832.html

相关文章:

PlantUML入门教程:画时序图

软件工程中会用到各种UML图&#xff0c;例如用例图、时序图等。那我们能不能像写代码一样去画图呢&#xff1f; 今天推荐一款软件工程师的作图利器--PlantUML&#xff0c;它能让你用写代码的方式快速画出UML图。 一、什么是PlantUML&#xff1f; PlantUML是一个允许你快速作出…...

C#范围运算符

C#8.0语法中&#xff0c;范围运算符是一种用于快速截取序列的运算符&#xff0c;其语法为 “start…end”&#xff0c;表示从序列的 “start” 索引处开始&#xff0c;一直截取到"end" 索引处为止&#xff08;包括 “end” 索引处的元素&#xff09;。范围运算符主要…...

云数据库知识学习——云数据库产品、云数据库系统架构

一、云数据库产品 1.1、云数据库厂商概述 云数据库供应商主要分为三类。 ① 传统的数据库厂商&#xff0c;如 Teradata、Oracle、IBM DB2 和 Microsoft SQL Server 等。 ② 涉足数据库市场的云供应商&#xff0c;如 Amazon、Google、Yahoo!、阿里、百度、腾讯…...

C++中引用详解!

前言&#xff1a; 本文旨在讲解C中引用的相关操作&#xff0c;以及引用的一些注意事项&#xff01;搬好小板凳&#xff0c;干货来了&#xff01; 引用的概念 何谓引用呢&#xff1f;引用其实很容易理解&#xff0c;比如李华这个同学&#xff0c;他因为很调皮&#xff0c;所以…...

VUE3+TS项目无法找到模块“../version/version.js”的声明文件

问题描述 在导入 ../version/version.js 文件时&#xff0c;提示无法找到模块 解决方法 将version.js改为version.ts可以正常导入 注意&#xff0c;因为version.js是我自己写的模块&#xff0c;我可以直接该没有关系&#xff0c;但是如果是引入的其他的第三方包&#xff0c…...

数据结构-堆的实现及应用(堆排序和TOP-K问题)

数据结构-堆的实现及应用[堆排序和TOP-K问题] 一.堆的基本知识点1.知识点 二.堆的实现1.堆的结构2.向上调整算法与堆的插入2.向下调整算法与堆的删除 三.整体代码四.利用回调函数避免对向上和向下调整算法的修改1.向上调整算法的修改2.向下调整算法的修改3.插入元素和删除元素函…...

Spring 条件注解没生效?咋回事

条件注解相信各位小伙伴都用过&#xff0c;Spring 中的多环境配置 profile 底层就是通过条件注解来实现的&#xff0c;松哥在之前的 Spring 视频中也有和大家详细介绍过条件注解的使用&#xff0c;感兴趣的小伙伴戳这里&#xff1a;Spring源码应该怎么学&#xff1f;。 从 Spr…...

96. 不同的二叉搜索树

class Solution { public:int numTrees(int n) {if (n0) {return 1;}vector<int> dp(n1, 0);dp[0] 1;dp[1] 0;for (int i 1; i < n; i) {for (int j 0; j < i; j) {dp[i] dp[j] * dp[i - 1 - j];}}return dp[n];} };...

Android Jetpack 中Hilt的使用

Hilt 是 Android 的依赖项注入库&#xff0c;可减少在项目中执行手动依赖项注入的样板代码。执行 手动依赖项注入 要求您手动构造每个类及其依赖项&#xff0c;并借助容器重复使用和管理依赖项。 Hilt 通过为项目中的每个 Android 类提供容器并自动管理其生命周期&#xff0c;…...

批量采集的时间管理与优化

在进行大规模数据采集时&#xff0c;如何合理安排和管理爬取任务的时间成为了每个专业程序员需要面对的挑战。本文将分享一些关于批量采集中时间管理和优化方面的实用技巧&#xff0c;帮助你提升爬虫工作效率。 1. 制定明确目标并设置合适频率 首先要明确自己所需获取数据的范…...

uniApp监听左右滑动事件

监听左右滑动事件的步骤 1. 添加需要监听滑动事件的元素 在你的页面中&#xff0c;添加需要监听滑动事件的元素。这可以是一个 view、swiper 或其他组件&#xff0c;取决于你的需求。例如&#xff1a; <template><view class"body" touchstart"touc…...

十八、MySQL添加外键?

1、外键 外键是用来让两张表的数据之间建立联系&#xff0c;从而保证数据的一致性和完整性。 注意&#xff0c;父表被关联的字段类型&#xff0c;必须和子表被关联的字段类型一致。 2、实际操作 &#xff08;1&#xff09;初始化两张表格&#xff1a; 子表&#xff1a; 父…...

图像文件的操作MATLAB基础函数使用

简介 MATLAB中的图像处理工具箱体统了一套全方位的标准算法和图形工具&#xff0c;用于进行图像处理、分析、可视化和算法开发。这里仅仅对常用的基础函数做个使用介绍。 查询图像文件的信息 使用如下函数 imfinfo(filename,fmt) 函数imfinfo返回一个结构体的info&#xff…...

【k8s】Kubernetes版本v1.17.3 kubesphere 3.1.1 默认用户登录失败

1.发帖&#xff1a; Kubernetes版本v1.17.3 kubesphere 3.11 默认用户登录失败 - KubeSphere 开发者社区 2. 问题日志&#xff1a; 2.1问题排查方法 &#xff1a; 用户无法登录 http://192.168.56.100:30880/ 2.2查看用户状态 kubectl get users [rootk8s-node1 ~]# k…...

Mysql加密功能

Mysql加密功能 InnoDB加密功能查询条件问题开启整个数据库加密 InnoDB加密功能 InnoDB是MySQL数据库引擎的一种&#xff0c;它提供了加密存储的功能。具体来说&#xff0c;InnoDB引擎支持以下两种方式的加密存储&#xff1a; 表级加密&#xff1a;InnoDB支持表级加密&#xff…...

redis-win10安装和解决清缓存报错“Error: Protocol error, got “H“ as reply type byte”

win10安装 https://github.com/microsoftarchive/redis/releases 下载最新的zip&#xff0c;解压&#xff0c;把路径加到Path里&#xff0c;每次直接在cmd里 redis-server.exeError: Protocol error, got “H” as reply type byte 这个报错是因为我端口写错了。。无语 D:…...

【视觉检测】电源线圈上的导线弯直与否视觉检测系统软硬件方案

 检测内容 线圈上的导线弯直与否检测系统。  检测要求 检测线圈上的导线有无弯曲&#xff0c;弯曲度由客户自己设定。检测速度5K/8H625PCS/H。  视觉可行性分析 对样品进行了光学实验&#xff0c;并进行图像处理&#xff0c;原则上可以使用机器视觉进行测试测量…...

Java elasticsearch scroll模板实现

一、scroll说明和使用场景 scroll的使用场景&#xff1a;大数据量的检索和操作 scroll顾名思义&#xff0c;就是游标的意思&#xff0c;核心的应用场景就是遍历 elasticsearch中的数据&#xff1b; 通常我们遍历数据采用的是分页&#xff0c;elastcisearch还支持from size的…...

嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识&#xff0c;这些在嵌入式软件开发中也同样会用到。 1 信息安全 1.1 信息安全的基本要素 保密性&#xff1a;确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。完整性&#xff1a;保证数…...

TCP的三次握手与四次挥手

首先&#xff0c;源端口号和目标端口号是不可少的&#xff0c;这一点和 UDP 是一样的。如果没有这两个端口号。数据就不知道应该发给哪个应用。 接下来是包的序号。为什么要给包编号呢&#xff1f;当然是为了解决乱序的问题。不编好号怎么确认哪个应该先来&#xff0c;哪个应该…...

5分钟掌握RePKG:Wallpaper Engine资源提取与格式转换的终极秘籍

5分钟掌握RePKG&#xff1a;Wallpaper Engine资源提取与格式转换的终极秘籍 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经面对Wallpaper Engine中的PKG资源包感到无从下…...

Linux系统下Filezilla FTP客户端的两种高效部署方案

1. 为什么选择Filezilla作为Linux平台的FTP客户端&#xff1f; 作为Linux用户&#xff0c;我们经常需要在服务器之间传输文件。虽然命令行工具如scp、sftp也能完成工作&#xff0c;但图形化客户端在批量文件操作和可视化管理方面优势明显。Filezilla作为老牌开源FTP解决方案&am…...

Spring Boot 3.x 集成AD域实战:从SSL证书踩坑到密码重置,一篇讲透

Spring Boot 3.x 深度集成AD域实战&#xff1a;SSL证书配置与密码策略避坑指南 在企业级应用开发中&#xff0c;Active Directory&#xff08;AD&#xff09;集成是身份认证的核心环节。本文将带您深入Spring Boot 3.x与AD域集成的实战细节&#xff0c;特别聚焦于SSL证书配置和…...

SwiftUI原生集成ChatGPT API:从架构设计到流式响应实战

1. 项目概述&#xff1a;一个原生的Swift版ChatGPT客户端最近在折腾iOS和macOS上的AI应用开发&#xff0c;发现了一个挺有意思的开源项目&#xff1a;alfianlosari/ChatGPTSwift。简单来说&#xff0c;这是一个用纯SwiftUI构建的、直接调用OpenAI官方API的ChatGPT客户端。它不是…...

【花雕学编程】Arduino动手做(252)---ESP32-S3-RGB-LED矩阵开发板之全屏循环显示七种颜色

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的…...

Laravel Permission 缓存系统终极指南:如何构建高性能多级缓存策略

Laravel Permission 缓存系统终极指南&#xff1a;如何构建高性能多级缓存策略 【免费下载链接】laravel-permission Associate users with roles and permissions 项目地址: https://gitcode.com/gh_mirrors/la/laravel-permission Laravel Permission 是一个功能强大的…...

JavaWeb学习路线全解析

JavaWeb 的学习是一个系统性工程&#xff0c;需要从前端基础到后端核心&#xff0c;再到主流框架&#xff0c;最后通过项目实战来巩固。以下是一个为你量身定制的、清晰的学习路线&#xff0c;分为几个关键阶段&#xff0c;并附上每个阶段的核心要点和推荐实践。 第一阶段&…...

ikhono开源框架:AI应用开发的统一抽象与实战指南

1. 项目概述与核心价值最近在AI应用开发圈子里&#xff0c;一个名为ikhono-ai/ikhono的开源项目引起了我的注意。乍一看这个标题&#xff0c;你可能会有点懵&#xff0c;这名字不像我们常见的那些“XX-GPT”、“XX-Agent”那么直白。但恰恰是这种独特的命名&#xff0c;让我产生…...

Qt跨平台崩溃捕获实战:集成qBreakpad与符号化调试全流程

1. 为什么需要崩溃捕获系统&#xff1f; 当你开发的Qt应用程序在用户电脑上崩溃时&#xff0c;最头疼的问题是什么&#xff1f;没错&#xff0c;就是无法复现和定位问题。用户可能只会简单反馈"程序闪退了"&#xff0c;而你要在数百个源代码文件中大海捞针。这就是为…...

AI文本检测技术解析:从原理到实践,如何有效识别AI生成内容

1. 项目概述&#xff1a;为什么我们需要“避开AI写作”&#xff1f;最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“avoid-ai-writing”。光看名字&#xff0c;你大概就能猜到它的核心诉求&#xff1a;帮助人们识别和规避由AI生成的内容。作为一个写了十几年东西的人&am…...