Toestandsdiagram

Nieuwkomers in het toestandsmachineformalisme verwarren toestandsdiagrammen vaak met stroomdiagrammen. De onderstaande figuur toont een vergelijking tussen een toestandsdiagram en een stroomdiagram. Een toestandsmachine (paneel (a)) voert acties uit in antwoord op expliciete gebeurtenissen. Het stroomdiagram (paneel (b)) daarentegen heeft geen expliciete gebeurtenissen nodig, maar gaat automatisch van knooppunt naar knooppunt in zijn grafiek bij voltooiing van activiteiten.

Statendiagram (a) en stroomdiagram (b)

Knooppunten van stroomdiagrammen zijn randen in de geïnduceerde grafiek van toestanden.De reden hiervoor is dat elk knooppunt in een stroomdiagram een programmaopdracht vertegenwoordigt.Een programmaopdracht is een actie die moet worden uitgevoerd.Het is dus geen toestand, maar wanneer het wordt toegepast op de toestand van het programma, resulteert het in een overgang naar een andere toestand.

In meer detail, de broncode listing vertegenwoordigt een programmagrafiek.Het uitvoeren van de programmagrafiek (parseren en interpreteren) resulteert in een toestandsgrafiek.Dus elke programmagrafiek induceert een toestandsgrafiek.Conversie van de programmagrafiek naar de bijbehorende toestandsgrafiek wordt het “ontvouwen” van de programmagrafiek genoemd.

De programmagrafiek is een opeenvolging van commando’s.Als er geen variabelen bestaan, dan bestaat de toestand alleen uit de program counter, die bijhoudt waar in het programma we ons bevinden tijdens de uitvoering (wat is het volgende commando dat moet worden toegepast).

In dit geval bevindt de program counter zich vóór het uitvoeren van een commando op een bepaalde positie (toestand voordat het commando wordt uitgevoerd).Door het commando uit te voeren, verplaatst de program counter zich naar het volgende commando.Aangezien de programmateller de gehele toestand is, volgt hieruit dat het uitvoeren van het commando de toestand heeft veranderd.Dus het commando zelf komt overeen met een overgang tussen de twee toestanden.

Nu beschouwen we het volledige geval, waarin variabelen bestaan en worden beïnvloed door de programmacommando’s die worden uitgevoerd.Dan verandert tussen verschillende locaties van de programmateller niet alleen de programmateller, maar kunnen variabelen ook van waarde veranderen, als gevolg van de uitgevoerde commando’s.Bijgevolg, zelfs als we een of ander programmacommando opnieuw uitvoeren (b.v. in een lus), betekent dit niet dat het programma zich in dezelfde toestand bevindt.

In het vorige geval zou het programma zich in dezelfde toestand bevinden, omdat de hele toestand alleen maar de programmateller is, dus als de programmateller naar dezelfde positie wijst (het volgende commando) is het voldoende om aan te geven dat we ons in dezelfde toestand bevinden.Als de toestand echter variabelen bevat, dan kunnen we, als die van waarde veranderen, op dezelfde programmalocatie zijn met verschillende variabele waarden, wat betekent dat we in een andere toestand zijn in de toestandsruimte van het programma. De term “ontvouwen” is afkomstig van deze vermenigvuldiging van locaties bij het produceren van de toestandsgrafiek uit de programmagrafiek.

Een representatief voorbeeld is een do-lus die een of andere teller verhoogt totdat deze overloopt en weer 0 wordt.Hoewel de do-lus iteratief hetzelfde commando uitvoert, dus de programmagrafiek een cyclus uitvoert, is de toestandsruimte geen cyclus, maar een lijn. Dit komt doordat de toestand de programmalocatie is (hier cyclisch) in combinatie met de waarde van de teller, die strikt toeneemt (tot de overflow), dus verschillende toestanden worden achtereenvolgens bezocht, tot de overflow.Na de overflow wordt de teller weer 0, dus de begintoestand wordt opnieuw bezocht in de toestandsruimte, waarmee een cyclus in de toestandsruimte wordt afgesloten (ervan uitgaande dat de teller op 0 was geïnitialiseerd).

De figuur hierboven probeert die omkering van rollen te laten zien door de bogen van de toestandsdiagrammen uit te lijnen met de verwerkingsfasen van het stroomschema.

U kunt een stroomschema vergelijken met een lopende band in de fabricage, omdat het stroomschema de voortgang van een of andere taak van begin tot eind beschrijft (bijv, het omzetten van broncode-input in objectcode-output door een compiler). Een toestandsmachine heeft in het algemeen geen notie van een dergelijke progressie. De deur toestandsmachine bovenaan dit artikel, bijvoorbeeld, is niet in een meer gevorderd stadium wanneer hij in de “gesloten” toestand is, vergeleken met in de “geopende” toestand; hij reageert gewoon anders op de open/dicht gebeurtenissen. Een toestand in een toestandsmachine is een efficiënte manier om een bepaald gedrag te specificeren, eerder dan een stadium van verwerking.

Geef een reactie

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