Dedene_samenvatting_JDK_Hoofdstuk_7

advertisement
Grondslagen v/d beleidsinformatica
Hoofdstuk 7: Structureren in methoden
7.1 OVERZICHT
CPU (centrale verwerkingseenheid)
--> voert procedures en functies uit zoals neergeschreven
Via structuren kan men routines een veel breder spectrum bieden
7.2 GESTRUCTUREERD: EEN DEFINITIE
Instructies op een rij zetten is niet voldoende
Men kan algoritmes opbouwen via drie structuurprimitieven (door Dijkstra - 1968)
- Sequentie: de opeenvolging
- Selectie: de keuzestructuur
- Iteratie: de herhalingsstructuur
We moeten de structuren niet volledig opbouwen zoals de computer dit zou doen (Warnier – 1972)
--> keuze voor grafische ruimtelijk denken als basis voor een algoritme
De technieken werden verfijnd door Michael Jackson 1975
--> introductie van ontwerpmethode voor structuren
Eiffel biedt een combinatie tussen objectgericht en gestructureerd programmeren
7.3 DE SEQUENTIE
Bij een opsomming v/d taken (zoals alle voorbeelden hiervoor) gebruikten we een sequentie
Sequentie: opeenvolging van instructies
Instructie1
instructie2
instructie 3
…
instructie N
! Instructies moeten niet gescheiden zijn door een nieuwe regel of puntkomma
--> qua overzicht is dit wel aangeraden
7.4 SELECTIE: DE IF-CLAUSULE
7.4.1 Enkelvoudige keuzestructuren
We kunnen gebruik maken van selectiestructuren die behoren tot de keuzestructuren
--> hierdoor bieden we alternatieve keuzemogelijkheden (acties)
De keuze waardoor de actie begint noemt men een conditie
Bijvoorbeeld:
Het runnen v/e bepaalde actie als een uitkomst < 50%
1
Jeroen De Koninck – HIRB – 2012-2013
Keuzestructuren moeten voldoen aan twee eigenschappen:
- Exclusief: geen overlappende condities
- Exhaustief: condities dekken alle mogelijke gevallen
De meest eenvoudige keuze is:
if conditie then
actie
end -- if
! We sluiten een IF-structuur steeds af met een end-clausule
! We voegen een “voetnoot” -- if toe om de structuurprimitieve aan te tonen
Een conditie is v/h type BOOLEAN
Samengestelde uitdrukkingen zijn op basis van:
- Booleaanse variabelen
- Booleaanse functieoproepen
- Vergelijkingsoperatoren en logische bewerkingen
- AND
- OR
- NOT
De actie kan bestaan uit:
- enkelvoudige instructie
- complexe instructie (sequentie, if-instructie of iteratie)
Bij het uitvoeren v/e if-instructie:
- Stap 1: analyse v/d conditie
- Stap 2a: het resultaat is TRUE --> de actie gaat van start
- Stap 2b: het resultaat is FALSE --> er gebeurd niets
ZIE VOORBEELD PAGINA 122 - 123
7.4.2 Meervoudige keuzestructuren
Meestal zijn er meervoudige keuzestructuren
Voorbeeld:
if conditie1 then
actie1
elseif conditie2 then
actie 2
elseif conditie3 then
actie3
elseif ...
{else
laatste actie}
--> optioneel
--> optioneel
end -- if
2
Jeroen De Koninck – HIRB – 2012-2013
! Keuzealternatief tussen accolades is alternatief
--> er wordt geen conditie omschreven
Bij de uitvoering v/e meervoudige keuze-instructie
--> analyse van alle condities, bij TRUE gaat men over tot actie
Indien alles FALSE is dan voert men de optionele keuzealternatief uit
--> deze is niet verplicht
! Geen alternatief zorgt dat het programma niets meer doet
! Condities worden achtereenvolgens geëvalueerd
--> de exclusiviteit wordt gegarandeerd
If getal < 20 then
print(“Het getal is strik kleiner dan 20%N”)
elseif getal < 30 then
print(“Het getal is groter of gelijk aan 20, maar kleiner dan 30%N”)
else
print(“Getal is groter of gelijk aan 30”)
end -- if
Men kan de gehele werking weergeven in een determinatie structuur
Conditie
TRUE
actie then
FALSE
actie else
De structuur laat ons toe om te evalueren van boven naar onder
Voorbeeld: bovenstaande tekst kan men ook (overbodig) schrijven als
If getal < 20 then
print(“Het getal is strik kleiner dan 20%N”)
elseif getal >= 20 AND getal < 30 then
print(“Het getal is groter of gelijk aan 20, maar kleiner dan 30%N”)
else
print(“Getal is groter of gelijk aan 30”)
end -- if
3
Jeroen De Koninck – HIRB – 2012-2013
7.4.3 Condities en booleanen
We moeten programma’s kwalitatief opbouwen en weldoordacht
Voorbeeld:
if geslacht = ‘M’ then
print(“Mijnheer”)
end -- if
if geslacht = ‘V’ then
print(“Mevrouw”)
end -- if
We gebruiken hier twee keer een afzonderlijke enkelvoudige keuzestructuur
--> kan beter geschreven worden als een meervoudige keuzestructuur
If geslacht = ‘M’ then
print(“Mijnheer”)
else
print(“Mevrouw”)
end -- if
De gebruiker kan zelf maar één karakter toevoegen
--> de waarden v/h geslacht zijn echter niet beperkt tot M en V
Vaak schrijven mensen ook m of v
If geslacht = ‘m’ or geslacht = ‘M’ then
print(“Mijnheer”)
elseif geslacht = ‘v’ or geslacht = ‘V’ then
print(“Mevrouw”)
end -- if
! We gebruiken in dit geval ook beter elseif dan else
--> bij een schrijffout moet het programma eindigen en de gebruiker niet definiëren als een vrouw
! Programma’s moeten wel nog steeds leesbaar zijn door andere personen
Bij voorkeur schrijven we condities in de instructie zelf
ZIE VOORBEELDEN PAGINA 126 - 128
4
Jeroen De Koninck – HIRB – 2012-2013
7.5 ITERATIE: DE LOOP-CLAUSULE
We kunnen gebruik maken van iteratiestructuren die behoren tot de herhalingsstructuren
Qua overzicht ziet de herhalingsstructuur er zo uit:
From
beginactie
Until
stopconditie
Loop
te_herhalen_actie
End -- loop
We definiëren eerst de beginsituatie
--> dit is het vertrekpunt v/d herhaling
Bij een teller is dit bijvoorbeeld 0 of 1
Daarna definiëren we de stopconditie
--> bij het bereiken van deze conditie stopt de herhaling
Bij de loop-instructie wordt de from uitgevoerd en de stopconditie getest
--> is de stopconditie TRUE dan stopt de herhaling
--> is de stopconditie FALSE dan wordt alles herhaald tot men TRUE bereikt
! De stopconditie moet ooit TRUE kunnen zijn, anders heb je een oneindige lus
From
beginsituatie
Until
stopconditie
Loop
te_herhalen_actie
End -- loop
7.5.1 De voorspelbare iteratie
Voorspelbare iteraties zijn de eenvoudige iteratiestructuren
--> het is geweten hoe vaak de herhaling zichzelf zal voordoen
We maken gebruik v/e tellervariabele
--> deze houdt bij hoeveel keer de iteratie zichzelf heeft doorlopen
5
Jeroen De Koninck – HIRB – 2012-2013
Voorbeeld:
from
teller := 0
until
teller = 10
loop
print(“Oefening baart kunst”)
io.new_line
teller := teller +1
end -- loop
! De teller wordt in de loop-conditie steeds met een 1 verhoogd
Voorbeeld:
We maken een teller waarbij de eerste gehele getallen bij elkaar worden opgeteld
From
i := 1
totaal := 0
Until
i > 10
loop
totaal := totaal + i
i := i + 1
end -- loop
We kunnen ook een complexe instructie toevoegen aan het actiegedeelte
Voorbeeld:
feature druk_rechthoek (lengte, breedte: INTEGER) is
local i,j : INTEGER
do
from j := 0
until i = lengte
loop
from j := 0
until j = breedte
loop
io.putchar(‘*’)
j := j + 1
end
io.new_line
i := i + 1
end -- loop
end -- druk_rechthoek
! Als je druk_rechthoek(5,10) oproept, zal men binnenste lus 5 x uitvoeren en de actie erin 10x
6
Jeroen De Koninck – HIRB – 2012-2013
Voorbeeld
De teller v/d eerste lus behoord hier tot de stopconditie v/d tweede lus
Feature getallen_driehoek is
local
i, j: INTEGER
do
from i := 1
until i > 10
loop
from j := 1
until j > i
loop
io.putint(j)
j := j + 1
end -- loop
i := i + 1
io.new_line
end -- loop
end -- getallen_driehoek
7.5.2 De onvoorspelbare iteratie
De onvoorspelbare iteratie is een complexere iteratiestructuur
--> de hoeveelheid herhalingen is niet geweten
Voorbeeld
Programma om getal op te tellen bij vorig tussentotaal
--> het is op voorhand niet geweten hoeveel getallen de gebruiker zal willen optellen
Men moet zelf ontdekken wanneer het laatste getal is ingevoerd
We stellen per voorbeeld dat de gebruiken x getallen mag intypen en het alles stopt wanneer 99999
wordt ingedrukt
Form
- Start bij een tussentotaal van 0
- Vraag aan de gebruiker om een getal in te tikken
Until
getal = 99999
loop
- Tel het getal op bij het tussentotaal
- Vraag aan de gebruiker een getal in te tikken
end -- loop
Toon het tussentotaal (als eindtotaal)
7
Jeroen De Koninck – HIRB – 2012-2013
Feature kassa is
local
invoer, totaal: INTEGER
do
from
totaal := 0
io.new_line
print(“Tik een getal in (99999 om te stoppen):”)
io.readint
invoer := io.laststring
until
invoer = 99999
loop
totaal := totaal + invoer
io.new_line
print(“Tik een getal in (99999 om te stoppen):”)
io.readint
invoer := lastint
end -- loop
io.new_line
io.new_line
print(“Het totaal is: “)
io.putint(totaal)
io.new_line
end -- kassa
7.6 ITERESTIE EN SELECTIE: MENUSTRUCTUREN
Menu’s zijn vaak opgebouwd bestaande uit zowel iteratiestructuren als keuzestructuren
Voorbeeld:
ZIE PAGINA 134 - 136
! Wanneer men bij INTEGER een reëel getal ingeeft, krijgt men een exception
--> het gaat om een zware fout die zal resulteren in een run-time error
Compilatiefout: een fout reeds gevonden bij het compileren
--> men probeert veel compilatiefouten te vinden zodat de kans op uitvoeringsfouten kleiner is
Bij een run-time error zal het programma stoppen, tenzij de fout wordt opgevangen
7.7 EEN TELLERSYSTEEM MET MENUSTRUCTUUR
7.8 EEN REKENMACHINE
ZIE VOORBEELDEN IN CURSUS PAGINA 137 - 147 EN BIJGEVOEGDE EIFFEL-BESTANDEN
8
Jeroen De Koninck – HIRB – 2012-2013
Download