Documentație Diagrame UML de Stare (State Machine)
Cuprins
- Introducere
- Concepte fundamentale
- Elementele unei diagrame de stare
- Notația PlantUML
- Exemple practice
- Bune practici
- Resurse suplimentare
Introducere
Diagramele de stare (state machine diagrams) sunt un tip de diagrame comportamentale din familia Unified Modeling Language (UML) care descriu comportamentul unui sistem în funcție de stările sale și de tranzițiile între acestea. Aceste diagrame sunt esențiale pentru modelarea sistemelor reactive și orientate pe evenimente, oferind o reprezentare vizuală a modului în care un obiect își schimbă starea ca răspuns la diverse evenimente.
Diagramele de stare sunt deosebit de utile în următoarele contexte:
- Proiectarea sistemelor complexe cu multiple stări de funcționare
- Modelarea interfeței cu utilizatorul și a fluxurilor de interacțiune
- Definirea protocoalelor de comunicare
- Implementarea sistemelor reactive sau bazate pe evenimente
- Specificarea comportamentului obiectelor în timp
Originile diagramelor de stare pot fi trasate până la conceptul de automat finit (finite state machine) din teoria computațională, fiind adaptate și extinse în contextul modelării orientate pe obiecte.
Concepte fundamentale
1. State (Stare)
O stare reprezintă o condiție sau situație în timpul vieții unui obiect în care acesta satisface anumite condiții, efectuează anumite activități sau așteaptă un anumit eveniment. Un obiect rămâne într-o stare pentru o perioadă finită de timp.
Tipuri de stări:
- Stare inițială - punctul de start al mașinii de stare
- Stare finală - punctul în care mașina de stare își încheie execuția
- Stare simplă - stare fără substări
- Stare compusă - stare care conține substări
- Stare submașină - stare care face referire la o altă mașină de stare
- Stare istorie - stare care “ține minte” ultima substare activă
- Stare paralelă - stare divizată în regiuni concurente
2. Tranziție
O tranziție reprezintă trecerea de la o stare la alta, de obicei declanșată de un eveniment. Tranzițiile pot avea condiții de gardă și pot executa acțiuni atunci când sunt traversate.
Componentele unei tranziții:
- Eveniment declanșator - stimulul care inițiază tranziția
- Condiție de gardă - condiție care trebuie să fie adevărată pentru ca tranziția să fie executată
- Efect/Acțiune - comportament executat la traversarea tranziției
3. Eveniment
Un eveniment este un stimul semnificativ care poate declanșa o tranziție între stări. Evenimentele pot fi:
- Eveniment de semnal - un semnal extern primit de obiect
- Eveniment de apel - invocarea unei operații
- Eveniment de timp - trecerea unui interval de timp specificat
- Eveniment de schimbare - modificarea unei condiții specificate
4. Acțiune și Activitate
- Acțiune - comportament atomic, neîntreruptibil
- Activitate - comportament care durează în timp și poate fi întrerupt
Notația PlantUML
PlantUML este un instrument care permite crearea diagramelor UML, inclusiv diagrame de stare, utilizând un limbaj simplu de text. Sintaxa de bază pentru diagramele de stare în PlantUML este:
@startuml
[* --> Stare1
Stare1 --> Stare2 : Eveniment1
Stare2 --> Stare3 : Eveniment2
Stare3 --> [*
@enduml
Elemente de bază în PlantUML pentru diagramele de stare
1. Stări
2. Tranziții
3. Stări inițiale și finale
5. Stări ortogonale (paralele)
6. Stări istorie
Exemple practice
Exemplul : Proces de comandă online
Exemplul : ATM
Exemplul : Document approval
Bune practici
1. Claritate și lizibilitate
- Utilizați nume clare și descriptive pentru stări și tranziții
- Evitați diagramele aglomerate cu prea multe stări
- Organizați stările în mod logic pe baza relațiilor lor
- Folosiți stări compuse pentru a grupa stările conexe
- Adnotați diagrama cu note explicative unde este necesar
2. Granularitate adecvată
- Alegeți nivelul potrivit de detaliu pentru contextul diagramei
- Folosiți stări compuse și submașini pentru a gestiona complexitatea
- Creați diagrame separate pentru niveluri diferite de detaliu
3. Completitudine
- Asigurați-vă că toate stările au un mod de a fi atinse
- Definiți tranziții pentru toate evenimentele posibile în fiecare stare
- Includeți tranziții de eroare și tratarea excepțiilor
- Verificați că nu există stări “dead-end” (în afară de stările finale)
4. Evitarea capcanelor comune
- Evitați tranzițiile necondiționionate multiple din aceeași stare
- Evitați condițiile de gardă contradictorii
- Evitați stările tranzitorii inutile