4. Schematechnieken _________________________________________
In dit hoofdstuk worden drie schematechnieken behandeld: aktie-diagrammen, stroomschema's en Nassi-Shneidermandiagrammen. Een schema is een goed hulpmiddel om (vooral wat ingewikkeldere programma's) te begrijpen en te ontwerpen.
Grote programma's, met veel opdrachtregels, herhalingen en selecties, worden vaak onoverzichtelijke lappen tekst. Om zo'n programma te begrijpen is het vaak handig om het programma te 'tekenen', d.w.z. in een schema weer te geven. Hierdoor wordt het makkelijker het verloop van het programma te volgen. Vooral om inzicht te krijgen in programma's van een ander (of je eigen programma's die je jaren geleden hebt geschreven) zijn schema's goede hulpmiddelen. Schema’s zijn ook belangrijk om de verschillende niveau’s van detaillering die nodig zijn om tot een werkend programma te komen (de stapsgewijze verfijning uit hoofdstuk 3) tot uitdrukking te brengen.
Er zijn zeer veel verschillende schematechnieken ontwikkeld. Van deze technieken behandelen we er hier drie: aktiediagrammen, stroomschema's, en Nassi-Shneiderman diagrammen. Om de verschillende schema technieken toe te lichten zullen we steeds hetzelfde probleem voorbeeld gebruiken. Dat voorbeeld betreft het parasiteringsgedrag van een sluipwesp. Parasitaire sluipwespen uit het geslacht Leptopulina leggen hun eieren in larven van fruitvliegjes. Deze gastheren leven afhankelijk van tot welke soort fruitvlieg ze behoren in verschillende substraten, bijvoorbeeld in rottend fruit. De sluipwesp sondeert met haar legboor dit substraat op zoek naar gastheren. Als ze niet binnen een bepaalde tijd een fruitvlieglarf heeft gevonden verliest ze haar geduld en verlaat ze het substraat op zoek naar een volgend. Als ze wel binnen een bepaalde tijd een prooi gevonden heeft wordt die getest op geschiktheid en in geschikt gebleken gastheren legt ze 1 of meer eieren. Dit proces herhaalt zich tot dat haar eieren op zijn of tot dat ze geen legdrang meer vertoont.
Pagina 4 - 2
4.1 Aktie-diagrammen Aktie-diagrammen kennen de volgende komponenten als mogelijke bouwstenen: Opeenvolging (sekwentie), detailering, voorwaarde (konditie), alternatieven, en herhaling. Elke komponent heeft een bijbehorend schema onderdeel. Hieronder volgt een overzicht. Opeenvolging: achtereenvolgende processen staan onder elkaar. [ proces 1 [ proces 2 [ proces 3
Detailering: elk proces kan opgebouwd zijn uit opeenvolgende deelprocessen. /---proces 1: | [ deelproces 1 | [ deelproces 2 | [ deelproces 3 \---
Voorwaarde: een voorwaarde gaat aan de uitvoering van een of meer deelproces(sen) vooraf /---voorwaarde: | [ deelproces \---
Alternatieven: verschillende opeenvolgende voorwaarden vormen samen een reeks van alternatieven. /---voorwaarde 1: | [ deelproces 1 |---voorwaarde 2: | [ deelproces 2 |---voorwaarde 3: | [ deelproces 3 \---
Herhaling: Zolang aan een voorwaarde wordt voldaan worden een of meer deelprocessen uitgevoerd. /===zolang voorwaarde doe # [ deelproces # [ deelproces \===
of /===herhaal
Hoofdstuk 4
Pagina 4 - 3
# [ deelproces # [ deelproces \===totdat voorwaarde
Als we deze bouwstenen gebruiken om ons gedragsmodel van de sluipwesp in een algoritme te beschrijven komen we tot het volgende aktie-diagram. /---LEPTO: parasitering | [ Bepaal de initiele setting | /=== zolang er nog eieren zijn parasiteer: | # /===herhaal: zoek prooi | # # [sondeer rottend fruit | # # [verminder geduld | # \===totdat prooi gevonden is of het geduld op | # /---Als prooi is gevonden begin volgende fase | # | /--- Als prooi geschikt: | # | | [ injekteer een ei | # | | [ poets achterlijf | # | | [ verhoog geduld | # | |---Als prooi matig geschikt: | # | | [ injekteer een ei | # | | [ poets achterlijf | # | \---Als prooi ongeschikt: doe niets | # |---Als geen prooi gevonden: | # | [ ga een andere gastheer zoeken | # \--| \=== \---
4.2 Stroomschema's Een stroomschema is opgebouwd uit verschillende blokjes. Elk van deze blokjes staat voor een bepaalde handeling. De verschillende blokjes en hun betekenissen staan in bijlage 2. De belangrijkste blokken zijn de rechthoek, waarin de elementaire opdrachten staan, False Test en de ruiten, waarin de testen of voorwaarden staan
Opdracht
Opdracht 1
De blokken worden onderling True verbonden door pijlen die de loop van het algoritme aangeOpdracht 2 ven. Door bovenaan te beginnen en de pijlen te volgen Hoofdstuk 4
Pagina 4 - 4
(waarbij in elke ruit één van de splitsingen genomen moet worden) kan men de uitvoering van het hele algoritme nagaan. Het volgende algoritme: A:=10
A:= 10 Herhaal A:= A MIN 1 Totdat A IS 0 Eindherhaal SCHRIJF A
A:=A - 1
A=0 ?
wordt dus in stroomschema:
FALSE
TRUE
SCHRIJF A
In ons voorbeeld op pagina 4-5 hebben we buiten de standaardblokken nog drie andere blokken gebruikt, namelijk:
voor begin en eindpunt:een afgeronde rechthoek
Start
om te verwijzen waar het programma heen moet: een label in een ellips
Label
en voor selectie tussen meerdere alternatieven:een ruit met meer dan twee splitsingen
Test
Alternatief 1
Alternatief 2
Alternatief 3
Een voorbeeld van een programma (dat LEPTO heet) in stroomschema is op de volgende pagina afgebeeld. In dit schema wordt het gedrag van een sluipwesp gesimuleerd. We beginnen in het bovenste blok met de naam van het programma: LEPTO, en een korte omschrijving: parasitering. Daarna zetten we de waarde van de variabele geduld op een gekozen beginwaarde. Nu krijgen we het eerste selectieblok. Als er geen eieren meer zijn kunnen we stoppen en gaan we naar het eindblok: klaar. Hoofdstuk 4
Pagina 4 - 5 LEPTO: parasitering Opnieuw Initialiseer geduld Parasiteer Zijn er eieren ?
Klaar !
No
Yes
Sondeer rottend fruit Verlaag geduld Prooi gevonden of Einde geduld
Prooi gevonden ?
No
No
Migratie
Yes
Prooi geschikt ?
Matig
Yes
Leg ei
Leg ei
Poets
Poets
Verhoog geduld
Parasiteer
No
Doe niets
Parasiteer
Als er nog wel eieren zijn wordt er zolang gezocht totdat er een gastheer voor de eieren is gevonden of het geduld op is. Als er geen prooi gevonden is (en daaruit volgt dus automatisch dat het geduld op is) gaat de sluipwesp naar een ander plekje migreren en begint daar weer helemaal opnieuw. Als er wel een gastheer is wordt deze gekeurd (selectie blok met meerdere alternatieven). Alleen als hij goed of matig is wordt er een ei gelegd. Vervolgens wordt alleen als de gastheer goed is het geduld verhoogd, omdat de sluipwesp weer nieuwe hoop op een volgende goede gastheer gekregen heeft. Hoe de Hoofdstuk 4
Pagina 4 - 6
conditie van de gastheer ook is, hierna gaat de sluipwesp weer verder met zoeken naar gastheren. In het schema betekent dat dat ze weer terug gaat naar parasiteer (het label verwijst naar label links bovenin het schema).
4.3 Nassi-Shneiderman diagrammen Dit bovenstaande verhaal kunnen we ook in een NassiShneiderman diagram zetten. Zo'n diagram is eigenlijk één grote rechthoek, binnen deze rechthoek zetten we de elementaire acties ook in rechthoeken. De structuurelementen (opdrachten zoals: Herhaal, Zolang, etc.) geven we aan door de acties die binnen deze lus-structuur staan ook binnen de rechthoek van die opdracht te zetten. Dit ziet er als volgt uit LEPTO: Parasitering door een sluipwesp Initialiseer geduld Zolang er nog eieren zijn Zoek prooi Sondeer rottend fruit Verlaag geduld Totdat prooi gevonden is of geduld op Prooi gevonden ? Prooi goed ? Leg ei Yes Poets Verhoog geduld Yes
No
Matig
Leg ei Poets
No
Doe niets
Migreer
Je ziet dat bv. het blok totdat prooi gevonden het blok sondeer fruit insluit. Bij het selectieblok prooi gevonden? sluit het JAgedeelte nog een selectieblok in en het NEE-gedeelte de opdracht migreer.
Hoofdstuk 4
Pagina 4 - 7
4.4 Voor- en nadelen Een aktie-diagram heeft als voordeel dat de komponenten eenvoudig te tekenen zijn, zeker in vergelijking met de soms lastige symbolen die in stroomschema’s worden gebruikt. Eventuele wijzigingen in je plannen zijn daardoor ook snel aan te brengen. Een stroomschema geeft een duidelijk overzicht van de loop van het programma. Een Nassi-Shneiderman diagram (ook wel N.S. diagram genoemd) is daar minder duidelijk in. Als er echter veel lussen en labels zijn kunnen de lijnen het in een stroomschema erg onoverzichtelijk maken. In een N.S. diagram zijn lussen duidelijk aan te geven door de opdrachten in één blok te zetten. Een N.S. diagram schema past bijna altijd op één pagina (met genoeg ruimte voor tekst), terwijl een stroomschema veel ruimte in beslag neemt. Het maken (en bijwerken na veranderingen) van een stroomschema kost veel tijd. Aktie-diagrammen en N.S. diagrammen zijn makkelijk te tekenen en te veranderen door het gebruik van alleen rechte lijnen. Een nadeel van een N.S. diagram is dat er toch soms ruimtegebrek is, namelijk in de breedte van het papier.
Hoofdstuk 4
Pagina 4 - 8
Hoofdstuk 4