State diagram
Een state diagram (toestandsdiagram) beschijft de interne toestand van een systeem en de manier waarop je vanuit een bepaalde toestand in een andere toestand kunt komen. Die manieren worden aangegeven met pijlen die van een toestand naar een andere wijzen. De naam die bij een pijl staat geeft aan op welke boodschap of opdracht het systeem reageert bij het bepalen van een nieuwe toestand. Onbekende boodschappen worden genegeerd.
Het systeem begint altijd in een begintoestand. Die noemen we hier Init. Bij elke opdracht die binnenkomt wordt gekeken in welke toestand het systeem op dat moment verkeert en of er een pijl met de naam van de opdracht is die uit die toestand vertrekt naar een andere toestand.
Een systeem kan maar in één toestand tegelijk verkeren. De manier om van een bepaalde toestand naar een andere toestand te komen moet uniek zijn, dat wil zeggen: er mag altijd ten hoogste één pijl met een bepaalde naam uit een toestand vertrekken. Als er meerdere pijlen met dezelfde naam uit een bepaalde toestand zouden vertrekken zou je niet weten welke pijl je moet kiezen.
Je ziet in dit voorbeeld vier states (toestanden):
- Init
- Sine
- Saw
- Exit
Als het systeem in de toestand Init verkeert en de opdracht saw komt binnen, dan gaat het systeem naar de toestand Saw. Als er vervolgens de opdracht sine binnenkomt verandert de toestand niet omdat uit het bolletje Saw geen pijl met de naam sine vertrekt. Het systeem blijft dan in de toestand Saw tot er een opdracht exit of quit binnenkomt.
Opdracht state machine (PDF)
Je kunt deze file downloaden (save as) en
in draw.io importeren met "Open Existing Diagram".
Toepassingen
Wanneer je een situatie tegenkomt waarbij een reactie op een gebeurtenis afhankelijk is van de context dan is vaak een state machine een oplossing. Soms is dat niet voldoende en moet je gaan denken aan machine learning, Markov chains en neurale netwerken, wat je zou kunnen zien als geavanceerde state machines.
Voorbeeld: een afspeelknop die meerdere functies heeft. Als je er één keer op drukt wordt muziek afgespeeld. Druk je er nog een keer op dan stopt het afspelen. Houd je de knop tijdens het afspelen langere tijd ingedrukt dan ga je met grotere sprongen door de muziek heen. En houd je de knop tijdens pauzeren langere tijd ingedrukt dan krijg je een menu met extra keuzes.
Voorbeeld bij een game: pijltjestoetsen kunnen andere betekenis krijgen, afhankelijk van het level waarin je speelt.
State machine
Een state machine is de implementatie van een state diagram.Voorbeeld van een implementatie in Scheme.
Voorbeeld van een implementatie in Java.
Voorbeeld van een implementatie in Python.