Functionele analyse en ontwerp |
In deze les zullen we zien dat, nadat het probleem is gespecificeerd, het ontwerpen van een programma in principe bestaat uit het doorlopen van vier fasen: de analyse, het ontwerp, de implementatie en het testen. Dat betekent niet dat die fasen ook altijd in die volgorde wordt uitgevoerd. Vaak kan een zijsprongetje in de vorm van een experiment, het uitwerken van een gelukkige inval, best nuttig zijn.
Bestudeer het probleem zorgvuldig. Onderken wat het probleem is en zorg een goed inzicht in wat nodig is voor de oplossing. Dring door tot de kern van het probleem en elimineer aspecten die in eerste instantie niet van belang zijn, bijvoorbeeld de achtergrondkleur van tekst op het scherm. Kortom afbakenen wat wel en niet tot het probleem hoort. Dit is helemaal niet zo eenvoudig als het lijkt.
Welke informatie moet het programma geven? Als gevraagd wordt of een bepaald boek in de bibliotheek aanwezig is en op het scherm van de computer verschijnt alleen als antwoord 'ja' dan zal de vrager/vraagster niet erg tevreden zijn. Het programma zal ook moeten aangeven waar het staat. Bepaal met welke gegevens, de invoer, je moet werken, wat moet worden berekend en met welke nauwkeurigheid (indien van toepassing). Welke theoretische kennis en/of formules heb je nodig. Bepaal welke aanvullende gegevens nodig zijn (bijv. natuurconstanten) en hoe de resultaten moeten worden gepresenteerd, de uitvoer, bijv. tabellen of grafieken.
Als blijkt dat de specificatie onvolledig is ga dan terug naar de fase van de probleemspecificatie en probeer aanvullende gegevens van de opdrachtgever te krijgen of kom zelf met suggesties.
Bedenk een lijst met stappen, een algoritme, waarmee
het probleem wordt opgelost. Probeer beknopt te beschrijven wat
bij elke stap gedaan moet worden. Een dergelijke beschrijving die
vaak noch in correct Nederlands noch in correct Java is gesteld
noemen we pseudocode. Voor pseudocode bestaat geen
syntaxis. Bijvoorbeeld:
Neem aan dat de hypotenusa van een rechthoekige driehoek moet
worden berekend.
Een korte analyse leert ons dat:
De volgorde van acties, het algoritme, zal dan zijn:
De volgorde: invoeren van gegevens, bewerken ervan, uitvoeren van resultaten zul je in verschillende vormen in vrijwel elk programma terugvinden.
Het vinden van een goed algoritme is i.h.a. het meest creatieve maar ook moeilijkste deel van de hele ontwerpfase. Als je een algoritme denkt te hebben gevonden controleer dan voordat je verder gaat of het correct werkt. Kies bijv. zorgvuldig een aantal getallen, waaronder 0, en controleer zonodig op papier of de bij deze getallen verwachte uitkomsten ook werkelijk ontstaan. Een foutief algoritme in Java implementeren leidt slechts tot tijdverlies.
Vertaal het algoritme naar een Java programma. Daarvoor is kennis van de taal Java nodig. Die kennis zullen we stapsgewijs opbouwen.
Test het programma en verifieer dat het werkt zoals verwacht. Test het programma met verschillende sets gegevens (testvectoren). Vooral uiterste waarden en nul willen nogal eens voor problemen zorgen.
Een uitgewerkt voorbeeld: Rekenen met gebroken getallen