Methodiek van de Informatica
Bespreking testpracticum
Javaconventies!
◦ KlasseNamen beginnen met Hoofdletter
◦ objectNamen/methodeNamen met kleine letter
Aanspreken GUI
◦ Zie ook World of Zuul
◦ Aanspreken GUI moet beperkt worden tot minimum aantal klassen
Bv: voldoende in klasse Spel
◦ Alle andere klassen kennen GUI niet!
Vaak voorkomende fouten
Duidelijke naamgeving!
◦ Variabelen/klassenamen zijn zelfstandig naamwoord
Bv. Hut, aantal, …
◦ Methodenamen bevatten werkwoord
isRaak, plaatsHut,…
Concepten uit boek
◦ High cohesion
Vermijd code duplicatie
◦ Low coupling
Beperk # bindingen
OO
◦ > 1 object
Vaak voorkomende fouten
(2)
Vermijd code duplicatie!
◦ NIET 1 lange methode met alle variaties voor het maken van hutten
◦ WEL een aparte methode aanroepen die overlappende code bevat
◦ NIET: maakKleineHutVoorSpeler1Horizontaal, maakGroteHutVoorSpeler2, ...
◦ WEL: bv. maakHut(speler, grootteHut, orientatieHut)
Vaak voorkomende fouten
(3)
Belangrijk:
◦ Correct splitsen van functionaliteit
NIET klasse HuttenBouwen, Schieten, …
WEL klasse Spel, Dorp, Hut, Schot, …
DUS splitsen volgens eigenschappen, NIET volgens acties
Disclaimer
◦ er is GEEN ideale (model)oplossing
Voorbeeld van mogelijke
ontwerp
Mogelijke ontwerp
Spel Gui gui;
Speler speler1;
Speler speler2;
Speler ArrayList<Position>
hutten;
ArrayList <Schot> schoten;
Schot Position plaats;
boolean geraakt;
Weet enkel zijn positie en het feit of het schot raak
was of niet Voorbeeld methodes:
• public Position geefPositie()
• public boolean isRaak()
Mogelijke ontwerp
Spel Gui gui;
Speler speler1;
Speler speler2;
Speler ArrayList<Position>
hutten;
ArrayList <Schot> schoten;
Schot Position plaats;
boolean geraakt;
Kent enkel zijn eigen hutten en schoten Voorbeeld methodes:
• public boolean heeftHut(Position pos)
• public boolean isRaak(Position pos)
• public boolean heeftAlGeschoten (Position pos)
Mogelijke ontwerp
Spel Gui gui;
Speler speler1;
Speler speler2;
Speler ArrayList<Position>
hutten;
ArrayList <Schot> schoten;
Schot Position plaats;
boolean geraakt;
• Zorgt voor verloop van spel
• mbv klasse Speler en Schot
• Zorgt voor
communicatie met GUI
Mogelijke ontwerp
Spel Gui gui;
Speler speler1;
Speler speler2;
Speler
ArrayList<Hut> hutten;
ArrayList <Schot> schoten;
Schot Position plaats;
boolean geraakt;
Hut
ArrayList<Position>
plaatsen;
Vraag aan gebruiker de beginpositie
Vraag aan gebruiker de richting
Bereken de posities van de hut
Controleer of de nieuwe hut geen geplaatste hutten overlapt
Voeg de hut toe
Voorbeeld: plaatsen van
hutten
Vraag aan gebruiker de beginpositie
◦ Position
positie=gui.choosePosition(playerID)
Vraag aan gebruiker de richting
◦ Orientation richting =
gui.orientationInputBox()
Bereken de posities van de hut
Controleer of de nieuwe hut geen geplaatste hutten overlapt
Voeg de hut toe
Voorbeeld: plaatsen van
hutten
Vraag aan gebruiker de beginpositie
Vraag aan gebruiker de richting
Bereken de posities van de hut
◦ EERST
bereken aantal kleine en grote hutten
Hou bij welke hut je aan het plaatsen bent
Controleer of de nieuwe hut geen geplaatste hutten overlapt
Voeg de hut toe
Voorbeeld: plaatsen van
hutten
int aantal = berekenAantalHutten()
Doe aantal keer voor kleine hutten + aantal keer voor grote
◦ Vraag aan gebruiker de beginpositie
◦ Vraag aan gebruiker de richting
◦ Bereken de posities van de (grote/kleine) hut
Controleer of de hut nog binnen het speelveld ligt
◦ Controleer of de nieuwe hut geen geplaatste hutten overlapt
◦ Voeg de hut toe
Voorbeeld: plaatsen van
hutten
int aantal = berekenAantalHutten()
Doe aantal keer (voor kleine en grote hutten)
◦ Vraag aan gebruiker de beginpositie
◦ Vraag aan gebruiker de richting
◦ Bereken de posities van de (grote/kleine) hut
◦ Controleer of de nieuwe hut geen geplaatste hutten overlapt
SPEL: huidigeSpeler.heeftOverlap(nieuweHut)
SPELER: ∀ hut: hut.heeftOverlap(nieuweHut)
HUT: ∀ positie: hut.bevatPositie(positie)
◦ Voeg de hut toe
Voorbeeld: plaatsen van
hutten
int aantal = berekenAantalHutten()
Doe aantal keer (voor kleine en grote hutten)
◦ Vraag aan gebruiker de beginpositie
◦ Vraag aan gebruiker de richting
◦ Bereken de posities van de (grote/kleine) hut
◦ Controleer of de nieuwe hut geen geplaatste hutten overlapt
◦ Voeg de hut toe
huidigeSpeler.voegToe(nieuweHut)
Voorbeeld: plaatsen van
hutten
Laat zowel speler1 als speler2 hutten plaatsen
◦ Begin met speler1
int aantal = berekenAantalHutten()
Doe aantal keer (voor kleine en grote hutten)
Vraag aan gebruiker de beginpositie
Vraag aan gebruiker de richting
Bereken de posities van de (grote/kleine) hut
Controleer of de nieuwe hut geen geplaatste hutten overlapt
Voeg de hut toe
◦ Maak speler2 de huidige speler en herhaal
Voorbeeld: plaatsen van
hutten
Mogelijke ontwerp 2
Spel Gui gui;
Speler speler1;
Speler speler2;
Speler
Veld [] [] bord;
Veld boolean hut;
boolean schot;
Voorstelling van 1 plaats op het bord Voorbeeld methodes:
• public void plaatsHut()
• public boolean heeftHut()
• public void schiet()
• public boolean heeftAlGeschoten()
• public boolean isRaak()
Mogelijke ontwerp 2
Spel Gui gui;
Speler speler1;
Speler speler2;
Speler
Veld [] [] bord;
Veld boolean hut;
boolean schot;
Voorstelling van het speelveld als 2D bord
Voorbeeld methodes:
• public void plaatsHut(Position p)
• public boolean heeftHut(Position p)
• public void schiet(Position p)
• public boolean heeftAlGeschoten (Position p)
• public boolean isRaak(Position p)