前言
PlantUML流程图在软件开发中具有多种用途,使用PlantUML生成的UML图表可以帮助审查者更快地理解代码的结构和逻辑;在AI发展的大环境中,可以借助plantUML语法生成的伪代码形式利用promt直接生成开发代码。
一、PlantUML
PlantUML 是一款非常强大的开源工具,用于生成各种 UML 图表,包括类图、序列图、活动图、用例图等。我们可以从plantUML官网的指导手册学习其语法,并使用网站提供的在线工具编写plantuml代码,查看下载流程图。
Open-source tool that uses simple textual descriptions to draw beautiful UML diagrams.
对于开发设计工程师人员来说,plantUML可以用'序列图'便捷的描述模块间的通信,可以用'活动图'描述代码框架/代码逻辑。
例如:
二、序列图
序列图用于描述几个参与者之前的关系,能够清晰地展示对象之间的消息传递和交互过程,以下是如何使用PlantUML绘制序列图的说明和示例。
1.编写要点
(1)声明参与者
最简单的例子可以使用->直接描述参与者之间的关联;还可以在开头声明参与者,后续仅通过例如代号A B C来编写多个参与者之间的交互:
@startuml
participant role1 as A
participant role2 as B
participant role3 as C
A -> B : To B
A -> C : To C
B -> C : To C
@enduml
参与者类型包括如下几种,其类型定义和对应的图案如下所示:
(2) 格式设置
设置参与者颜色,直接在定义后面跟颜色的编码:
participant role1 #red
participant role1 as A #FF0000
设置文本对齐,在开头定义skinparam sequenceMessageAlign,后面可以设置left right center:
skinparam sequenceMessageAlign left
设置箭头样式、颜色和箭头指向角度:
A --[#red](10)> B
对消息内容编号,使用autonumber,后面可以设置编号起始值:
autonumber 10
消息分割,使用newpage;
设置延迟:
... ... ...
示例:
@startuml
autonumber
skinparam sequenceMessageAlign left
participant role1 as A
participant role2 as B
participant role3 as C
A --[#red]>(10) B : To B
... ... ... ...
A -> C : To C
newpage
autonumber 11
B -> C : To C
@enduml
2.示例
@startuml
skinparam sequenceMessageAlign center
participant 客户端 as Client
participant 服务器 as Server
== TCP 三次握手 ==
Client -> Server: SYN
Server -> Client: SYN ACK
Client -> Server: ACK
== 发送HTTP请求和响应 ==
Client -> Server: HTTP Request Get
Server -> Client: HTTP Response
== TCP 四次挥手 ==
Client -> Server: FIN
Server -> Client: ACK
Server -> Client: FIN
Client -> Server: ACK
@enduml
三、活动图
活动图用于描述几个动作之间的顺序关系,能够清晰地展示代码逻辑,明确代码架构,以下是如何使用PlantUML绘制活动图的说明和示例。
1.编写要点
(1) 简单活动图
使用start stop标识流程的开始结束;使用':'';'标识一个动作
@startuml
start
:Hello world;
stop
@enduml
(2) 条件语法
条件语法包括:
if (...) then (...) then后通常标识yes no else (...) endif
if (...) is (...) then is后通常标识yes no
条件判断终止,使用kill或者detach
@startuml
if (条件?) then (no)
#pink:错误;
detach
else (yes)
endif
#palegreen:行为;
@enduml
(3) 循环语法
使用关键字 repeat 和 repeatwhile 进行重复循环,使用 backward 关键字插入一个全
局行为,使用break跳出循环。
2.示例
@startuml
repeat :测试某事;
if (发生错误?) then (没有)
#palegreen:好的;
break
endif
->not ok;
:弹窗 "错误";
backward :cnt++;
repeat while (重试次数<3?) is (是的) not (不是)
:结束;
stop
@enduml
四、AI辅助根据plantUML代码生成
#include <stdio.h>int main() {int cnt = 0; // 重试次数计数器while (cnt < 3) {// 测试某事if (测试某事()) {// 如果没有发生错误printf("好的\n");break; // 跳出循环} else {// 如果发生错误printf("弹窗 \"错误\"\n");cnt++; // 增加重试次数}}if (cnt >= 3) {// 如果重试次数达到3次printf("结束\n");}return 0;
}// 模拟测试某事的函数
int 测试某事() {// 这里可以实现具体的测试逻辑// 返回1表示没有错误,返回0表示发生错误// 为了示例,这里随机返回一个值return 0; // 假设每次都发生错误
}