3.1Ontwerpen met behulp van toestandsdiagrammen¶
Inleiding¶
In deze module leer je te werken met toestandsdiagrammen. Als introductie daarop kun je met de gehele klas de volgende opdracht doen.
Automaat bewaker
Toestanden¶
Wellicht heb je de volgende toestanden gevonden, ook al noem je ze waarschijnlijk anders
- Waakzaam, rondkijkend
- Alert, klar voor actie, rondkijkend
- Gealarmeerd, achter vijand aan lopend
- Verdwaasd, rondlopend
- Dood
Op basis van deze toestanden kun je een toestandsdiagram maken, waarin duidelijk wordt hoe de bewaker van de ene toestand in de andere komt. De getallen geven de toestanden aan zoals hierboven staat beschreven.

Je kunt in het toestandsdiagram bijvoorbeeld zien dat als de bewaker in toestand 1 is en hij ziet een vijand, dan wordt de toestand van de bewaker 2.
In de bovenstaande uitwerking zie je totaal 5 toestanden en 6 toestandsovergangen. Misschien zijn er wel meer hoor, alleen in dit korte fragment kun je ze niet allemaal zien.
Het losse pijltje naar toestand 1 betekent dat dit de begintoestand is, oftewel de initiële toestand.
Frisdrankautomaat¶
Hieronder zie je een voorbeeld van een onderdeel van een frisdrankautomaat. Dit onderdeel houdt bij hoeveel geld de gebruiker van de automaat heeft ingeworpen. Voor het gemak gaan we uit van slechts twee munten: 50 cent en 1 euro. En alle frisdranken in de automaat kosten 2 euro.

De bollen zijn toestanden. Dit toestandsdiagram kent dus vijf toestanden. De frisdrankautomaat begint in de starttoestand, dat is in dit geval de toestand ‘Start: 0 euro’. Bij elke toestand zie je enkele overgangen. Bijvoorbeeld de overgang van de starttoestand ‘0 euro’ naar ‘0,5 euro’. Die toestandsovergang vindt plaats als de gebruiker begint met het inwerpen van een muntstuk van 50 eurocent.
Je ziet dat een toestandsovergang ook naar dezelfde toestand kan gaan. Kijk maar bij de toestand ‘2 euro’. Na de toestandsovergang ‘Inworp 50 cent’ is de toestand nog steeds ‘2 euro’.
Je kunt er zelf even mee oefenen. Klik op het plaatje hieronder om te activeren. Via de blauw en oranje knop kun je zogenaamd 50 cent of 1 euro inwerpen en dan zie je in welke toestand de automaat terecht komt.

Een toestandsovergang wordt meestal uitgevoerd op basis van informatie uit één van de sensoren. Als iemand één euro in de frisdrankautomaat doet, wordt dat door één of meerdere sensoren gedetecteerd. Hoe dat precies werkt is hierbij niet belangrijk. Uit de toestandsdiagram kun je opmaken naar welke toestand de automaat moet gaan als iemand die euromunt inwerpt.
Solution to Exercise 3
1
2
niet
Acties in een toestandsdiagram¶
Het vorige toestandsdiagram is nog niet volledig, de gebruiker moet immers wel een frisdrank kunnen selecteren. In het volgende toestandsdiagram voegen we een overgang ‘selectie’ toe aan alle toestanden. ‘Selectie’ betekent dat de gebruiker een frisdrank kiest.

Aan een toestandsovergang kan een actie worden gekoppeld. Bij de frisdrankautomaat wordt de actie: ‘geef frisdrank’ uitgevoerd als de gebruiker een frisdrank selecteert en de toestand is: ‘2 euro’. Acties zijn altijd gekoppeld aan toestandsovergangen en niet aan toestanden. Een toestandsovergang mag één of meer acties hebben, maar dat hoeft niet. Voor het uitvoeren van acties worden vaak actuatoren gebruikt, zoals een lampje, display of motor.
In deze module gebruiken we steeds een dubbele punt om het onderscheid te maken tussen toestandsovergang en actie.
<toestandsovergang> : <actie>
Solution to Exercise 4
Uitleg
De automaat houdt bij hoeveel geld (50 cent en 1 euro-muntstukken) er is ingeworpen. Pas als het totaal gelijk is of meer dan 2 euro kan de gebruiker een frisdrank selecteren. De automaat geeft geen geld terug (niet een erg klantvriendelijke automaat dus).
3.2Voorbeelden¶
Inleiding¶
Voorbeeld: lichtregulering¶
Uitwerking opdracht a)¶
Uitwerking opdracht b)¶
Voorbeeld: tamagotchi¶
Voorbeeld: valdetectie¶
3.3Correcte toestandsdiagrammen¶
Tabel met alle toestandsovergangen¶
Voor het overzicht laten we de toestandsovergangen die naar dezelfde toestand verwijzen ook wel eens weg, zoals hieronder.

Het is echter wel verstandig om goed na te denken over wat er in alle gevallen gebeurt. Bijvoorbeeld, wat gebeurt er in toestand ‘1 euro’ als de gebruiker een frisdrank selecteert? Door over alle mogelijkheden na te denken voorkom je fouten die je later veel tijd kosten om te herstellen. Je kunt dat ook in een tabel weergeven door alle toestanden te combineren met alle mogelijke toestandsovergangen. Daarbij geef je voor alle mogelijkheden aan wat de nieuwe toestand wordt.
Toestand ↓ / Toestandsovergang → | Inworp 50 cent | Inworp 1 euro | Selectie |
---|---|---|---|
Start: | 0 euro | 0,5 euro | 1 euro |
0,5 euro | 1 euro | ||
1 euro | |||
1,5 euro | |||
2 euro |
In de bovenstaande tabel zie je alle toestanden in de linker kolom. Je ziet ook alle mogelijke gebeurtenissen in de bovenste rij. Voor iedere combinatie moet de tabel beschrijven wat de nieuwe toestand wordt. Dit kan dus ook dezelfde toestand blijven. De tabel hierboven is nog niet volledig ingevuld.
Solution to Exercise 5
Uitleg
Toestand ↓ / Toestandsovergang → | Inworp 50 cent | Inworp 1 euro | Selectie |
---|---|---|---|
Start: | 0 euro | 0,5 euro | 1 euro |
0,5 euro | 1 euro | 1,5 euro | 0,5 euro |
1 euro | 2 euro | 2 euro | 1 euro |
1,5 euro | 2 euro | 2 euro | 1,5 euro |
2 euro | 2 euro | 2 euro | 2 euro |
Regels voor een toestandsdiagram¶
Een toestandsdiagram is gebonden aan strenge regels:
- Een toestandsdiagram bestaat uit toestanden (bollen) en toestandsovergangen (pijlen)
- Alle toestanden worden weergegeven als bollen. In de bol staat een korte beschrijving van de toestand.
- Er is altijd precies één starttoestand, die herken je aan de pijl die niet verbonden is aan een andere toestand.
- Alle toestandsovergangen worden weergegeven als een pijl, die één kant op wijst. Bij de pijl staat een korte beschrijving van de toestandsovergang.
- Een toestand kan nooit twee of meer keer dezelfde toestandsovergang hebben.
- Een toestandsovergang mag dezelfde toestand als begin en eind hebben.
- Bij een toestandsovergang mogen één of meerdere acties staan. In deze module gebruiken we steeds een dubbele punt om het onderscheid te maken tussen toestandsovergang en actie.