PlantUML——活动图新语法

PlantUML活动图新语法

1、简单活动图

  • 活动标签 (activity label) 以冒号开始,以分号结束
  • 文本格式支持 creole wiki 语法。
  • 活动默认按照它们定义的顺序进行自动连接。
js 复制代码
@startuml
:Hello world;
:This is defined on
several **lines**;
@enduml

2、开始/停止/结束

可以使用 start stop 关键字来表示一个图的开始和结束。

js 复制代码
@startuml
start
:Hello world;
:This is defined on
several **lines**;
stop
@enduml

也可以使用 end 关键字。

js 复制代码
@startuml
start
:Hello world;
:This is defined on
several **lines**;
end
@enduml

3、条件

可以使用 if,then, breakelse 关键词来在你的图表中放入测试。标签可以用圆括号提供。

有 3 种语法可供选择。

  • if (...) then (...)
js 复制代码
@startuml
start
if (Graphviz installed?) then (yes)
    :process all\ndiagrams;
else (no)
    :process only
    __sequence__ and __activity__ diagrams;
endif
stop
@enduml
  • if (...) is (...) then
js 复制代码
@startuml
if (color?) is (<color:red>red) then
    :print red;
else
    :print not red;
endif
@enduml
  • if (...) equals (...) then
js 复制代码
@startuml
if (counter?) equals (5) then
    :print 5;
else
    :print not 5;
@enduml

3.1、多分支(水平模式)

可以使用 elseif 关键字来拥有几个测试(默认是水平模式)。

js 复制代码
@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

3.2、多个条件(垂直模式)

可以使用!pragma useVerticalIf on 命令,让测试处于垂直模式

js 复制代码
@startuml
!pragma useVerticalIf on
start
if (condition A) then (yes)
    :Text 1;
elseif (condition B) then (yes)
    :Text 2;
    stop
elseif (condition C) then (yes)
    :Text 3;
elseif (condition D) then (yes)
    :Text 4;
else (nothing)
    :Text else;
endif
stop
@enduml

4、Switch 判断 switch, case, endswitch

  • 可以使用 switch, caseendswitch 关键词在图表中绘制 Switch 判断.
  • 使用括号表示标注.
js 复制代码
@startuml
start
switch (测试?)
case ( 条件 A )
    :Text 1;
case ( 条件 B )
    :Text 2;
case ( 条件 C )
    :Text 3;
case ( 条件 D )
    :Text 4;
case ( 条件 E )
    :Text 5;
endswitch
stop
@enduml

5、条件判断和终止 kill, detach

可以在 if 判断中终止一个行为.

js 复制代码
@startuml
if (条件?) then
    :错误;
    stop
endif
#palegreen:行为;
@enduml

但如果你想在特定行为上停止,你可以使用 killdetach 关键字:

js 复制代码
@startuml
if (条件?) then
    #pink:错误;
    kill
endif
#palegreen:行为;
@enduml
  • detach
js 复制代码
@startuml
if (条件?) then
    #pink:错误;
    detach
endif
#palegreen:行为;
@enduml

6、重复循环

可以使用关键字 repeatrepeatwhile 进行重复循环。

js 复制代码
@startuml
start
repeat
    :读取数据;
    :生成图片;
repeat while (更多数据?)
stop
@enduml

同样可以使用一个全局行为作为 repeat 目标,在返回循环开始时使用 backward 关键字插入一个全

局行为。

js 复制代码
@startuml
start
repeat :foo作为开始标注;
    :读取数据;
    :生成图片;
backward:这是一个后撤行为;
repeat while (更多数据?)
stop
@enduml

7、打断循环 break

可以使用 break 关键字跟在循环中的某个行为后面打断循环.

js 复制代码
@startuml
start
repeat
    :测试某事;
    if (发生错误?) then (没有)
        #palegreen:好的;
        break
    endif
    ->not ok;
    :弹窗 "文本过长错误";
repeat while (某事发生文本过长错误?) is (是的) not (不是)
->//合并步骤//;
:弹窗 "成功!";
stop
@enduml

8、Goto 和标签处理 label, goto

可以使用 labelgoto 关键词来表示 Goto 处理,其中:

  • label <label_name>
  • goto <label_name>
js 复制代码
@startuml
title Point two queries to same activity\nwith `goto`
start
if (Test Question?) then (yes)
    'space label only for alignment
    label sp_lab0
    label sp_lab1
    'real label
    label lab
    :shared;
else (no)
    if (Second Test Question?) then (yes)
        label sp_lab2
        goto sp_lab1
    else
        :nonShared;
    endif
endif
:merge;
@enduml

9、while循环

可以使用关键字 whileend while 进行 while 循环。

js 复制代码
@startuml
start
while (data available?)
    :read data;
    :generate diagrams;
endwhile
stop
@enduml

可以在关键字 endwhile 后添加标注,还有一种方式是使用关键字 is。

js 复制代码
@startuml
while (check filesize ?) is (not empty)
    :read file;
endwhile (empty)
:close file;
@enduml

如果你使用 +detach+ 来形成一个无限循环, 那么你可能需要使用 +-[hidden]->+ 来隐藏一些不完整的

箭头。

js 复制代码
@startuml
:Step 1;
if (condition1) then
    while (loop forever)
        :Step 2;
    endwhile
    -[hidden]->
    detach
else
    :end normally;
stop
endif
@enduml

10、并行处理 fork, fork again, end fork, end merge

可以使用 forkfork againend fork 或者 end merge 等关键字表示并行处理。

10.1、fork示例

js 复制代码
@startuml
start
fork
    :行为 1;
fork again
    :行为 2;
end fork
stop
@enduml

10.2、fork 和合并示例

js 复制代码
@startuml
start
fork
    :行为 1;
fork again
    :行为 2;
end merge
stop
@enduml
js 复制代码
@startuml
start
fork
:行为 1;
fork again
:行为 2;
fork again
:行为 3;
fork again
:行为 4;
end merge
stop
@enduml
js 复制代码
@startuml
start
fork
:行为 1;
fork again
:行为 2;
end
end merge
stop
@enduml

10.3、end fork 标注 (或 UML 连接规范):

js 复制代码
@startuml
start
fork
:行为 A;
fork again
:行为 B;
end fork {或}
stop
@enduml
js 复制代码
@startuml
start
fork
:行为 A;
fork again
:行为 B;
end fork {和}
stop
@enduml

10.4、其他示例

js 复制代码
@startuml
start
if (多进程处理?) then (是)
fork
:进程 1;
fork again
:进程 2;
end fork
else (否)
:逻辑 1;
:逻辑 2;
endif
@enduml

11、分割处理

11.1、分割

可以使用 split, split againend split 关键字去表达分割处理

js 复制代码
@startuml
start
split
:A;
split again
:B;
split again
:C;
split again
:a;
:b;
end split
:D;
end
@enduml

11.2、输入分割 (多个入口)

可以使用包含 hidden 指令的箭头去制造一个输入分割 (多入口):

js 复制代码
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:B;
split again
-[hidden]->
:C;
end split
:D;
@enduml
js 复制代码
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:a;
:b;
split again
-[hidden]->
(Z)
end split
:D;
@enduml

11.3、输出分割 (多个结束点)

可以使用 killdetach 去制造一个输出分割 (多个结束点):

js 复制代码
@startuml
start
split
:A;
kill
split again
:B;
detach
split again
:C;
kill
end split
@enduml
js 复制代码
@startuml
start
split
:A;
kill
split again
:b;
:c;
detach
split again
(Z)
detach
split again
end
split again
stop
end split
@enduml

12、注释

js 复制代码
@startuml
start
:foo1;
floating note left: This is a note
:foo2;
note right
This note is on several
//lines// and can
contain <b>HTML</b>
====
* Calling the method ""foo()"" is prohibited
end note
stop
@enduml

可以为后向活动添加注释:

js 复制代码
@startuml
start
repeat :Enter data;
:Submit;
backward :Warning;
note right: Note
repeat while (Valid?) is (No) not (Yes)
stop
@enduml

可以添加分区活动注释:

js 复制代码
@startuml
start
partition "**process** HelloWorld" {
note
This is my note
----
//Creole test//
end note
:Ready;
:HelloWorld(i)>
:Hello-Sent;
}
@enduml

13、改变颜色

可以为一些活动指定颜色

js 复制代码
@startuml
start
:开始处理;
#HotPink:读取配置文件
这些文件应该在此处编辑;
#AAAAAA:结束处理;
@enduml

通用可以使用渐变色.

js 复制代码
@startuml
start
partition #red/white test分片 {
#blue\green:test活动;
}
@enduml

14、无箭头连接线

可以使用 skinparam ArrowHeadColor none 参数来表示仅使用线条连接活动,而不带箭头。

js 复制代码
@startuml
skinparam ArrowHeadColor none
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml
js 复制代码
@startuml
skinparam ArrowHeadColor none
start
repeat :Enter data;
:Submit;
backward :Warning;
repeat while (Valid?) is (No) not (Yes)
stop
@enduml

15、箭头

  • 使用-> 标记,你可以给箭头添加文字或者修改箭头颜色。
  • 同时,你也可以选择点状 (dotted),条状 (dashed),加粗或者是隐式箭头
js 复制代码
@startuml
:foo1;
-> You can put text on arrows;
if (test) then
-[#blue]->
:foo2;
-[#green,dashed]-> The text can
also be on several lines
and **very** long...;
:foo3;
else
-[#black,dotted]->
:foo4;
endif
-[#gray,bold]->
:foo5;
@enduml

16、连接器 (Connector)

可以使用括号定义连接器。

js 复制代码
@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml

17、连接器颜色

js 复制代码
@startuml
start
:下面的连接器
应该是蓝色;
#blue:(B)
:下一个连接器应该
看起来应该是
深绿色;
#green:(G)
stop
@enduml

18、组合 (grouping)

通过定义分组 (group),你可以把多个活动分组。

js 复制代码
@startuml
start
group 初始化分组
:read config file;
:init internal variable;
end group
group 运行分组
:wait for user interaction;
:print information;
end group
stop
@enduml

18.1、分区

通过定义分区 (partition),你可以把多个活动组合 (group) 在一起:

js 复制代码
@startuml
start
partition 初始化分区 {
:read config file;
:init internal variable;
}
partition 运行分区 {
:wait for user interaction;
:print information;
}
stop
@enduml

这里同样可以改变分区颜色 color:

js 复制代码
@startuml
start
partition #lightGreen "Input Interface" {
:read config file;
:init internal variable;
}
partition Running {
:wait for user interaction;
:print information;
}
stop
@enduml

同样可以添加一个链接到分区:

js 复制代码
@startuml
start
partition "[[http://plantuml.com partition_name]]" {
:read doc. on [[http://plantuml.com plantuml_website]];
:test diagram;
}
end
@enduml

18.2、分组, 分区, 包, 矩形或卡片式

可以分组活动通过定义:

  • group;
  • partition;
  • package;
  • rectangle;
  • card.
js 复制代码
@startuml
start
group 分组
:Activity;
end group
floating note: 分组备注
partition 分区 {
:Activity;
}
floating note: 分区备注
package 包 {
:Activity;
}
floating note: 包备注
rectangle 矩形 {
:Activity;
}
floating note: 矩形备注
card 卡片式 {
:Activity;
}
floating note: 卡片式备注
end
@enduml

19、泳道 (Swimlanes)

  • 可以使用管道符 | 来定义泳道。
  • 还可以改变泳道的颜色。
js 复制代码
@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

可以在泳道中增加 if 判断或 repeat 或 while 循环.

js 复制代码
@startuml
|#pink|Actor_For_red|
start
if (color?) is (red) then
#pink:**action red**;
:foo1;
else (not red)
|#lightgray|Actor_For_no_red|
#lightgray:**action not red**;
:foo2;
endif
|Next_Actor|
#lightblue:foo3;
:foo4;
|Final_Actor|
#palegreen:foo5;
stop
@enduml

同样可以在泳道中增加别名,使用 alias 语法:

js 复制代码
@startuml
|#palegreen|f| fisherman
|c| cook
|#gold|e| eater
|f|
start
:go fish;
|c|
:fry fish;
|e|
:eat fish;
stop
@enduml

20、分离 (detach)

可以使用关键字 detachkill 移除箭头。

js 复制代码
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
detach
endfork
if (foo4) then
:foo5;
detach
endif
:foo6;
detach
:foo7;
stop
@enduml
js 复制代码
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
kill
endfork
if (foo4) then
:foo5;
kill
endif
:foo6;
kill
:foo7;
stop
@enduml
相关推荐
吴声子夜歌5 小时前
PlantUML——组件图
plantuml·组件图
吴声子夜歌12 小时前
PlantUML——定时图
plantuml·定时图
吴声子夜歌1 天前
PlantUML——状态图
uml·plantuml·状态图
吴声子夜歌1 天前
PlantUML——序列图
uml·plantuml·序列图
吴声子夜歌1 天前
PlantUML——活动图
uml·plantuml·活动图
吴声子夜歌2 天前
PlantUML——类图(二)
uml·plantuml·类图
吴声子夜歌2 天前
PlantUML——对象图
uml·plantuml·对象图
吴声子夜歌3 天前
PlantUML——用例图
uml·plantuml
弈风千秋万古愁2 个月前
plantuml支持的绘图种类
plantuml