PlantUML 基本示例

Bou*_*egh 4 plantuml

我正在评估 PlantUML 是否可以成为 GraphViz 的良好替代品。

它被宣传为“直观”,但老实说,主页上的第一个示例已经令人困惑。

为什么下面会创建两次“Bob”和“Alice”?我在文本中看到 2 个节点,在输出中看到 4 个节点。此外,箭头不是在节点之间移动,而是在节点的重复项之间的关系之间移动。

Bob->Alice : hello
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这对我来说毫无意义。这个示例的含义是什么?如果是一个只有 2 个节点且它们之间有一个箭头的更简单的示例,会是什么?

Pot*_*rca 10

我发现您已经陷入了“手册的第一页不代表该工具”的经典陷阱。(1)

除了各种 UML 图(如您遇到的序列图)之外,PlantUML 还支持各种其他软件开发相关格式(例如、框图、、计算机网络图、图、思维导图和) ,以及文件的可视化。

事实上,它甚至可以理解 Graphviz 语法!(2)

由于所有这些,只有当您具备一些PlantUML 的基本知识时,“直观”才会发生。

回到你的问题......你所看到的并不是你所想的那样。

那是什么?

将事物与 Graphviz 相关联,而不是这样:

digraph d {
    Bob -> Alice : hello
}
Run Code Online (Sandbox Code Playgroud)

您实际上看到的是:(3)

@startuml
digraph sequenceDiagramExample {
  bobHead [ label="Bob" pos="0,1.5!" shape="record" ];
  bobPoint0 [ pos="0,0.75!" shape="point" width="0" ]
  bobFoot [ label="Bob" pos="0,0!" shape="record" ];
  aliceHead [ label="Alice" pos="1,1.5!" shape="record" ];
  alicePoint0 [ pos="1,0.75!" shape="point" width="0" ]
  aliceFoot [ label="Alice" pos="1,0!" shape="record" ];
  bobHead -> bobPoint0 -> bobFoot [ dir="none" style="dashed" ]
  aliceHead -> alicePoint0 -> aliceFoot [ dir="none" style="dashed" ]
  bobPoint0 -> alicePoint0 [ label="hello" labelloc="c" style="solid" ]
}
@enduml
Run Code Online (Sandbox Code Playgroud)

给我一个例子!

只有两个节点和它们之间的箭头的示例是什么样子取决于所选图形的类型......

您必须记住的是,使用 Graphviz,您必须自己将所有含义应用到图表中。使用 PlantUML,含义由 PlantUML 为您提供。您所需要做的就是告诉 PlantUML 您的意思。

通过一些基本的指导,这很快就会变得直观。在开始之前你只需要知道你想画什么样的图......

正如您从下面的示例中看到的,PlantUML 是一个非常强大的工具,可以添加到您的软件开发人员工具箱中。

我希望这些示例将有助于让事情变得更加直观,并且您的第一次失误不会阻止您进一步探索 PlantUML!

活动

@startuml
:Alice;
:Bob;
@enduml
Run Code Online (Sandbox Code Playgroud)

阿基马特

@startuml
archimate #Application Alice
archimate #Business Bob
Alice -> Bob
@enduml
Run Code Online (Sandbox Code Playgroud)

班级

@startuml
Alice -|> Bob: Hello
@enduml
Run Code Online (Sandbox Code Playgroud)

成分

@startuml
[Alice] -> [Bob]: Hello
@enduml
Run Code Online (Sandbox Code Playgroud)

部署

@startuml
folder Alice
file Bob
Alice -> Bob: Hello
@enduml
Run Code Online (Sandbox Code Playgroud)

迪塔

@startditaa

+-------+       +-----+
|       | hello |     |
| Alice +------>| Bob |
|       |       |     |
+-------+       +-----+
@endditaa
Run Code Online (Sandbox Code Playgroud)

甘特图

@startgantt
[Alice]->[Bob]
@endgantt
Run Code Online (Sandbox Code Playgroud)

JSON

@startjson
{
  "Alice": ["Bob"]
}
@endjson
Run Code Online (Sandbox Code Playgroud)

思维导图

@startmindmap
+ Alice
++ Bob
@endmindmap
Run Code Online (Sandbox Code Playgroud)

网络

@startuml
nwdiag {
  network hello {
    Alice;
    Bob;
  }
}
@enduml
Run Code Online (Sandbox Code Playgroud)

目的

@startuml
object Alice
object Bob
Alice -> Bob
@enduml
Run Code Online (Sandbox Code Playgroud)

顺序

@startuml
Bob -> Alice : hello
@enduml
Run Code Online (Sandbox Code Playgroud)

状态

@startuml
[*] -> Alice
Alice -> Bob: hello
Bob -> [*]
@enduml
Run Code Online (Sandbox Code Playgroud)

定时

@startuml
concise Hello
0 is Alice
+100 is Bob
@enduml
Run Code Online (Sandbox Code Playgroud)

使用案例

@startuml
:Alice: -> :Bob: : Hello
@enduml
Run Code Online (Sandbox Code Playgroud)

工作分解结构

@startwbs
+ Alice
++ Bob
@endwbs
Run Code Online (Sandbox Code Playgroud)

脚注

  1. 这并不是真正的经典,我只是编造的。但这是经常发生的事情。
  2. 请参考此处的手册:https: //plantuml.com/dot
  3. neato 在not 中渲染dot,请参阅/sf/answers/3742931881/