OO Programmeren Labo 6
Home

OO Programmeren Labo 6

afbeelding class and objects

OO Programmeren Labo 6

Herhaling en nieuwe opdrachten

Afstandsonderwijs

Doelstelling

Nogal wat studenten hebben de opdracht van het vorige labo niet ingestuurd. Om jullie te helpen in deze moeilijke tijden maken we de opdrachten van vorige weken gezamelijk. Vergeet dan niet de opdracht van vorige week alsnog in te sturen! Het is belangrijk dat jullie de opdrachten insturen zodanig dat al het geleverde werk niet verloren gaat.

  1. Deze les bevat het monitoraat voor studenten die hun opdrachten van Labo 4 en/of 5 nog niet hebben ingestuurd. De doelstelling is zoveel mogelijk studenten bij het afstandsonderwijs te betrekken.

  2. Voor de gevorderden zijn er extra opdrachten voorzien.

Leerplan

Voor de studenten die de opdrachten al gemaakt hebben staan er nieuwe opdrachten hier onderaan. Dit Labo bevat veel herhaling omdat er weinig studenten hun opdrachten van Labo 4 en slechts enkele studenten hun opdrachten van Labo 5 hebben ingediend. Ik hoop hiermee jullie warm te maken om alsnog de opdrachten te maken. Stuur ze in met de links op Digitap van Labo 4 en 5. Synchroniseer je lokale computer met Bitbucket. De deadlines zijn indicatief en dienen om de lessen te structuren. Je kan nog altijd je opdrachten insturen!!!!

Opdrachten voor gevorderde studenten staan hieronder. De studenten, die hun opdrachten al hebben ingediend, kunnen dit lesmateriaal gebruiken om na te gaan als ze de opdrachten juist hebben gemaakt. Je leert ook hoe je in de opdrachten met de code kan experimenteren.

  1. Je vind de voorbeeldoplossingen in mijn repo op Bitbucket.
  2. We maken de opdrachten uit Labo 4 klassikaal. Ze staan in DateTime: leren werken met objecten. We plaatsen ze in een klasse met de naam LerenWerkenMetDateTime. Gebruik de naam van de opdracht als naam voor de methode:
    1. Oefening: H8-ticks-sinds-2000
    2. Oefening: H8-simpele-timing
  3. We maken de opdrachten uit Labo 5 klassikaal
    1. Oefening 1: Oefening 2 (h9-consciouspokemon)

      1. Overzicht:

      2. Voeg de volgende static method toe aan de Pokemon klasse (in het bestand Pokemon.cs):

        public static Pokemon FirstConsciousPokemon(Pokemon[] pokemons)
        {
            for (int i = 0; i < pokemons.Length; i++)
            {
                if (pokemons[i].HP >= 1)
                {
                   return pokemons[i];
                }
            }
            return null;
        }
      3. Voeg de methode TestConsciousPokemon toe aan de Program klasse in Program.cs:
        public static void TestConsciousPokemon()
        {
            // De 4 pokemon maken en in array stoppen
            //  Bulbasaur en Charmander 0 HP hebben
            // Squirtle 2 HP en Picachu 20 HP
            Pokemon bulbasaur = new Pokemon();
            bulbasaur.MaxHP = 20;
            bulbasaur.HP = 0;
            bulbasaur.PokeSpecie = PokeSpecies.Bulbasaur;
            bulbasaur.PokeType = PokeTypes.Grass;
        
            Pokemon charmander = new Pokemon();
            charmander.MaxHP = 20;
            charmander.HP = 0;
            charmander.PokeSpecie = PokeSpecies.Charmander;
            charmander.PokeType = PokeTypes.Fire;
        
            Pokemon squirtle = new Pokemon();
            squirtle.MaxHP = 20;
            squirtle.HP = 2;
            squirtle.PokeSpecie = PokeSpecies.Squirtle;
            squirtle.PokeType = PokeTypes.Water;
        
            Pokemon pikachu = new Pokemon();
            pikachu.MaxHP = 20;
            pikachu.HP = 20;
            pikachu.PokeSpecie = PokeSpecies.Pikachu;
            pikachu.PokeType = PokeTypes.Electric;
        
            // we stoppen de instanties die we gemaakt hebben in een array
            Pokemon[] pokemonArray = { bulbasaur, charmander, squirtle, pikachu };
            // vermits FirstConsciousPokemon een static methode is
            // kunnen we die direct vanuit de klasse oproepen en niet
            // vanuit een object van die klasse
            Pokemon firstPokemon = Pokemon.FirstConsciousPokemon(pokemonArray);
            firstPokemon.Attack();
        }
        
      4. Roep die methode op vanuit het menu.
    2. Oefening 3 (h9-consciouspokemon-improved)
      1. Overzicht
      2. Hier leren we met null werken. Het is een speciaal gegevenstype die ons toelaat om met 'afwezigheid van een waarde' om te gaan. Wat doen we in het geval dat er geen enkele pokemon in de array een posititieve HP waarde heeft? Dat kunnen kunnen we een null waarde retourneren en op basis daarvan de juiste actie ondernemen:
        Pokemon firstPokemon = ConsciousPokemon.FirstConsciousPokemon(pokemonArray);
        if (firstPokemon != null)
        {
           firstPokemon.Attack();
        }
        else
        {
           Console.WriteLine("Al je Pokémon zijn KO! Haast je naar het Pokémon center.");
        }
        
      3. De TestConsciousPokemonSafe methode plaatse je de Program klasse die staat in Program.cs. Je stelt alle HP waarden in 0 zodat er een null waarde wordt geretourneerd:
        public static void TestConsciousPokemonSafe()
        {
            // De 4 pokemon maken en in array stoppen
            Pokemon bulbasaur = new Pokemon();
            bulbasaur.MaxHP = 20;
            bulbasaur.HP = 0;
            bulbasaur.PokeSpecies = PokeSpecies.Bulbasaur;
            bulbasaur.PokeType = PokeTypes.Grass;
        
            Pokemon charmander = new Pokemon();
            charmander.MaxHP = 20;
            charmander.HP = 0;
            charmander.PokeSpecies = PokeSpecies.Charmander;
            charmander.PokeType = PokeTypes.Fire;
        
            Pokemon squirtle = new Pokemon();
            squirtle.MaxHP = 20;
            squirtle.HP = 0;
            squirtle.PokeSpecies = PokeSpecies.Squirtle;
            squirtle.PokeType = PokeTypes.Water;
        
            Pokemon pikachu = new Pokemon();
            pikachu.MaxHP = 20;
            pikachu.HP = 0;
            pikachu.PokeSpecies = PokeSpecies.Pikachu;
            pikachu.PokeType = PokeTypes.Electric;
        
            Pokemon[] pokemonArray = { bulbasaur, charmander, squirtle, pikachu };
            Pokemon firstPokemon = ConsciousPokemon.FirstConsciousPokemon(pokemonArray);
            if (firstPokemon != null)
            {
                firstPokemon.Attack();
            }
            else
            {
                Console.WriteLine("Al je Pokémon zijn KO! Haast je naar het Pokémon center.");
            }
        }
      4. Roep die methode op vanuit het menu.

Opdracht monitoraat

Deze opdrachten zijn alleen voor de studenten die hun opdrachten nog niet hebben ingestuurd.

  1. Maak met behulp van de uitleg van hierboven de opdrachten van Labo 4.
    1. Oefening: H8-ticks-sinds-2000
    2. Oefening: H8-simpele-timing
    3. Synchroniseer met Bitbucket en stuur de oefeningen door met de link van Labo 4. Stuur de bestanden LerenWerkenMetDateTime.cs en Program.cs door.
  2. Maak met behulp van de uitleg van hierboven de opdrachten van Labo 5 (je vind ze hier: H9: Geheugenmanagement bij klassen):
    1. Oefening 2 (h9-consciouspokemon): plaats FirstConsciousPokemon in de klasse met de naam Pokemon en TestConsciousPokemon in de klasse met de naam Program.
    2. Oefening 3 (h9-consciouspokemon-improved): plaats de statische methode met de naam TestConsciousPokemonSafe in de Program klasse in het Program.cs bestand.
    3. Synchroniseer met Bitbucket en stuur de oefeningen door met link van Labo 5 (vorige labo les).

Opdracht Labo 6

Alleen voor de studenten die alle opdrachten al gemaakt hebben.

  1. Maak zelf de volgende oefeningen:
    1. Hoofstuk 8
      1. Voorbeeld abstractie (h8-honden) (plaats in nieuwe Honden klasse)
      2. Oefening: H8-RapportModule-V1 (plaats in Rapport klasse)
      3. Oefening: H8-RapportModule-V2 (plaats in Rapport klasse)

      4. Oefening: H8-Getallencombinatie (plaats in Rapport klasse)

      5. Oefening: H8-Figuren (plaats in Figuren klasse)

    2. Hoofstuk 9
      1. Oefening 4: value en reference (h9-pokevalueref) (plaats in Pokemon klasse)

      2. Oefening 5: uitkomst gevecht (h9-fight) (plaats in Pokemon klasse)

  2. Deadline: 2 april 2020
    1. De deadlines zijn indicatief. Ze dienen om de lessen te structureren. Je kan dus altijd nog je opdrachten insturen. In deze moeilijke tijden is het belangrijk om uiteindelijk tegen het einde de opdrachten gemaakt te hebben. Blijven voortdoen is de boodschap!!
    2. Stuur via onderstaande link met de naam Opdracht Labo 6 Geheugenmanagement bij klassen (herhaling) doorsturen de bestanden Pokemon.cs en Program.cs door. Er is een aparte link voor Groep 3 en Groep 4.