02. Hoofdstuk2

Concepten

Opdrachten

  1. Hieronder de signatuur van zes methodes. Hoeveel logische methodes zijn er?
    public void jump()
    public boolean isAlone()
    public void walkLeft(int aantal)
    public void setLocation(int x , int y)
    public boolean isWater(int x , int y)
    public boolean isLaneFree(String laneToCheck)
    Antwoord voor elke methode op volgende vragen:
    • Geef de methodenaam.
    • Geeft de methode een waarde terug ? Wat is het returntype ?
    • Heeft de methode parameters ? Indien ja, wat is het type van elke parameter?
    • Geef een correcte aanroep van elke methode. Hierbij moet je dus een zinvolle waarde geven aan elke parameter.
      Voor een logische methode verwerk je de aanroep in een if( ) -statement.

    Oplossing

  2. FatCat

    Vertrek van het scenario Fatcat. Voeg de klasse MyCat toe, als subklasse van Cat. (zie tips hieronder)
    Maak een object van deze nieuwe klasse - dan merk je bitter weinig verschil.
    Open de editor van de nieuwe klasse MyCat - daar staat enkel de methode act() die nog geen code bevat.
    Zoek in het object-menu van de wereld de opdracht "Save the World", en voer die uit - sluit het "editor-venstor" dat hierdoor geopend wordt.
      In het klasse-menu van Cat vraag je een new subclass.

    1. GEDRAG aanpassen via de methode act(). De kat doet niets doet als je de knoppen act, run indrukt. Zorg dat 'eten' het gedrag is van de kat.
      • Zoek in de broncode van de klasse MyCat de regel public class MyCat extends Cat. De 'body' van de klasse is het deel tussen de { }-tekens die onder deze regel begint. In de 'body' van de klasse staan de methodes onder elkaar. Deze klasse bevat enkel de methode act, die het gedrag beschrijft. De 'body' van deze methode (tussen de { }-tekens) is nu nog leeg. Dit verklaart dat er 'niets' gebeurt.
      • Roep de methode eat() aan in de methode act. Dit doe je door in de 'body' van de methode act te typen: eat();

      Opmerking: In de editor van Greenfoot kan je heel eenvoudig een lijst opvragen met alle beschikbare methodes "op die plaats in de code".
      De toetsencombinatie Ctrl-spatie genereert een handig overzicht van alle methodes ('eigen' methodes en geërfde methodes) die je nu kan opvragen. Van zodra je een letter intypt wordt die lijst aangepast. Je krijgt ook extra informatie over de methode in het kader rechts. Als je een methode 'kiest' dan wordt de juiste aanroep van de methode ingevoegd in de broncode. De ; moet je zelf toevoegen.

    2. Wijzig het "gedrag" zodat de kat in elke 'act' achtereenvolgens een pizza eet, daarna 'hoera' roept, en daarna danst.

      Oplossing

    3. Verander het gedrag van de kat, zodat ze een pizza eet en daarna 2 tellen slaapt. De kat moet dus geen 'hoera' meer roepen en niet meer dansen.
      Gebruik // om regels van vorig gedrag in commentaar te zetten.
      De methode sleep(int howLong) heeft een parameter die je moet invullen met een geheel getal. Na het ophalen van de methodenaam met Ctrl-spatie krijg je extra hulp voor het invullen van de parameter.

      Pas het gedrag verder aan zodat de kat, na het eten en het slapen ook nog 4 stappen naar rechts wandelt. Gebruik hiervoor een methode van Cat.

      Oplossing

    4. Zorg er nu voor dat de drie acties in het gedrag enkel worden uitgevoerd indien dit zinvol is voor de kat op dat moment, namelijk: ze eet 'als ze honger heeft', ze slaapt 'als ze moe is' en ze wandelt 'als ze zich verveelt'.
      Je kan de broncode gemakkelijk 'herschikken' met de toetsencombinatie Ctrl-Shift-I.
      Gebruik de logische methodes van Cat en verwerk de returnwaarde in een if( )-statement.
      Als je dit uittest dan loopt het misschien niet helemaal zoals verwacht. Bekijk de status van de kat en verklaar wat er gebeurt.
      Merk op: De kat zal enkel wandelen, want ze heeft geen honger en ze is niet moe. Laat de kat eens "dansen" en vraag daarna de methode act(). Nu worden de drie methodes uitgevoerd.

      Oplossing

    5. We programmeren nu een volledig nieuw gedrag. Gebruik /* en */ om een groter blok, namelijk alle code die je zelf hebt toegevoegd in de vorige oefeningen, in commentaar te zetten. Het nieuwe gedrag: de kat slaapt als ze alleen is, de kat danst als ze niet alleen is.
      Werk dit uit op twee manieren - met/zonder else (en test ze grondig uit - zorg dat je beide situaties controleert).
      Zoek de twee logische methodes waarmee je kan nagaan of de kat alleen is, en onderzoek 'interactief' (=met klikken) wat het verschil is tussen beiden.
      • Zonder else te gebruiken: gebruik twee if-statements en de twee logische methodes om het gedrag te beschrijven.
      • Met if-else structuur: gebruikt maar één logische methode.
      Wat is volgens jou de beste oplossing?
      Opmerking: Je hebt misschien opgemerkt dat twee katten nooit terzelfdertijd dansen?
      Verklaring: Greenfoot laat elke actor om beurten zijn methode "act()" uitvoeren. De tweede kat kan dus pas beginnen als de eerste kat klaar is.

      Oplossing

      Onthoud:
      • Het gedrag van actor wordt beschreven in methode act()
      • Commentaar op de regel kan je toevoegen met //
      • Een blok in commentaar zetten doe je met /* en */
    6. Tot slot wijzig je een laatste keer het gedrag van de kat (zet vorige code dus in commentaar):
      • als de kat moe is dan slaapt ze wat, en daarna roept ze "hoera",
      • anders roept ze direct "hoera".
      Los dit op met één if zonder else . De kat roept altijd "hoera". Het is niet nodig om hiervoor een else te gebruiken, De methode-aanroep moet dus niet in een if-else-stuctuur worden gevraagd. Je gebruikt enkel een if( )-statement om de kat te laten slapen als ze moe is.

      Oplossing

  3. TrafficSimulator

    Initialiseer de wereld met de methode plaatsDrieAutos() van HighWay. Dit plaatst op elk rijvak een auto. Bekijk de snelheid van de auto's. Voer het scenario uit, dan blijft elke auto op zijn eigen rijvak rijden. Bekijk het gedrag van een auto. Verklaar dat de auto's gewoon rechtdoor rijden.

    We lossen dit nu op. Doe enkel aanpassingen in de klasse Car.

    1. Volgens het verkeersreglement moet een auto steeds in het meest rechtse vak rijden, indien dit vrij is. Wijzig het gedrag van de auto zodat een auto zich één vak naar rechts verplaatst indien dit mogelijk is zonder botsen. Bovendien moet de auto vertragen als hij naar rechts gaat (zoek de methode die dit doet). Let erop dat in dit scenario het statement move() steeds als laatste moet worden uitgevoerd, omdat het anders fout gaat als de auto op het einde van de weg komt.
      Test het scenario tot alle auto's op het eerste vak rijden. Vraag nu de snelheid van elke auto. Bekijk de code van de methode vertraag() en verklaar de eindsnelheid van elke auto (je kent de beginsnelheid)

      Oplossing

    2. Plaats vier auto's op de baan met de methode initInhalen() van HighWay en kijk wat er fout gaat.
      Hoe kan je voorkomen dat wagens "botsen"? Indien een wagen een 'voorligger' heeft dan moet hij proberen die wagen in te halen. Indien uitwijken naar links niet kan, dan moet je de auto vertragen zodat botsen vermeden wordt. Bij inhalen is het aan te raden dat de wagen ook sneller gaat rijden. Vertrek van de methode vertraag() om ook de methode versnel() toe te voegen.
      Werk dit uit in twee stappen:
      1. Kopieer de volledige methode vertraag() en doe hierin volgende wijzigingen:
        • Wijzig de naam van de methode naar versnel().
        • Verhoog de snelheid, in plaats van te verlagen.
        • Verander de voorwaarde in het if-statement zodat een maximum snelheid wordt opgelegd van 140 km/h (een kleine overtreding dus bij inhalen).
        Je kan deze methode best eerst 'interactief' (met klikken) uittesten op een auto.
      2. Wijzig nu het gedrag van de auto: als er een 'voorligger' is, dan probeert de auto die in te halen: als de auto naar links kan uitwijken dan doet je dit en verhoog je de snelheid.

      Oplossing

  4. Aardvarken (HERHALINGSOEFENING)

    1. Bekijk het gedrag van het aardvarken. Pas dit aan zodat een mier ook automatisch wordt opgegeten als het aardvarken er langs komt.
    2. Wat gebeurt er als het aardvarken aan de rand van de wereld komt? Wijzig de broncode en probeer andere waarden voor de parameter angle. Voor kleine hoeken loopt het aardvarken te lang langs de rand. Kan je ook negatieve waarden ingeven ? Wat is het verschil ?
    3. Als het AardVarken een mier heeft gegeten moet het draaien in tegenwijzerzin over een bepaalde vaste hoek - je mag zelf kiezen welke. In welke methode moet je deze aanpassing schrijven?

    Oplossing