Как реализовать прямые стрелки с помощью PlantUML?

Я пытаюсь создать диаграмму действий с помощью PlantUML, которая содержит стрелки, ведущие к существующим узлам.

Я ищу диаграмму, которая включает две стрелки «Стрелка 1» и «Стрелка 2» на рисунке ниже: plantuml диаграмма с нужными стрелками

Я попытался создать это, используя бета-синтаксис PlantUML для диаграмм действий.

Я получил схему ниже:

диаграмма plantuml без нужных стрелок

написав следующий код 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

Есть ли у кого-нибудь намек на то, как этого добиться? Для меня не имеет значения, достигается ли результат с помощью бета-синтаксиса или старого синтаксиса.


person Kaadzia    schedule 10.03.2020    source источник
comment
Насчет плантумля понятия не имею, но на ваших дополнительных стрелах должны быть щитки. Может быть, это то, что ожидает плантумл?   -  person qwerty_so    schedule 10.03.2020
comment
И в качестве примечания: ваши два охранника должны быть написаны в квадратных скобках, чтобы быть синтаксически правильными.   -  person qwerty_so    schedule 10.03.2020
comment
@qwerty_so: На окончательной диаграмме должны быть охранники, это правда. (Иначе не было бы возможности узнать, когда выбрать какой путь). Но я не думаю, что это недостающая часть для того, чтобы заставить его работать в plantUML, поскольку охранники там необязательны.   -  person Kaadzia    schedule 10.03.2020


Ответы (1)


у вас не может быть ни нескольких потоков, начинающихся с действия, ни нескольких потоков, идущих к действию

для точки зрения UML, поэтому вам нужно добавить:

  1. узел принятия решений после действия «решить», чтобы иметь два ваших потока, каждый с охраной

  2. узел принятия решения после действия "erledigt" иметь два ваших потока, каждый с охраной

  3. узел слияния перед действием «решить» для получения потоков от узла принятия решения «проверить успешно» и действия «erledigt».

Для (1) используйте «if-else» или «split» в PlantUML

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". Обратите внимание, что нет проблем с переходом к решению «проверить успешно», а не к действию «решить».

person bruno    schedule 10.03.2020
comment
Спасибо @bruno, это работает для меня :-) Это также навело меня на правильный путь к тому, что мне действительно нужно. Я гораздо лучше моделирую свой случай в виде диаграммы состояний, чем в виде диаграммы деятельности. (Дал бы вам два голоса, если бы мог ;-)) - person Kaadzia; 11.03.2020
comment
вы не можете иметь, вероятно, должен заканчиваться на PlantUML, поскольку UML может его иметь. - person qwerty_so; 11.03.2020