Wat is een toestandsdiagram?
Een toestandsdiagram wordt gebruikt om te laten zien in welke toestanden een object van een klasse zich kan bevinden en wat ervoor nodig is om het object van de ene toestand naar een andere te laten overgaan. Door een toestandsdiagram op te stellen, kun je systematisch nadenken over de mogelijke toestanden en overgangen van een object binnen een applicatie.
Casus
Stel je voor dat je een game ontwikkelt waarin een speler een kamer betreedt. Door een kandelaar te verwijderen, kan een kluis geopend worden, maar de deur moet eerst gesloten zijn. Het systeem heeft drie toestanden: Wait, Lock en Open. Het diagram begint bij een initial pseudostate en eindigt bij een final state.
Mogelijke uitwerking van de casus
Figuur 1: Uitwerking game casus Bron: UML Distilled (2004) door Martin Fowler, Pearson Education, 3e druk.
Hoe zit een toestandsdiagram in elkaar?
Een toestandsdiagram bestaat uit verschillende elementen:
- Toestanden: Dit zijn de verschillende statussen die een object kan aannemen, zoals ‘Beschikbaar’, ‘Uitgeleend’, of ‘Geannuleerd’.
- Overgangen: Pijlen die de overgangen van de ene toestand naar de andere aangeven. Ze worden getriggerd door gebeurtenissen, zoals ‘Boek uitgeleend’ of ‘Boek teruggebracht’.
- Triggers: Gebeurtenissen die de overgang van de ene toestand naar de andere activeren, bijvoorbeeld het klikken op een knop om een boek uit te lenen.
- Condities (Guards): Voorwaarden die moeten worden voldaan voordat een overgang plaatsvindt, bijvoorbeeld het controleren of een boek daadwerkelijk beschikbaar is voordat het kan worden uitgeleend.
- Activiteiten: Gedragingen die worden uitgevoerd tijdens de overgang, zoals het bijwerken van de status van een boek.
- Start- en eindtoestand: De begin- en eindpunten van het toestandsdiagram, die aangeven waar het object zich in de levenscyclus bevindt.
Subtoestanden en gelijktijdige toestanden
Een object kan tegelijkertijd in meerdere toestanden verkeren of geneste toestanden hebben. Een voorbeeld is het toestandsdiagram van Figuur 2 van CourseAttempt, waarin een cursus zich in één van de drie exclusieve toestanden kan bevinden: Studying, Passed of Failed. Vanuit Studying kan een student slagen als alle opdrachten voltooid zijn of falen als de eindtoets niet wordt gehaald.
Figuur 2: Toestandsdiagram van de klasse CourseAttempt
Mnojoumian, T. (z.d.). CourseAttempt State Diagram. Overgenomen van https://www.site.uottawa.ca/~tcl/gradtheses/mnojoumian/ThesisFiles/FinalSpec/UML/15.3.11.html
Hoe gebruik je een toestandsdiagram?
Een toestandsdiagram wordt gebruikt om de verschillende toestanden van een object te modelleren en te begrijpen hoe het van de ene toestand naar de andere kan overgaan. Het helpt je de dynamiek van objecten in je systeem te visualiseren, waardoor het eenvoudiger wordt om het gedrag van het systeem te begrijpen en te implementeren.
Een toestandsdiagram kan in het technisch ontwerp worden opgenomen om de werking van componenten te verduidelijken. Ontwikkelaars gebruiken het als basis voor de implementatie, bijvoorbeeld in een state machine of een objectgeoriënteerd ontwerp.
Casus
Stel je voor dat je een systeem ontwikkelt voor een online boekingsplatform. Het toestandsdiagram kan helpen om te begrijpen hoe een reservering verschillende toestanden kan doorlopen, zoals ‘Wacht op betaling’, ‘Betaald’, en ‘Geannuleerd’, en welke gebeurtenissen ervoor zorgen dat het systeem van de ene naar de andere toestand gaat.
Mogelijke uitwerking van de casus
Figuur 3: Uitwerking boekingsplatform casus
Bronnen
Fowler, M. (2004). UML Distilled (3e editie). Pearson Education, Inc. Mnojoumian, T. (z.d.). CourseAttempt State Diagram. Overgenomen van https://www.site.uottawa.ca/~tcl/gradtheses/mnojoumian/ThesisFiles/FinalSpec/UML/15.3.11.html