【问题标题】:How to realize direct arrows with PlantUML?PlantUML如何实现直箭头?
【发布时间】:2020-06-22 06:06:43
【问题描述】:

我正在尝试使用 PlantUML 创建一个包含返回现有节点的箭头的活动图。

我正在寻找的是一个图表,其中包含下图中的两个箭头“箭头 1”和“箭头 2”:

我尝试使用PlantUML beta syntax for Activity diagrams 创建它。

我实现了下图:

通过编写以下 PlantUML 代码:

@startuml

start

:new - please check;

while (check sucessful?) is (is an error)
  :to solve;
  :in progress;
  :solved;
endwhile (not an error)

:erledigt;
note left
    reason:
     * done
     * not an error
     * not fixable
end note
stop

@enduml

有人对如何实现这一点有提示吗?使用 beta 语法或the older syntax 实现结果对我来说并不重要。

【问题讨论】:

  • 我不知道 Plantuml 但在你的额外箭头上应该有警卫。也许这就是 Plantuml 所期望的?
  • 附带说明:您的两个“守卫”必须写在方括号中,以便语法正确。
  • @qwerty_so:在最后的图中应该有警卫,这是真的。 (否则就没有机会知道什么时候走哪条路)。但我不认为这是让它在 plantUML 中工作的缺失部分,因为那里的守卫是可选的。

标签: uml plantuml


【解决方案1】:

你不能从一个动作开始有多个流,也不能有多个流到一个动作

对于 UML 的观点,所以你需要添加:

  1. “解决”操作之后的决策节点,以生成两个流程,每个流程都有一个警卫

  2. 在“erledigt”操作之后的决策节点有两个流程,每个流程都有一个警卫

  3. “解决”操作之前的合并节点,用于接收来自决策节点“检查成功”和操作“erledigt”的流。

对于 (1) 在 PlantUML 中使用“if-else”或“split”

start

:new - please check;

while (check sucessful?) is (is an error)
  :to solve;
  if (duration) then (long)
    :in progress;
  else (immediat)
  endif
  :solved;
endwhile (not an error)

:erledigt;
note left
    reason:
     * done
     * not an error
     * not fixable
end note
stop

@enduml

对于 (3),您可能可以使用“重复同时”来管理 (2),但不确定您是否可以在 PlantUML 中不重复这三个操作(解决 - 进行中 - 已解决)或在另一个操作中执行它们您调用的活动。在 PlantUML 中,代码是从除“goto”之外的控制结构中绘制的,它允许不交叉线,但您需要“goto”交叉线。请注意,决策“检查成功”而不是“解决”操作没有问题

【讨论】:

  • 感谢@bruno,这对我有用 :-) 它也让我走上了真正需要的道路。我更擅长将我的案例建模为状态图而不是活动图。 (如果可以的话,我会给你两个赞成票 ;-))
  • you cannot have 应该以“for PlantUML”结尾,因为 UML 可以拥有它。
猜你喜欢
  • 2022-08-18
  • 2022-08-19
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2020-03-16
  • 2022-08-18
  • 2023-02-05
  • 2020-12-22
相关资源
最近更新 更多