Donate244Patreon127


Диаграмма активности (бета)

Текущий синтаксис диаграммы активности имеет несколько ограничений и недостатков (например, её сложно поддерживать).

Таким образом, новый синтаксис и реализация предложены как бета версия пользователям (начиная с V7947), так что мы сможем определить новый формат и синтаксис.

Другое преимущество этой новой реализации, это то, что для неё не будет требоваться установленный Graphviz (как для диаграмм последовательностей).

Новый синтаксис заменит старый. Однако, по причине совместимости, старый синтаксис всё ещё будет распознаваться, чтобы обеспечивать восходящую совместимость.

Пользователи будут просто поощряться при мигрировании на новый синтаксис.

Простая активность

Описания активностей начинаются с : и заканчиваются ;.

Форматировать текст возможно, используя синтаксис creole.

Активности косвенно связаны в порядке их определения.

@startuml
:Hello world;
:This is on defined on
several **lines**;
@enduml

Старт/Стоп

Вы можете использовать ключевые слова start и stop, чтобы обозначать начало и конец диаграммы.

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml

Вы также можете использовать ключевое слово end.

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml

Условия

Вы можете использовать ключевые слова if, then и else, чтобы добавить проверяющие условия на вашу диаграмму. Описания можно добавить, используя круглые скобки.

@startuml

start

if (Graphviz installed?) then (yes)
  :process all\ndiagrams;
else (no)
  :process only
  __sequence__ and __activity__ diagrams;
endif

stop

@enduml

Ряд проверок (горизонтальное отображение)

Вы можете использовать ключевое слово elseif, чтобы создать несколько проверок (по умолчанию используется режим горизонтального отображения):

@startuml
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

Ряд проверок (вертикальное отображение)

Используйте команду !pragma useVerticalIf on для отображения проверок в вертикальном режиме:

@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

[Ref. QA-3931]

Повторяющийся цикл

Используйте ключевые слова repeat и repeatwhile для создания повторяющихся циклов.

@startuml

start

repeat
  :read data;
  :generate diagrams;
repeat while (more data?)

stop

@enduml

Для включения в обратный путь цикла самостоятельного действия используйте ключевое слово backward.

@startuml

start

repeat :foo as starting label;
  :read data;
  :generate diagrams;
backward:This is backward;
repeat while (more data?)

stop

@enduml

Цикл while

Используйте ключевые слова while и end while для создания повторяющихся циклов.

@startuml

start

while (data available?)
  :read data;
  :generate diagrams;
endwhile

stop

@enduml

Добавить описание можно после ключевого слова endwhile или используя ключевое слово is.

@startuml
while (check filesize ?) is (not empty)
  :read file;
endwhile (empty)
:close file;
@enduml

Паралельная обработка

Используйте ключевые слова fork, fork again и end fork для определения параллельных процессов.

@startuml

start

if (multiprocessor?) then (yes)
  fork
    :Treatment 1;
  fork again
    :Treatment 2;
  end fork
else (monoproc)
  :Treatment 1;
  :Treatment 2;
endif

@enduml

Заметки

Форматирование текста может быть сделано с использованием синтаксиса creole.

Заметку можно сделать отсоединенной с помощью ключевого слова floating.

@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

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

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

[Ref. QA-11788]

Цвета

Вы можете задать цвет некоторым активностям.

@startuml

start
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;

@enduml

Линии без стрелок

Используйте команду skinparam ArrowHeadColor none для соединения действий линиями без стрелок.

@startuml
  skinparam ArrowHeadColor none
  start
    :Hello world;
    :This is on defined on
     several **lines**;
  stop
@enduml

@startuml
  skinparam ArrowHeadColor none
  start
    repeat :Enter data;
    :Submit;
    backward :Warning;
    repeat while (Valid?) is (No) not (Yes)
  stop
@enduml

Стрелки

Используя нотацию ->, вы можете добавить текст к стрелке, aи поменять их цвет.

Так же можно сделать стрелки: из точек (dotted), из дефисов (dashed), жирные (bold) и скрытые (hidden).

@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;
  -[hidden]->
  :foo4a;
endif
-[#gray,bold]->
:foo5;
@enduml

Connector

You can use parentheses to denote connector.

@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml

Color on connector

You can add color on connector.

@startuml
start
:The connector below
wishes he was blue;
#blue:(B)
:This next connector
feels that she would
be better off green;
#green:(G)
stop
@enduml

[Ref. QA-10077]

Группирование

Вы можете группировать активности вместе, определяя раздел:

@startuml
start
partition Initialization {
    :read config file;
    :init internal variable;
}
partition Running {
    :wait for user interaction;
    :print information;
}

stop
@enduml

Дорожки

Используя символ |, вы можете определять плавающие линии.

Также возможно изменять цвет плавающих линий.

@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

Отсоединение

Возможно убрать стрелку используя ключевое слово detach.

@startuml
 :start;
 fork
   :foo1;
   :foo2;
 fork again
   :foo3;
   detach
 endfork
 if (foo4) then
   :foo5;
   detach
 endif
 :foo6;
 detach
 :foo7;
 stop
@enduml

SDL

Изменяя последний разделитель ;, вы можете установить различный рендеринг для активности:

@startuml
:Ready;
:next(o)|
:Receiving;
split
 :nak(i)<
 :ack(o)>
split again
 :ack(i)<
 :next(o)
 on several line|
 :i := i + 1]
 :ack(o)>
split again
 :err(i)<
 :nak(o)>
split again
 :foo/
split again
 :i > 5}
stop
end split
:finish;
@enduml

Полноценный пример

@startuml

start
:ClickServlet.handleRequest();
:new page;
if (Page.onSecurityCheck) then (true)
  :Page.onInit();
  if (isForward?) then (no)
    :Process controls;
    if (continue processing?) then (no)
      stop
    endif

    if (isPost?) then (yes)
      :Page.onPost();
    else (no)
      :Page.onGet();
    endif
    :Page.onRender();
  endif
else (false)
endif

if (do redirect?) then (yes)
  :redirect process;
else
  if (do forward?) then (yes)
    :Forward request;
  else (no)
    :Render page template;
  endif
endif

stop

@enduml

Condition Style

Diamond style

@startuml
skinparam conditionStyle diamond
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

Inside style (by default)

@startuml
skinparam conditionStyle inside
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

@startuml
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

Foo1 (Diamond + Inside) style

@startuml
skinparam conditionStyle foo1
start
repeat
  :act1;
  :act2;
repeatwhile (<b>end)
:act3;
@enduml

[Ref. QA-1290]

Condition End Style

Diamond style (by default)

@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
    :B1;
else (no)
endif
:C;
@enduml

@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
    :B1;
else (no)
    :B2;
endif
:C;
@enduml
@enduml

Horizontal line (hline) style

@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
    :B1;
else (no)
endif
:C;
@enduml

@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
    :B1;
else (no)
    :B2;
endif
:C;
@enduml
@enduml

[Ref. QA-4015]