Donate227Patreon111


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

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

Таким образом, новый синтаксис и реализация предложены как бета версия пользователям (начиная с 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

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

Вы можете использовать ключевые слова repeat и repeatwhile чтобы создать повторяющиеся циклы.

@startuml

start

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

stop

@enduml

It is also possible to use a full action as repeat target and insert an action in the return path using the backward keyword.

@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
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;

@enduml

Стрелки

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

Так же можно сделать стрелки: из точек, из дефисов, жирные и спрятанные.

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

Connector

You can use parentheses to denote connector.

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

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

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

@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