Вы можете внести свой вклад на этой странице, нажав здесь  (Menu)

 

 

Диаграмма состояний

 

 

Простое состояние

Для изображения начального и конечного псевдосостояний используется [*].

Используйте --> для изображения переходов.

@startuml

[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string

State1 -> State2
State2 --> [*]

@enduml

 

 

Change state rendering

You can use hide empty description to render state as simple box.

@startuml
hide empty description
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string

State1 -> State2
State2 --> [*]
@enduml

 

 

Составное состояние

Также можно изображать составные состояния. Для этого его следует объявить, используя конструкцию state { ... }.

@startuml
scale 350 width
[*] --> NotShooting

state NotShooting {
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

state Configuring {
  [*] --> NewValueSelection
  NewValueSelection --> NewValuePreview : EvNewValue
  NewValuePreview --> NewValueSelection : EvNewValueRejected
  NewValuePreview --> NewValueSelection : EvNewValueSaved
  
  state NewValuePreview {
	 State1 -> State2
  }
  
}
@enduml

 

 

Длинные имена

Вы также можете использовать ключевое слово state для сокращения длинного имени состояния.

@startuml
scale 600 width

[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
  state "Accumulate Enough Data\nLong State Name" as long1
  long1 : Just a test
  [*] --> long1
  long1 --> long1 : New Data
  long1 --> ProcessData : Enough Data
}
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
 
@enduml

 

 

Параллельные состояния

Используя оператор -- или ||, вы можете объявлять параллельные подсостояния внутри составного состояния.

@startuml
[*] --> Active

state Active {
  [*] -> NumLockOff
  NumLockOff --> NumLockOn : EvNumLockPressed
  NumLockOn --> NumLockOff : EvNumLockPressed
  --
  [*] -> CapsLockOff
  CapsLockOff --> CapsLockOn : EvCapsLockPressed
  CapsLockOn --> CapsLockOff : EvCapsLockPressed
  --
  [*] -> ScrollLockOff
  ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
  ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}

@enduml

 

 

Направления стрелок

Для изображения стрелок перехода горизонтально используется оператор ->. Следующий синтаксис позволяет задать другое направление.

@startuml

[*] -up-> First
First -right-> Second
Second --> Third
Third -left-> Last

@enduml
Вы также можете сокращать слова в описании стрелок (например, -d-> или -do-> вместо -down->).

Не следует злоупотреблять этой функциональностью: GraphViz в большинстве случаев дает хороший результат без лишних манипуляций.

 

 

Заметки

К состоянию можно добавлять заметки, используя специальные ключевые слова: note left of, note right of, note top of, note bottom of .

Заметки можно определять в несколько строк.

@startuml

[*] --> Active
Active --> Inactive

note left of Active : this is a short\nnote

note right of Inactive
  A note can also
  be defined on
  several lines
end note

@enduml

Можно создавать заметки, не привязанные ни к какому объекту.

@startuml

state foo
note "This is a floating note" as N1

@enduml

 

 

Еще о заметках

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

@startuml

[*] --> NotShooting

state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

note right of NotShooting : This is a note on a composite state

@enduml

 

 

Skinparam

Вы можете использовать команду skinparam для изменения шрифтов и цветов диаграммы

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

Вы можете задавать цвета и шрифты для именованных шаблонов состояний.

@startuml
skinparam backgroundColor LightYellow
skinparam state {
  StartColor MediumBlue
  EndColor Red
  BackgroundColor Peru
  BackgroundColor<<Warning>> Olive
  BorderColor Gray
  FontName Impact
}

[*] --> NotShooting

state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle <<Warning>>
  state "Configuring mode" as Configuring
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

NotShooting --> [*]
@enduml