Articles

Wat is een toestandsmachine? – Statecharts

Wat is een toestandsmachine?

Wikipedia definieert een eindige-toestandsmachine (FSM) als:

een abstracte machine die op elk gegeven moment in precies een van een eindig aantal toestanden kan zijn. De FSM kan van de ene toestand naar de andere overgaan als reactie op bepaalde externe inputs; de overgang van de ene toestand naar de andere wordt een transitie genoemd. Een FSM wordt gedefinieerd door een lijst van zijn toestanden, zijn begintoestand, en de voorwaarden voor elke overgang.

En verder:

Een toestand is een beschrijving van de status van een systeem dat wacht om een overgang uit te voeren.

Een toestandsmachine is ook een visuele voorstelling van zo’n abstracte machine.

Voorbeeld

Hier volgt een visuele voorstelling van een eenvoudige toestandsmachine. Het is een model van een eenvoudige aan/uit-schakelaar.

Een eenvoudige aan/uit-schakelaar met twee toestanden.Een toestandsmachine met twee toestanden, "aan" en "uit", waarbij de "flick"-gebeurtenis de overgang tussen beide mogelijk maakt. De "aan"-toestand definieert acties om een licht aan en uit te zetten bij respectievelijk binnenkomst en vertrek"on" and "off", the "flick" event transitioning between them. The On state defines actions to turn a light on and off on entry and exit, respectively

Enige observaties over deze machine.

  • Deze machine bestaat uit twee toestanden, “aan” en “uit”. Deze machine kan zich dus op elk moment in precies een van de twee toestanden bevinden. Met andere woorden, de overgangen tussen de toestanden zijn ogenblikkelijk.
  • De “flick”-gebeurtenis veroorzaakt de overgang tussen de toestanden.
  • Wanneer de machine in de “aan”-toestand komt, treedt een neveneffect op. Een licht wordt ingeschakeld.
  • Als de machine de “aan”-toestand verlaat, treedt een ander neveneffect op. Een lampje gaat uit.

Deze eenvoudige toestandsmachine is vergelijkbaar met een booleaanse variabele – die waar of onwaar kan zijn – die de aan-stand van iets regelt.

Wat is toestand eigenlijk?

Programmastaat is de verzameling van alle variabelen in een programma en hun waarden op een willekeurig moment (zie Wikipedia). Een programma of software-onderdeel dat vijf onafhankelijke variabelen heeft, die elk waar of onwaar kunnen zijn, kan zich in theorie in elk van 32 toestanden bevinden (2 tot de macht van 5 = 32). Een programma zal echter vaak ongeldige toestanden hebben, en in traditionele software worden de variabelen zorgvuldig gecontroleerd en gemanipuleerd op zo’n manier dat deze ongeldige toestanden niet voorkomen.

Een toestandsmachine is een alternatieve manier om de toestand van een programma te modelleren: In plaats van onafhankelijke variabelen te definiëren, wordt een machine specifiek ontworpen om te bepalen welke toestanden mogelijk zijn, en wanneer een machine in een bepaalde toestand is, welke volgende toestand is toegestaan. Die vijf onafhankelijke booleaanse variabelen worden vervangen door een enkele toestandsmachine die intrinsiek alleen in geldige toestanden kan zijn.

Relatie met statecharts

Het begrijpen van state machines is bijna hetzelfde als het begrijpen van statecharts. In veel opzichten zijn statecharts de “grotere broer” van state machines, ontworpen om enkele van de beperkingen van state machines te overwinnen. Een statechart is in wezen een toestandsmachine die toestaat dat elke toestand meer machines omvat, op een hiërarchische wijze. Dit is om enkele van de beperkingen te overwinnen die inherent zijn aan state machines.

Het primaire doel van statecharts.github.io is om je te helpen statecharts te begrijpen. Begrip van toestandsmachines is een leuke bijkomstigheid. Wat is een statechart?

Abstracte machine vs runtime

Er moet een belangrijk onderscheid worden gemaakt tussen de abstracte machine zelf (bijvoorbeeld de tekening van een state machine, of de code) en de meer concrete runtime uitvoering van een bepaalde abstracte machine. Dit onderscheid is vergelijkbaar met het verschil tussen een klasse (abstracte definitie) en een object (concrete instantiëring). Evenzo kunnen er voor een enkele abstracte machine vele uitvoeringen zijn, net zoals er vaak vele instanties van een bepaalde klasse zijn.

De termen “statechart”, “state machine” en “FSM” worden vaak gebruikt om zowel de abstracte als de runtime vorm aan te duiden, hoewel de runtime vorm soms de qualifier “run” of “execution” heeft, zoals in “state machine execution” of “statetchart run”.

Een abstracte toestandsmachine is een software-component die een eindige reeks toestanden definieert:

  • Een toestand wordt gedefinieerd als de begintoestand. Wanneer een machine begint met uitvoeren, gaat hij automatisch naar deze toestand.
  • Elke toestand kan acties definiëren die optreden wanneer een machine die toestand binnengaat of verlaat. Acties zullen typisch neveneffecten hebben.
  • Elke toestand kan gebeurtenissen definiëren die een overgang triggeren.
  • Een overgang definieert hoe een machine op de gebeurtenis zou reageren, door een toestand te verlaten en een andere toestand binnen te gaan.
  • Een overgang kan acties definiëren die optreden wanneer de overgang plaatsvindt. Acties zullen typisch neveneffecten hebben.

Bij het “draaien” van een toestandsmachine, wordt deze abstracte toestandsmachine uitgevoerd. Het eerste dat gebeurt is dat de toestandsmachine in de “initial state” komt. Daarna worden gebeurtenissen aan de machine doorgegeven zodra ze zich voordoen. Wanneer een gebeurtenis plaatsvindt:

  • De gebeurtenis wordt vergeleken met de overgangen van de huidige toestand.
  • Als een overgang overeenkomt met de gebeurtenis, dan “gebeurt” die overgang.
  • Door het “gebeuren” van een transitie worden toestanden verlaten en betreden en worden de relevante acties uitgevoerd
  • De machine bevindt zich onmiddellijk in de nieuwe toestand, klaar om de volgende gebeurtenis te verwerken.

Verder lezen

  • Wat is een statechart? – Bouw voort op de kennis van toestandsmachines
  • Een voorbeeld van een toestandsmachine – Leg enkele concepten van een toestandsdiagram uit door voort te bouwen op de eenvoudige “aan uit” toestandsmachine.

Laat een antwoord achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *