当前位置: 首页 > 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; 静态路由是一种路由方…...

TÜLU 3: Pushing Frontiers in Open Language Model Post-Training

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.15124&#x1f465; 作者: Nathan Lambert, Jacob Morrison, Valentina Pyatkin, Shengyi Huang, Hamish Ivison, Faeze Brahman, Lester James V. Miranda, Alisa Liu, Nouha Dziri, Shane Lyu, Yuling Gu, Sau…...

深入解读 MySQL EXPLAIN 与索引优化实践

MySQL 是当今最流行的关系型数据库之一&#xff0c;为了提升查询性能&#xff0c;合理使用 EXPLAIN 工具和优化索引显得尤为重要。本文将结合实际示例&#xff0c;探讨如何利用 EXPLAIN 分析查询执行计划&#xff0c;并分享索引优化的最佳实践。 一、EXPLAIN 工具简介 EXPLAIN …...

Flume——进阶(agent特性+三种结构:串联,多路复用,聚合)

目录 agent特性ChannelSelector描述&#xff1a; SinkProcessor描述&#xff1a; 串联架构结构图解定义与描述配置示例Flume1&#xff08;监测端node1&#xff09;Flume3&#xff08;接收端node3&#xff09;启动方式 复制和多路复用结构图解定义描述配置示例node1node2node3启…...

ragflow连ollama时出现的Bug

ragflow和ollama连接后&#xff0c;已经添加了两个模型但是ragflow仍然一直warn&#xff1a;Please add both embedding model and LLM in Settings &#xff1e; Model providers firstly.这里可能是我一开始拉取的镜像容器太小&#xff0c;容不下当前添加的模型&#xff0c;导…...

基于centos7.7编译Redis6.0

背景&#xff1a; OS&#xff1a;CentOs 7.7 Redis: 6.0.6 编译构建报错如下&#xff1a; In file included from server.c:30:0: server.h:1044:5: error: expected specifier-qualifier-list before ‘_Atomic’_Atomic unsigned int lruclock; /* Clock for LRU eviction …...

uni-app项目无法在Android Studio模拟器上运行

目录 1 问题描述2 尝试解决3 引发原因4 解决方法4.1 换用 MuMu 模拟器 5 结语 1 问题描述 在使用 uni-app 开发 Pad 端 App 时&#xff0c;初始化项目后打算先运行一下确保初始化正常。打开 Android Studio 模拟器后&#xff0c;然后在 HbuilderX 中选择使用 App 标准基座 运…...

第一部分:Linux系统(基础及命令)

Linux操作系统的实操性非常强&#xff0c;纯操作&#xff0c;不适用于日常的办公使用 1.初始Linux 1.1 操作系统概述 1.1.1 了解OS的作用 OS&#xff1a;是计算机软件的一种&#xff0c;主要负责&#xff1a;作为用户和计算机硬件之间的桥梁&#xff0c;调度和管理计算机硬…...

No module named ‘_ssl‘ No module named ‘_ctypes‘

如果你使用的是基于 yum 的 Linux 发行版&#xff08;例如 CentOS、RHEL、Fedora&#xff09;&#xff0c;安装 libc6-dev 的方式稍有不同。在这些系统中&#xff0c;通常对应的包是 glibc-devel。 No module named ‘_ctypes’ 使用 yum 安装 glibc-devel 更新系统的软件包列…...

【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题

目录 1. 编写第一个 QT 程序 1.1 使用 标签 实现 &#x1f407; 图形化界面实现 &#x1f407; 纯代码形式实现 1.2 使用 按钮 实现 &#x1f40b; 图形化界面实现 &#x1f40b; 纯代码形式实现 1.3 使用 编辑框 实现 &#x1f95d; 图形化界面实现 &#x1f95…...

VTK编程指南<六>:VTK可视化管线与渲染详解

1、VTK渲染引擎 回顾前几章节的RenderCylinder示例 可以找到以下的类: vtkProp; ytkAbstractMapper; vtkProperty; vtkCamera; vtkLight; vtkRenderer; vtkRenderWindow; vtkRenderWindowInteractor vtkTransform; vtkLookupTable;可以发现这些类都是与数据显示或渲染相关的。…...

中学生怎么做网站/网站seo排名优化软件

1.static-静态属性 &#xff08;1&#xff09;static代表“全局”或“静态”&#xff0c;可以理解为&#xff1a;方便在没有创建对象的情况下来进行某些操作。通常用于修饰成员变量和方法&#xff0c;也可以形成静态代码块。 实际应用中&#xff0c;可将需频繁操作、通用…...

重庆做网站公司有哪些/网络营销的十大特点

编写Android程序&#xff0c;离不开和Http打交道。android 的单线程UI模型&#xff0c;使得处理Http这样&#xff0c;耗时的操作的操作变得麻烦。传统的作法有Thread Handler和AsyncTask 而这两种方式都是需要自己写很多重复的代码如创建HttpClient etc.不符合DRY(Dont repeat…...

怎样制作小程序软件/优化大师好用吗

归根结底&#xff0c;用CSS绘制三角形&#xff0c;就是利用边框(border)特性进行绘制 平时我们用border可能用的很多&#xff0c;但是一般都会统一设置所有边框的颜色&#xff0c;很少研究每个方向的边框具体样式是怎样的。现在先来看一个简单的例子&#xff0c;我们分别设置每…...

网站怎么做sem/网站优化排名金苹果系统

建立一个JDBC应用程序&#xff0c;本教程中以Java连接MySQL为一个示例&#xff0c;分六个步骤进行&#xff1a; 1. 导入包 在程序中包含数据库编程所需的JDBC类。大多数情况下&#xff0c;使用 import java.sql.* 就足够了&#xff0c;如下所示&#xff1a; //STEP 1. Import r…...

网站开发流程的认识/百度售后客服电话24小时

来自&#xff1a;程序员书库(ID&#xff1a;CodingBook)毋庸置疑&#xff0c;Python是2019年最流行的编程语言之一&#xff0c;前几日&#xff0c;HackerRank 发布了 2020 年《开发者技能报告》&#xff0c;报告调查了来自全球 162 个国家的 116000 多名软件开发者。根据调查显…...

在哪个网站上做预收款报告/网络整合营销推广

创建元素 使用document.createElement()可以创建新元素。这个方法只接受一个参数&#xff0c;即要创建元素的标签名。这个标签名在HTML文档中不区分大小写&#xff0c;在XHTML中区分大小写。 var div document.createElement("div"); 使用createElement()方法创建…...