Oefeningen
Een bestaande klasse uitbreiden via overerving
Leerdoelen
overerving van bestaande klassen laten zien
toegang tot properties en methodes demonstreren
Functionele analyse
Maak een nieuwe klasse, WorkingStudent
. Een werkstudent verschilt van een student omdat hij soms moet gaan werken en omdat hij een bepaald aantal werkuren per week moet presteren.
Technische analyse
Deze klasse erft over van de klasse Student
die je voor het eerst hebt gebruikt in hoofdstuk 8.
Bovenop alle eigenschappen / methoden van Student
heeft WorkingStudent
:
een methode
HasWorkToday()
die willekeurigtrue
offalse
teruggeeft. Er is geen methodeNextBool
in de klasse random, maar je kan een willekeurig getal tussen 0 en 1 genereren en de uitkomst vertalen in een boolean.een property
WorkHours
die een aantal gepresteerde uren bijhoudt (alsbyte
). Deze staat waarden tussen 1 en 20 toe. Lagere of hogere waarden worden automatisch aangepast (naar 1 of 20 naargelang of de waarde lager of hoger is).de defaultwaarde van deze property is 10
Voeg een statische methode DemonstrateWorkingStudent()
toe aan je klasse voor deze les. Deze methode doet volgende zaken:
ze maakt met de default constructor één gewone student aan (de properties mag je invullen zoals je zelf wil, maar vul ze wel in)
ze maakt met de default constructor één werkstudent aan (de properties mag je invullen zoals je zelf wil, maar vul ze wel in)
ze plaatst beide in een
List<Student>
ze doorloopt met een
foreach
-lus de lijst en toont viaConsole.WriteLine
de naam van elke studentje moet deze methode kunnen opstarten vanuit je keuzemenu voor dit onderwerp
Klassen met aangepaste constructor maken
Functionele analyse
We schrijven een applicatie die een lijst van af te handelen taken bijhoudt. Er zijn twee soorten taken: éénmalige taken en terugkerende taken. Elke taak heeft een beschrijving, maar terugkerende taken hebben ook een bepaalde hoeveelheid tijd waarna ze herhaald moeten worden.
Technische analyse
Maak een klasse
Task
met een propertyDescription
en een constructor die een waarde voor deze beschrijving verwacht (eenstring
).Wanneer deze constructor wordt opgeroepen, wordt volgende tekst getoond: "Taak is aangemaakt." Je vult hier zelf de beschrijving van de taak in.
Maak een subklasse
RecurringTask
vanTask
. Deze heeft een constructor die twee zaken verwacht: een beschrijving (nog steeds eenstring
) en een aantal dagen (eenbyte
).Wanneer deze constructor wordt opgeroepen, wordt de tekst voor een gewone taak getoond. Daaronder wordt getoond: "Deze taak moet om de dagen herhaald worden."
Voeg een statische methode
DemonstrateTasks()
toe aan je klasse voor deze les. Deze methode maakt eerst eenArrayList
van taken aan en herhaalt daarna volgende stappen tot de gebruiker aangeeft dat hij klaar is:ze toont drie opties: een taak aanmaken, een terugkerende taak aanmaken of stoppen
indien de gebruiker vraagt een taak aan te maken, vraagt ze een beschrijving, maakt ze de taak en voegt ze deze toe aan de lijst
indien de gebruiker vraagt een terugkerende taak aan te maken, vraagt ze een beschrijving en een aantal dagen, maakt ze de terugkerende taak en voegt ze deze toe aan de lijst
indien de gebruiker wenst te stoppen, eindigt ze zonder resultaat
je moet deze methode kunnen opstarten vanuit je keuzemenu voor dit onderwerp
Voorbeeldinteractie
Oefening: H12-ziekenhuis
Leerdoelen
werken met methodes
methodes overschrijfbaar maken
code specifieker maken met behulp van subklassen
Functionele analyse
Dit programma berekent de doktersrekening van een patiënt, op basis van een basisbedrag (€50) en een extra kost (€20/uur). In het geval van een verzekerde patiënt worden de kosten met 10% verlaagd.
Technische analyse
Schrijf twee klassen:
Patient
enInsuredPatient
Beide hebben als properties een naam (een
string
) en een verblijfsduur (eenuint
)Beide hebben één constructor die de naam en verblijfsduur als parameter hebben
Beide hebben een methode
ShowCost
die een boodschap op het scherm print die zegt hoe veel die patiënt moet betalenOmdat de kost anders bepaald wordt voor een gewone patiënt dan voor een verzekerde patiënt, moet je deze methode overschrijfbaar maken in
Patient
en moet je ze overschrijven inInsuredPatient
. De kost wordt getoond met twee cijfers na de komma.
Voeg een statische methode
DemonstratePatients()
toe aan je klasse voor deze les. Deze methode maakt patiënten aan en roept hun methodeShowCost
op, zodat onderstaande voorbeeldinteractie te zien is
voorbeeldinteractie
Zie je geen €-symbool in je output? In het eerste semester hebben we gezien hoe je het gebruik van Unicode activeert.
Testscenario's
Test ook uit met een verblijf van 1 uur.
Test ook uit met een verblijf van 0 uur.
Test ook uit met de patiënten beschreven in de voorbeeldinteractie.
Oefening: dynamic dispatch
Leerdoelen
herbruik code ouderklasse
virtual, override, base
Functionele analyse
Onze rapporten van studenten missen belangrijke informatie. We willen te zien krijgen wie het statuut van werkstudent heeft.
Technische analyse
Pas je klassen Student
en WorkingStudent
aan, zodat de bestaande methode ShowOverview
een uitgebreider overzicht toont voor werkstudenten (voor gewone studenten blijft het ongewijzigd). Dit heeft dan de vorm:
De laatste twee regels komen bovenop de info die je eerder al toonde. Maak gebruik van base
zodat je niet de volledige implementatie opnieuw hoeft te schrijven. Pas nu je methode DemonstrateWorkingStudent
aan zodat niet de naam van elke student in de lijst wordt getoond, maar zodat zijn volledig rapport wordt getoond.
Last updated