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

【PlantUML系列】流程图(四)

目录

目录

一、基础用法

1.1 开始和结束

1.2 操作步骤

1.3 条件判断

1.4 并行处理

1.5 循环

1.6 分区

1.7 泳道

一、基础用法

1.1 开始和结束

开始一般使用start关键字;结束一般使用stop/end关键字。基础用法包括:

  • start ... stop
  • start ... end
@startuml
start
:执行操作A;
stop
@enduml

1.2 操作步骤

语法为 :operation,其中 operation 是你为该步骤定义的名称。例如:

@startuml
:开始;
:执行操作A;
:执行操作B;
:结束;
@enduml

1.3 条件判断

使用PlantUML语法通常使用if-else关键字。通常由三种语法:

  • if (...) then (...) ... [else (...) ...] endif
  • if (...) is (...) then ... [else (...) ...] endif
  • if (...) equals (...) then ... [else (...) ...] endif

例如:

@startuml
:开始;
:执行操作A;
:判断是否满足条件;
if (满足条件) then (是):执行操作B;
else (否):执行操作C;
endifif (条件) is (是) then:执行操作D;
else:执行操作E;
endifif (条件) equals (是) then:执行操作F;
else:执行操作G;
endif
:结束;
@enduml

多分支判断使用elseif关键字,其中包含水平模式、垂直模式;

  • 水平模式
@startuml
start
if (condition A) then (yes):Text 1;
elseif (condition B) then (yes):Text 2;stop
(no) elseif (condition C) then (yes):Text 3;
(no) elseif (condition D) then (yes):Text 4;
else (nothing):Text else;
endif
stop
@enduml

  • 垂直模式:使用!pragma useVerticalIf on进入垂直模式。
​@startuml
start
!pragma useVerticalIf on
if (condition A) then (yes):Text 1;
elseif (condition B) then (yes):Text 2;stop
(no) elseif (condition C) then (yes):Text 3;
(no) elseif (condition D) then (yes):Text 4;
else (nothing):Text else;
endif
stop
@enduml

1.4 并行处理

并行处理可以用 fork 和 join 来表示,fork 表示分支开始,merge 表示分支合并。

  • fork ... fork again ... end fork
  • fork ... fork again ... end merge
@startuml
start
fork:action 1;
fork again:action 2;
end forkfork:action 3;
fork again:action 4;
end merge
stop
@enduml

1.5 循环

循环包括无条件循环(Repeat loop)、有条件循环(While loop),典型的写法包括:

  • repeat ... repeat while (...) is (...) not (...)
  • repeat ... backward ... repeat while (...) is (...) -> (...)
  • while (...) end while

repeat案例:

@startuml
startrepeat:read data;:generate diagrams;
repeat while (more data?) is (yes) not (no)repeat:read data;:generate diagrams;
backward :write data;
repeat while (more data?) is (yes)
-> no;:next action;while (check filesize ?) is (not empty):read file;backward:log;
endwhile (empty)
:close file;stop
@enduml

1.6 分区

在PlantUML中,Partition 是用来定义分区的关键字,它允许你将多个活动组合在一起。

@startuml
start
partition Initialization {:read config file;:init internal variable;
}
partition Running {:wait for user interaction;:print information;
}stop
@enduml

1.7 泳道

在PlantUML中,使用|Swimlane1|来表示泳道,例如:

@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

参考资料:New Activity Diagram Beta syntax and features

相关文章:

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字;结束一般使用stop/end关键字。基础用法包括: start ... stopstart ...…...

操作系统:进程、线程与作业

背景介绍: 因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。 多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时…...

先验地图--slam学习笔记

先验信息 (Prior Information) 先验信息指的是在收集新数据之前已有的知识或假设。这种信息可以来自之前的实验、历史数据、理论模型或专家意见。 地图信息:在无人驾驶中,车辆通常会预先加载高精度地图数据,这些地图数据提供了道路布局、车…...

空指针异常:软件开发中的隐形陷阱

在软件开发的世界里,bug如同隐藏在代码森林中的小怪兽,不时跳出来给开发者们制造惊喜(或惊吓)。其中,空指针异常(Null Pointer Exception, NPE)无疑是最令人头疼的一类。它悄无声息,…...

【Java从入门到放弃 之 GC】

垃圾回收 垃圾回收什么是垃圾引用计数法可达性分析算法 垃圾回收算法标记清除法标记复制法标记整理法分代 常用的垃圾回收器 垃圾回收 如果你学过C,你肯定知道,我们没申请一块内存,都要自己写回收内存的方法。而Java不需要我们管理内存&…...

【C++】等差数列末项计算题解析及优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述与输入输出要求💯数学分析与公式推导公差的计算通项公式推导 💯示例解析解题步骤 💯程序实现与解析初版代码代码解析优点与不足…...

vue中父组件接收子组件的多个参数的方法:$emit或事件总线

方法一&#xff1a;使用 $emit 方法 原理 子组件通过 $emit 方法向父组件发送事件&#xff0c;同时可以传递多个参数&#xff0c;父组件通过事件监听来接收这些参数。 示例 子组件代码 <template><div><button click"sendData">发送数据</…...

2024.12.10——攻防世界Web_php_include

知识点&#xff1a;代码审计 文件包含 伪协议 伪协议知识点补充&#xff1a; 在PHP中&#xff0c;伪协议&#xff08;Pseudo Protocols&#xff09;也被称为流包装器&#xff0c;这些伪协议以 php://开头&#xff0c;后面跟着一些参数&#xff0c;用于指定要执行的操作或需要…...

【机器学习算法】——数据可视化

1. 饼图&#xff1a;显示基本比例关系 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# ——————————————————————————————————————————————————————…...

如何在 Android 项目中实现跨库传值

背景介绍 在一个复杂的 Android 项目中&#xff0c;我们通常会有多个库&#xff08;lib&#xff09;&#xff0c;而主应用程序&#xff08;app&#xff09;依赖所有这些库。目前遇到的问题是&#xff0c;在这些库中&#xff0c;libAd 需要获取 libVip 的 VIP 等级状态&#xf…...

JavaCV之FFmpegFrameFilter视频转灰度

1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…...

Redis:基于PubSub(发布/订阅)、Stream流实现消息队列

Redis - PubSub、Stream流 文章目录 Redis - PubSub、Stream流1.基于List的消息队列2.基于PubSub的消息队列3.基于Stream的消息队列1.Redis Streams简介2.Redis Streams基本命令1.XADD 添加消息到末尾2.XLEN 获取消息长度3.XREAD 读取消息 &#xff08;单消费模式&#xff09;4…...

C#飞行棋(新手简洁版)

我们要在主函数的顶部写一些全局静态字段 确保能在后续的静态方法中能够获取到这些值和修改 static int[] Maps new int[100];static string[] PlayerName new string[2];static int[] PlayerScore new int[2];static bool[] Flags new bool[2] {true,true }; static int[]…...

【OpenCV】图像转换

理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像&#xff0c;使用 2D离散傅里叶变换&#xff08;DFT&#xff09; 查找频域。快速算法称为 快速傅立叶变换&#xff08;FFT&#xff09; 用于计算DFT。 Numpy中的傅立叶变换 首先&#xff0c;我们将看到如何使用Numpy查…...

力扣 重排链表-143

重排链表-143 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next)…...

【Kubernetes理论篇】容器集群管理系统Kubernetes(K8S)

Kubernetes集群部署基本管理实战 这么好的机会&#xff0c;还在等什么&#xff01; 01、Kubernetes 概述 K8S是什么 K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;写”。不如整个缩写 K8s 作为缩写的结果…...

Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令

Kubernetes&#xff08;简称 K8s&#xff09;作为一种开源的容器编排工具&#xff0c;已经成为现代分布式系统中的标准。它的强大之处在于能够自动化应用程序的部署、扩展和管理。在使用 Kubernetes 的过程中&#xff0c;熟悉常用操作对于高效地管理集群资源至关重要。本文将详…...

爬虫基础之Web网页基础

网页的组成 网页可以分为三大部分–HTML、CSS 和 JavaScript。如果把网页比作一个人&#xff0c;那么 HTML 相当于骨架、JavaScript 相当于肌肉、CSS 相当于皮肤&#xff0c;这三者结合起来才能形成一个完善的网页。下面我们分别介绍一下这三部分的功能。 HTML HTML(Hypertext…...

k8s, deployment

控制循环&#xff08;control loop&#xff09; for {实际状态 : 获取集群中对象X的实际状态&#xff08;Actual State&#xff09;期望状态 : 获取集群中对象X的期望状态&#xff08;Desired State&#xff09;if 实际状态 期望状态{什么都不做} else {执行编排动作&#xf…...

使用ensp搭建OSPF+BGP和静态路由,底层PC使用dhcp,实现PC互通

1.4种方式&#xff0c;实现PC2可以互通底层的所有设备 OSPF&#xff1a;OSPF是一种用于互联网协议网络的链路状态路由协议 BGP&#xff1a;是一种用于互联网上进行路由和可达性信息传递的外部网关协议&#xff08;EGP&#xff09; 静态路由&#xff1a; 静态路由是一种路由方…...

PLC编程入门学习路径

PLC编程入门学习路径基础概念理解PLC&#xff08;可编程逻辑控制器&#xff09;是一种工业自动化控制设备。需要理解其工作原理、硬件组成&#xff08;CPU、I/O模块、电源等&#xff09;以及常见的品牌&#xff08;如西门子、三菱、欧姆龙&#xff09;。编程语言学习PLC常用编程…...

SRWE终极窗口管理指南:免费解锁Windows窗口任意调整能力

SRWE终极窗口管理指南&#xff1a;免费解锁Windows窗口任意调整能力 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾为Windows窗口管理的限制感到困扰&#xff1f;想要调整游戏窗口大小进行高清截图&am…...

跨境直播里,为什么很多团队设备很强,画面却依旧不稳定?

做跨境直播的人&#xff0c;基本都会经历一个阶段&#xff1a;疯狂升级设备。更贵的相机更强的显卡更高规格的采集卡更多灯光但实际开播后&#xff1a;直播依旧掉帧OBS 占用异常推流延迟增加画面偶发模糊音视频不同步很多时候&#xff0c;问题并不是设备性能不够。而是&#xf…...

别再照搬Zynq教程了!手把手教你为Arty A7-35T配置MicroBlaze的SPI Flash启动(附时钟连接避坑指南)

别再照搬Zynq教程了&#xff01;手把手教你为Arty A7-35T配置MicroBlaze的SPI Flash启动&#xff08;附时钟连接避坑指南&#xff09; 在FPGA开发领域&#xff0c;Zynq系列因其ARMFPGA的异构架构而广受欢迎&#xff0c;网上教程资源也最为丰富。但这也导致了一个常见陷阱——许…...

告别手动拖拽!用ENVI的Crosshairs和Cursor Value功能,精准搞定无坐标影像拼接

告别手动拖拽&#xff01;用ENVI的Crosshairs和Cursor Value功能&#xff0c;精准搞定无坐标影像拼接 在遥感影像处理中&#xff0c;遇到没有地理参考信息的影像拼接任务时&#xff0c;很多用户的第一反应是手动拖拽对齐——这种看似直观的方法实际上效率低下且精度堪忧。想象一…...

【LangChain】 入门:从分步调用到链式编程

LangChain 入门&#xff1a;从分步调用到链式编程本文基于一段翻译助手的示例代码&#xff0c;讲解 LangChain 的核心概念、输出解析器的作用&#xff0c;以及普通写法与链式写法的对比。一、LangChain 是什么&#xff1f; 名字拆解缩写含义LangLanguage&#xff08;语言&#…...

KouriChat + DeepSeek + 微信接入:本地 AI 角色聊天机器人搭建实录

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 文章目录&#xff1a; 前言1 KouriChat项目简介2 环境准备3 环境安装及项目部署3.1 Python3.11 安装3.2 启动KouriC…...

“腾讯给 DeepSeek 出资 60 亿,占约 2% 股权。另一家巨头未入局”

最近 DeepSeek 首轮外部融资的消息&#xff0c;引发全网关注&#xff0c;各种消息满天飞咯。①在 5 月 9 日的「DeepSeek 和阿里谈崩了」留言区&#xff0c;就有读者提到“腾讯曾提出认购最多 20% 股份&#xff0c;但因比例过高被婉拒。”今天又刷到鹅厂出资信息的另外一个版本…...

TimescaleDB Helm Charts 项目停止维护后的应对策略与迁移指南

1. 项目概述与背景如果你正在Kubernetes上寻找一种可靠、可扩展的方式来部署时序数据库&#xff0c;那么TimescaleDB的Helm Charts项目曾经是一个绕不开的选项。这个由Timescale官方维护的仓库&#xff0c;旨在为开发者提供一套标准化的、声明式的部署方案&#xff0c;让你能通…...

神经科学启发的边缘AI持续学习:从突触修剪到双记忆系统的架构设计

1. 项目概述&#xff1a;为什么我们需要一个“会学习”的边缘大脑&#xff1f;想象一下&#xff0c;你家里的扫地机器人&#xff0c;第一天它学会了绕过餐桌腿&#xff0c;第二天你搬来一把新椅子&#xff0c;它却一头撞了上去&#xff0c;然后彻底忘记了怎么绕过餐桌腿。这听起…...