01. Hoofdstuk1

Voorbereiding

Concepten

Opdrachten

  1. Basis-functionaliteit van Greenfoot

    Open op de site van Greenfoot het tabblad Documentation. Klik dan op de link die te vinden is in de kader met titel Reference. Dan kom je uit bij de Greenfoot Class Documentation, zoals hieronder te zien is.

    Deze documentatie beschrijft de Greenfoot-klassen, o.a. World en Actor. Zoek in het menu bovenaan onder Help.

    Vanaf hoofdstuk 3 zullen we ook klassen gebruiken die niet typisch voor Greenfoot zijn, maar die gemeengoed zijn in de programmeertaal Java. Om deze documentatie te vinden kan je de zoektermen java api 8 gebruiken, of deze link naar de Application Programming Interface van Java volgen.

    Open het scenario FatCat.

    1. Welke twee Greenfootklassen zie je in het klassendiagram ? Elk scenario vertrekt van de Greenfootklassen World en Actor, deze bevatten de basis-functionaliteit van een Greenfoot scenario. In elk scenario worden eigen klassen toegevoegd, als "subklasse" van deze basisklassen (de pijl toont de relatie "is subklasse van"). Deze subklassen zijn anders in elk scenario.
      Wat zijn de specifieke klassen voor dit scenario?
      Wat is de relatie tussen deze klassen ?

      Oplossing

    2. Open het klasse-menu van de Greenfootklassen World en Actor, en bekijk de documentatie. Wat wordt hier beschreven ?
      Open het klasse-menu van de klasse Cat en bekijk de broncode in de Editor. Volgend labo zal je hier nieuwe code moeten toevoegen. Belangrijk is dat je deze klassen kan aanpassen. Sluit de editor.
      Het klasse-menu open je met een klik op de rechtermuisknop (snelmenu) op de klasse.

      Oplossing

    3. Elk scenario wordt automatisch gecompileerd. Daarbij initialiseert Greenfoot een "instantie" van de concrete wereld. Open het object-menu van de concrete CatWorld en merk op dat er elf instantievariabelen zijn. Bekijk de instantievariabelen die een geheel getal bevatten en vul volgende zin aan. De instantie van CatWorld is ......... cellen breed en .......... cellen hoog. Dit is dus een wereld met hoge/lage resolutie (duid je keuze aan).
      • Het linkerdeel van het venster toont de concrete CatWorld. Klik met de rechtermuisknop op de concrete wereld voor het object-menu. Met Inspect kan je de instantievariabelen bekijken.
      • De wereld is opgebouwd uit vierkante "cellen" van een bepaalde grootte (dit kan je in dit scenario niet echt zien). Een wereldobject onthoudt de "cellsize". Dit is de grootte van elke cel. De "cellsize" is ook de minimale afstand (in pixels) waarover je een actor kan verplaatsen.
        Een wereld met 'hoge' resolutie heeft cellsize gelijk aan 1, indien de cellsize groter is dan 1 heeft de wereld een 'lage' resolutie.
        Een wereldobject onthoudt ook zijn afmetingen, uitgedrukt in "aantal cellen".

      Oplossing

    Onthoud: Het klasse-menu vind je op de klassen (in het smalle venster rechts). Het object-menu vind je op de objecten (in het grote venster links).

  2. FatCat

    1. Plaats twee Cat-objecten (=instanties van de Cat-klasse) in de CatWorld.

    2. In het klasse-menu van Cat vind je als eerste optie de constructor - new Cat(). Als je hierop klikt wordt een Cat-object (=instantie van de Cat-klasse) gemaakt en aan je cursor vastgeplakt. Plaats dit object ergens in de wereld. Herhaal dit voor een tweede Cat-object.

      Probeer de knoppen onderaan Act, Run,... Er gebeurt nog niets. Dat wordt pas in hoofdstuk 2 verder toegelicht.


    3. Open het object-menu van een Cat-object en bekijk de instantievariabelen.
      • Wat is de betekenis van de instantievariabelen x en y? Wordt het aantal pixels of het aantal cellen opgegeven?
        Waar ligt de oorsprong van het assenstelsel ? De betekenis van de instantievariabelen x en y kan je ook afleiden uit de naam van de variabele. Verkaar dat beide katten een andere inhoud hebben voor deze instantievariabelen. Verplaats een kat (aanklikken en verslepen). Voorspel hoe dit de inhoud van de instantievariabelen x en y zal wijzigen (vergroten/verkleinen) en controleer je antwoord.
      • Wat wordt onthouden in de instantievariabele rotation ?
      • Wat is het type van de instantievariabele rotation ?
        Omcirkel de inhouden die je zal kunnen hebben als inhoud van dit type variabelen: 12 5,5 -5 kat p 100 -5,7 0

      Oplossing

    4. Voor elke kat beschrijven de drie eerste instantievariabelen specifieke eigenschappen van een Cat-object. Achterhaal de betekenis van deze drie instantievariabelen. Wat is het type van deze instantievariabelen ? Wat is de mogelijke inhoud voor dit type ?

      Oplossing

      Onthoud:
      • elk object (='instantie') onthoudt zijn eigen kenmerken in instantievariabelen.
      • het type van een instantievariabele bepaalt wat die inhoud kan zijn (een getal, true/false,...).
        In Java zijn meerdere primitieve types beschikbaar, o.a. int, boolean
      • de naam van de variabele vertelt iets over zijn betekenis. Deze naam werd gekozen door de programmeur, en is dus niet vastgelegd door Java.
    5. Zoek de twaalf methodes van een Cat-object en roep deze methodes interactief (=met klikken) aan. De methodes vind je in het object-menu van een Cat-object.
      • Wat betekent void?
      • Welke methodes hebben een parameter? Wat is het type van deze parameter? Welke waarden kan je dan in principe ingeven ?
        Lukt een negatief getal ook ? En een komma-getal ?
      • Hoe herken je een "logische methode"? Welke drie logische methodes staan direct in verband met de "status" van het Cat-object ?
      • Welke informatie geven de twee resterende 'logische methodes' ? Wat is precies het verband tussen beide returnwaarden ?

      Oplossing

      Onthoud: Een methode heeft drie aspecten:
      • de naam van de methode verduidelijkt wat deze methode zal doen,
      • het returntype geeft aan welk type deze methode "teruggeeft" (void betekent niets,een logische methode geeft een boolean terug);
      • een parameter kan extra informatie doorgeven aan de methode. Het type van de parameter bepaalt welke soort informatie je moet opgeven.

    6. Hieronder staat een deel van de UML-voorstelling van de klasse Cat. Een klasse wordt beschreven door zijn instantievariabelen (wat is typisch voor elke instantie ?), de constructor (hoe maak je een instantie ?) en de methodes (wat kan je doen/vragen aan een instantie ?). Dit wordt schematisch voorgesteld in een UML-diagram. Instantievariabelen zijn afgeschermd - dit wordt aangegeven met een - teken. Het type van een instantievariabele wordt ook toegevoegd. De constructor en methodes zijn publiek bereikbaar - dit wordt met een +teken aangeduid. Voor een methode worden de drie aspecten beschreven.
      Ze bevat alvast één instantievariabele, de constructor en één methode. Vul de UML-voorstelling aan met nog twee instantievariabelen die specifiek zijn voor deze klasse. Voeg ook één methode toe met parameter en één logische methode.
      Cat
      -boolean tired
       
       
      +Cat()
      +void dance()
       
       
    7. Oplossing

    8. Elke actor, dus ook de kat, "erft" methodes van de klasse Actor. Je kan deze geërfde methodes terugvinden in de Greenfoot Class Documentation. Je vindt geërfde methodes ook in het object-menu (bovenaan), bij inherited from Actor.
      1. Zoek de drie geërfde methodes die een geheel getal teruggeven. Kan je het verband leggen met de instantievariabelen?
      2. Experimenteer met de methode void setLocation(int , int ).
        Wat zijn de kleinste en grootste waarde die mogelijk zijn voor de instantievariabele x? Vergelijk dit met de breedte van CatWorld (analoog voor y).
      3. Zoek de logische methode die elke actor erft. Zoek uit welke interessante informatie je hiermee kan opvragen.
      4. Wat doet de methode void move(int ) ? Welke instantievariabele wordt gewijzigd ?
      5. Met welke methodes kan je de kat op zijn kop zetten? Er zijn twee methodes om dit te realiseren. Wat is het verschil tussen beiden ?
      6. Gebruik voorgaande methodes om de kat op een zij te leggen (volledig horizontaal). Welke van de twee methodes uit vorige vraag is dan het handigst? Beweeg de kat nu 3 stappen voorwaarts (met de methode move). Verklaar waarom de kat nu niet meer naar rechts beweegt.

      Oplossing

    9. Bekijk met File Explorer of Windows Verkenner de inhoud van de map FatCat die dit scenario bevat. Waar vind je de afbeeldingen en de geluiden voor dit senario? (Thuis kan je de geluiden ook afspelen.)
      In het klasse-menu van Cat kan je een andere basisafbeelding instellen met Set image. Wijzig deze basisafbeelding (kies zelf iets uit). Maak nu een nieuwe Cat-object. Wat merk je op? Kan deze kat ook dansen, eten, slapen,... ?
      Zoek de geërfde methode waarmee je de afbeelding van elke kat afzonderlijk kan wijzigen nadat ze in de wereld is gezet. De parameter heeft als type string - gebruik ""-tekens bij het ingeven van de naam, vb "cat-walk.png".
      Welke instantievariabele onthoudt de afbeelding? De inhoud van deze variabele is een verwijzing waarop je verder kan klikken. In het volgende venster staat informatie van de GreenfootImage, het belangrijkste is de imageFileName, die de bestandsnaam bevat van de afbeelding die aan deze actor is gekoppeld. Een GreenfootImage heeft ook nog andere informatie die je niet moet begrijpen.

      Oplossing

    10. Bekijk nu terug de instantievariabelen van CatWorld. Hoe kan je zien dat er geen achtergrond is ingesteld voor CatWorld?

      Oplossing

    11. Zoek de vier geërfde methodes van CatWorld die een int teruggeven, en test uit wat je hiermee kan opvragen.
      Zoek deze methodes ook op in de Greenfoot API. De andere methodes van World zijn voor later.

      Oplossing

  3. TrafficSimulator

    Open het gelijknamige scenario.
    1. Je kan op twee manieren objecten maken van de klasse Car. Probeer beide mogelijkheden uit om twee auto's te maken en zet ze op een verschillend rijvak.
      In dit scenario kan je ook Act en Run uittesten.
      Merk op dat de auto's botsen en over elkaar heenrijden bij het uitvoeren van het scenario. Dit wordt opgelost in hoofdstuk 2.
    1. Hoe wordt het 'rijvak' van een Car-object onthouden?
      Welke waarde komt overeen met het onderste (meest rechtse) rijvak?

      Oplossing

    2. Hoe wordt de 'snelheid' onthouden? Merk op dat de snelheid is omgerekend naar m/s.
      Wat is het type van deze instantievariabele ? Begrijp je het verschil met het type int ?
      Omcirkel de inhouden die je zal kunnen hebben voor een variabele van het type double: 12 5,5 -5 kat p 100 -5,7 0
      Elke int kan dus ook onthouden worden in een variabele van het type double, maar wordt daarbij omgezet naar een "kommagetal" met een beperkt aantal decimalen (zie theorie Informatica)

      Oplossing

    3. Zoek de methode waarmee je de snelheid kan opvragen. Van welke klasse erft Car deze methode? Wat is het returntype van deze methode? Waarom is het returntype geen int ?
      Wat is de snelheid van een auto als je deze niet zelf ingegegeven hebt bij het maken van de auto? (met de constructor zonder parameters)
      Maak zelf een wagen met snelheid 120 en vraag de snelheid aan die wagen. Kan je verklaren dat je niet exact 120 als antwoord krijgt?

      Oplossing

    4. Een Car "erft" methodes van de klasse Vehicle. Zoek een methode waarmee je kan vragen of het voertuig naar een aanliggend vak (links of rechts) kan uitwijken. Hoe zie je dat dit een logische methode is?
      De parameter is van het type String. Welke inhouden kan je voor dit nieuwe type opgeven ? Test deze methode interactief uit, en lees de commentaar die je vooraf krijgt (vergeet niet om de ""-tekens in te typen). Kijk wat er gebeurt als je de waarde van de parameter intypt met een hoofdletter, of een verkeerde tekst ingeeft?

      Oplossing

    De volgende oefeningen zijn herhalingsoefeningen.

    1. Met welke twee methodes kan je een voertuig naar een aanliggend rijvak (links of rechts) verplaatsen? Test dit uit. Er wordt niet gecontroleerd of de auto hierdoor bovenop een andere auto terechtkomt. (Er gebeurt niets als het voertuig naast de rijbaan zou terechtkomen hierdoor.)

      Oplossing

    2. De auto wordt in drie verschillende kleuren getoond. Kijk in de submap images welke afbeelding overeenkomt met welke kleur. Hoe kan je achterhalen welke afbeelding gekoppeld is aan de GreenfootImage van de auto?
    3. Is dit een scenario met hoge of lage resolutie? Je kan dit op twee manieren terugvinden.

      Oplossing

    4. Is er een achtergrond ingesteld ? Het is voor een wereld niet mogelijk om de naam te achterhalen van de afbeelding die voor de achtergrond gebruikt is.

      Oplossing

    5. De HighWay heeft ook 'eigen' methodes. Welke twee 'eigen' methodes geven NIETS terug? Test enkel die methodes uit.
      Vraag daarna het aantal wagens in de wereld.

      Oplossing

  4. Aardvarken (Herhalingsoefening)

    1. Is dit een scenario met hoge of lage resolutie?
    1. Plaats één aardvarken en meerdere mieren in de wereld. Met de Shift-toets ingedrukt kan je snel objecten in de wereld plaatsen, door gewoon te klikken.
    2. Hoe kan je opvragen hoeveel dieren er in totaal in de wereld staan? Kan je ook enkel het aantal mieren opvragen?

      Oplossing

    3. Hebben deze dieren 'eigen' instantievariabelen ?

      Oplossing

    4. Probeer de knoppen Act, Run,... Welke actors doen iets?
    5. In het object-menu van AardVarken zijn er twee 'eigen' methodes. Zoek uit hoe het Aardvarken ook een mier kan opeten.
    6. Elke actor erft de methode turnTowards. Wat zou de betekenis zijn van de twee parameters? Test dit uit op het aardvarken. Wat gebeurt er als je daarna het scenario uitvoert?
      Zorg dat het aardvarken naar de rechterbovenhoek gedraaid wordt. Als je "runt" zal het aardvarken in die richting bewegen. Misschien merk je op dat dit niet helemaal klopt. De posities van een actor worden altijd afgerond naar gehele getallen en dit veroorzaakt kleine storingen.

      Oplossing