Los diagramas de estados son usados para dar una descripción abstracta de el comportamiento de un sistema. Este comportamiento es representado como una serie de eventos que pueden ocurrir en uno o más estados posibles. Using PlantUML to create state diagrams offers several advantages: - Text-Based Language: Quickly define and visualize the states and transitions without the hassle of manual drawing.
- Efficiency and Consistency: Ensure streamlined diagram creation and easy version control.
- Versatility: Integrate with various documentation platforms and support multiple output formats.
- Open-Source & Community Support: Backed by a strong community that continuously contributes to its enhancements and offers invaluable resources.
WARNING This translation need to be updated. WARNING Puedes usar [*] para el punto de inicio y finalización del diagrama de estados. Utilice --> para las flechas. 🎉 Copied! 
 | @startuml
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
@enduml
|
Puede utilizar hide empty description para representar el estado como una caja simple. 🎉 Copied! 
 | @startuml
hide empty description
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
@enduml
|
Un estado también puede ser compuesto. Puedes defirnirlo usando la palabra reservada state y llaves. 🎉 Copied! 
 | @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
|
Sub-estado a sub-estado 🎉 Copied! 
 | @startuml
state A {
state X {
}
state Y {
}
}
state B {
state Z {
}
}
X --> Z
Z --> Y
@enduml
| [Ref. QA-3300] También puedes usar la palabra reservada state para definir nombres largas en un estado. 🎉 Copied! 
 | @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
|
Puedes usar [H] para el histórico y [H*] para el histórico profundo de un subestado. 🎉 Copied! 
 | @startuml
[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
state "Accumulate Enough Data" as long1
long1 : Just a test
[*] --> long1
long1 --> long1 : New Data
long1 --> ProcessData : Enough Data
State2 --> [H]: Resume
}
State3 --> State2 : Pause
State2 --> State3[H*]: DeepResume
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
@enduml
|
También puedes bifurcan y unir usando <<fork>> y <<join>> respectivamente. 🎉 Copied! 
 | @startuml
state fork_state <<fork>>
[*] --> fork_state
fork_state --> State2
fork_state --> State3
state join_state <<join>>
State2 --> join_state
State3 --> join_state
join_state --> State4
State4 --> [*]
@enduml
|
Puedes definir estados concurrentes dentro de un estado compuesto usando los símbolos -- o || como separadores. Separador horizontal -- 🎉 Copied! 
 | @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
|
Separador vertícal || 🎉 Copied! 
 | @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
| [Ref. QA-3086]WARNING This translation need to be updated. WARNING El estereotipo <<choice>> puede ser usado para uso de estado condicional. 🎉 Copied! 
 | @startuml
state "Req(Id)" as ReqId <<sdlreceive>>
state "Minor(Id)" as MinorId
state "Major(Id)" as MajorId
state c <<choice>>
Idle --> ReqId
ReqId --> c
c --> MinorId : [Id <= 10]
c --> MajorId : [Id > 10]
@enduml
|
🎉 Copied! 
 | @startuml
state start1 <<start>>
state choice1 <<choice>>
state fork1 <<fork>>
state join2 <<join>>
state end3 <<end>>
[*] --> choice1 : from start\nto choice
start1 --> choice1 : from start stereo\nto choice
choice1 --> fork1 : from choice\nto fork
choice1 --> join2 : from choice\nto join
choice1 --> end3 : from choice\nto end stereo
fork1 ---> State1 : from fork\nto state
fork1 --> State2 : from fork\nto state
State2 --> join2 : from state\nto join
State1 --> [*] : from state\nto end
join2 --> [*] : from join\nto end
@enduml
| [Ref. QA-404, QA-1159 and GH-887] Puedes agregar punto con los esterotipos <<entryPoint>> y <<exitPoint>> : 🎉 Copied! 
 | @startuml
state Somp {
state entry1 <<entryPoint>>
state entry2 <<entryPoint>>
state sin
entry1 --> sin
entry2 -> sin
sin -> sin2
sin2 --> exitA <<exitPoint>>
}
[*] --> entry1
exitA --> Foo
Foo1 -> entry2
@enduml
|
WARNING This translation need to be updated. WARNING Puedes agregar pin con los estereotipos <<inputPin>> y <<outputPin>> : 🎉 Copied! 
 | @startuml
state Somp {
state entry1 <<inputPin>>
state entry2 <<inputPin>>
state sin
entry1 --> sin
entry2 -> sin
sin -> sin2
sin2 --> exitA <<outputPin>>
}
[*] --> entry1
exitA --> Foo
Foo1 -> entry2
@enduml
| [Ref. QA-4309]WARNING This translation need to be updated. WARNING Puedes agregar expansión con los estereotipos <<expansionInput>> y <<expansionOutput>> : 🎉 Copied! 
 | @startuml
state Somp {
state entry1 <<expansionInput>>
state entry2 <<expansionInput>>
state sin
entry1 --> sin
entry2 -> sin
sin -> sin2
sin2 --> exitA <<expansionOutput>>
}
[*] --> entry1
exitA --> Foo
Foo1 -> entry2
@enduml
| [Ref. QA-4309]WARNING This translation need to be updated. WARNING Puedes usar -> para flechas horizontales. Es posible forzar la dirección de las flechas usando la siguiente sintaxis: -down-> o --> -right-> o -> (flecha por defecto)-left-> -up->
🎉 Copied! 
 | @startuml
[*] -up-> First
First -right-> Second
Second --> Third
Third -left-> Last
@enduml
|
Puedes acortar la definición de la flecha usando sólamente el primer carácter del nombre de la dirección (por ejemplo, -d- en lugar de-down- ) o los dos primeros caracteres (-do- ). Por favor tenga en cuenta que no debería abusar de esta esta funcionalidad : Graphviz usualmente devuelve buenos resultados sin necesidad de ajustes. Puedes cambiar el color y/o el estilo de la línea. 🎉 Copied! 
 | @startuml
State S1
State S2
S1 -[#DD00AA]-> S2
S1 -left[#yellow]-> S3
S1 -up[#red,dashed]-> S4
S1 -right[dotted,#blue]-> S5
X1 -[dashed]-> X2
Z1 -[dotted]-> Z2
Y1 -[#blue,bold]-> Y2
@enduml
| [Ref. Incubation: Change line color in state diagrams] También puedes definir notas usando las palabras reservadas note left of , note right of , note top of , note bottom of . También puedes definir notas de varias líneas. 🎉 Copied! 
 | @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
| También puedes tener notas flotantes. 🎉 Copied! 
 | @startuml
state foo
note "This is a floating note" as N1
@enduml
| Puedes poner notas sobre la transición de estados o conexiones, con la palabra reservada note on link . 🎉 Copied! 
 | @startuml
[*] -> State1
State1 --> State2
note on link
this is a state-transition note
end note
@enduml
|
Puedes colocar notas en estados compuestos. 🎉 Copied! 
 | @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
|
🎉 Copied! 
 | @startuml
state CurrentSite #pink {
state HardwareSetup #lightblue {
state Site #brown
Site -[hidden]-> Controller
Controller -[hidden]-> Devices
}
state PresentationSetup{
Groups -[hidden]-> PlansAndGraphics
}
state Trends #FFFF77
state Schedule #magenta
state AlarmSupression
}
@enduml
| [Ref. QA-1812] Puedes usar el comando skinparam para cambiar los colores y las fuentes de los dibujos Puedes usar este comando: Puedes definir colores y fuentes específicas para estados estereotipados. 🎉 Copied! 
 | @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
|
Prueba de todos los skinparam especificos de los diagramas de estado 🎉 Copied! 
 | @startuml
skinparam State {
AttributeFontColor blue
AttributeFontName serif
AttributeFontSize 9
AttributeFontStyle italic
BackgroundColor palegreen
BorderColor violet
EndColor gold
FontColor red
FontName Sanserif
FontSize 15
FontStyle bold
StartColor silver
}
state A : a a a\na
state B : b b b\nb
[*] -> A : start
A -> B : a2b
B -> [*] : end
@enduml
|
Puedes cambiar el estilo. 🎉 Copied! 
 | @startuml
<style>
stateDiagram {
BackgroundColor Peru
'LineColor Gray
FontName Impact
FontColor Red
arrow {
FontSize 13
LineColor Blue
}
}
</style>
[*] --> 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
| [Ref. GH-880]WARNING This translation need to be updated. WARNING You can change the color or style of individual state using the following notation: With background color first (#color ), then line style and line color (##[style]color ). 🎉 Copied! 
 | @startuml
state FooGradient #red-green ##00FFFF
state FooDashed #red|green ##[dashed]blue {
}
state FooDotted ##[dotted]blue {
}
state FooBold ##[bold] {
}
state Foo1 ##[dotted]green {
state inner1 ##[dotted]yellow
}
state out ##[dotted]gold
state Foo2 ##[bold]green {
state inner2 ##[dotted]yellow
}
inner1 -> inner2
out -> inner2
@enduml
|
[Ref. QA-1487] #color;line:color;line.[bold|dashed|dotted];text:color
FIXME 🚩 text:color seems not to be taken into account FIXME 🎉 Copied! 
 | @startuml
@startuml
state FooGradient #red-green;line:00FFFF
state FooDashed #red|green;line.dashed;line:blue {
}
state FooDotted #line.dotted;line:blue {
}
state FooBold #line.bold {
}
state Foo1 #line.dotted;line:green {
state inner1 #line.dotted;line:yellow
}
state out #line.dotted;line:gold
state Foo2 #line.bold;line:green {
state inner2 #line.dotted;line:yellow
}
inner1 -> inner2
out -> inner2
@enduml
@enduml
|
🎉 Copied! 
 | @startuml
state s1 : s1 description
state s2 #pink;line:red;line.bold;text:red : s2 description
state s3 #palegreen;line:green;line.dashed;text:green : s3 description
state s4 #aliceblue;line:blue;line.dotted;text:blue : s4 description
@enduml
| [Adapted from QA-3770] With State you can use alias , like: 🎉 Copied! 
 | @startuml
state alias1
state "alias2"
state "long name" as alias3
state alias4 as "long name"
alias1 : ""state alias1""
alias2 : ""state "alias2"""
alias3 : ""state "long name" as alias3""
alias4 : ""state alias4 as "long name"""
alias1 -> alias2
alias2 -> alias3
alias3 -> alias4
@enduml
| or: 🎉 Copied! 
 | @startuml
state alias1 : ""state alias1""
state "alias2" : ""state "alias2"""
state "long name" as alias3 : ""state "long name" as alias3""
state alias4 as "long name" : ""state alias4 as "long name"""
alias1 -> alias2
alias2 -> alias3
alias3 -> alias4
@enduml
|
Simple example 🎉 Copied! 
 | @startuml
state "A" as stateA
state "C" as stateC {
state B
}
json jsonJ {
"fruit":"Apple",
"size":"Large",
"color": ["Red", "Green"]
}
@enduml
| [Ref. QA-17275] For another example, see on JSON page. | |