PlantUML 基本示例

PlantUML basic example

我正在评估 PlantUML 是否可以替代 GraphViz。

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

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

Bob->Alice : hello

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

它们不是“四个节点”,它们是序列中每个参与者的顶部和底部headers。这对于较大序列图中的可读性很有用,请在此处查看一些示例 https://plantuml.com/en/sequence-diagram

您可以设置图表样式以符合严格的 UML

skinparam style strictuml


完整代码

@startuml
skinparam style strictuml
Bob -> Alice : hello
Alice -> Bob : ok
@enduml

我看你中了经典陷阱“手册的第一页不代表该工具”.(1)

除了各种 UML 图(如您遇到的序列图)之外,PlantUML 还支持各种其他软件开发相关格式(例如 , Block diagram, , , Computer network diagrams, , chart, Mind maps, and ), as well as visualization of and 文件。

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

由于所有这一切,只有您拥有 一些 PlantUML 的基本知识后,才会出现“直观”。

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

是什么

与 Graphviz 相关的东西,而不是这个:

digraph d {
    Bob -> Alice : hello
}

您实际看到的是:(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

给我一个例子!

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

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

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

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

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

Activity

@startuml
:Alice;
:Bob;
@enduml

Archimate

@startuml
archimate #Application Alice
archimate #Business Bob
Alice -> Bob
@enduml

Class

@startuml
Alice -|> Bob: Hello
@enduml

组件

@startuml
[Alice] -> [Bob]: Hello
@enduml

部署

@startuml
folder Alice
file Bob
Alice -> Bob: Hello
@enduml

迪塔

@startuml
ditaa

+-------+       +-----+
|       | hello |     |
| Alice +------>| Bob |
|       |       |     |
+-------+       +-----+
@enduml

甘特图

@startgantt
[Alice]->[Bob]
@endgantt

JSON

@startjson
{
  "Alice": ["Bob"]
}
@endjson

思维导图

@startmindmap
+ Alice
++ Bob
@endmindmap

网络

@startuml
nwdiag {
  network hello {
    Alice;
    Bob;
  }
}
@enduml

对象

@startuml
object Alice
object Bob
Alice -> Bob
@enduml

序列

@startuml
Bob -> Alice : hello
@enduml

@startuml
[*] -> Alice
Alice -> Bob: hello
Bob -> [*]
@enduml

时机

@startuml
concise Hello
0 is Alice
+100 is Bob
@enduml

用例

@startuml
:Alice: -> :Bob: : Hello
@enduml

工作分解结构

@startwbs
+ Alice
++ Bob
@endwbs

脚注

  1. 这不是真的经典,我只是编造的。但这是经常发生的事情。
  2. 在此处参考手册:https://plantuml.com/dot
  3. 呈现在 neato 不是 dot,请参阅