11.1 Overerving
11.2 Polymorfisme
11.3 Voorbeeld
Oefeningen hoofdstuk 11
11.1 Overerving
Overerving of inheritance betekent dat je een andere, nieuwe klasse kan maken vanuit een bestaande klasse. Met andere woorden hergebruiken we software(-onderdelen) en breiden deze eventueel uit met nieuwe mogelijkheden.
De oorspronkelijke klasse heet de “superklasse” of “basisklasse” en de nieuwe klasse de “subklasse” of “afgeleide klasse”. De subklasse beschikt automatisch over dezelfde attributen en methoden als de superklasse. Verder kan de subklasse attributen of methoden van zichzelf hebben.
Het grote voordeel is dat de bestaande superklasse intact blijft en dat wijzigingen en aanvullingen in de nieuwe subklasse komen. Bijgevolg kan je alle eerder geschreven software blijven gebruiken.
Bij overerving spreken we van een “is een-relatie“. Een object van een subklasse is ook een object van de superklasse.
Top
11.2 Polymorfisme
De term polymorfisme (letterlijk: veelvormigheid) betekent dat een variabele objecten van verschillende types kan bevatten. In het algemeen komt het erop neer dat een object van een subklasse kan gezien worden als een element van een superklasse en dus ook de eigenschappen en methoden van die superklasse kan gebruiken.
Top
11.3 Voorbeeld
We openen het project “people”, dat we terugvinden is in de map examples van BlueJ.
De klasse Database en de uses-relatie (stippellijn-pijl) laten we buiten beschouwing. Centraal staat de abstracte klasse Person. Deze klasse is abstract gedefinieerd omdat er geen objecten aangemaakt worden van de klasse Person. Ieder object behoort tot één van de twee subklassen, namelijk “Staff” of “Student”.
De klassen “Staff” en “Student” zijn subklassen van de superklasse “Person”. Ieder object van de klasse “Staff” of “Student” is ook een object van de klasse “Person”. De volle pijlen geven de overerving weer.
Met het woord “extends” wordt in de broncode aangegeven dat de klasse Staff zowel de objectvariabelen als de methoden van de klasse Person erft.
We maken een object van het type Staff en roepen met de rechtermuisknop het menu op met de publieke methode. Naast de specifieke methoden van de klasse Staff zelf, zien we ook de publieke methoden van de klasse Person die de subklassen overgeërfd hebben.
De bemerking “[ redefined in Staff ]” bij de methode “toString” wijst erop dat deze publieke methode overruled wordt in de subklasse Staff. Dit is een voorbeeld van polymorfisme.
Top
Oefeningen hoofdstuk 11
Oefening 11-1 Ontwerp een klasse Punt voor de opslag van twee velden, namelijk de x- en de y-coördinaat. Geef de klasse een constructor die een punt (0,0) aanmaakt en een constructor waaraan je de x- en de y-coördinaat kan meegeven als parameter. Voorzie een methode om de coördinaten op te vragen.
Ontwerp daarna de klasse Cirkel. Deze klasse erft de eigenschappen van de klasse Punt. Het punt is namelijk het middelpunt van de cirkel. Voeg aan de klasse Cirkel het veld “straal” toe. Voorzie bijkomende methoden om de omtrek en oppervlakte te berekenen.
Oefening 11-2 Deze oefening is een uitbreiding op oefening 10-2 waar we de klasse Rechthoek gemaakt hebben. Ontwerp de klasse Balk die overerft van de klasse Rechthoek.
Voorzie 3 constructors:
- de eerste maakt een nieuwe balk aan met een standaard ingestelde diepte;
- de tweede laat toe om zelf een diepte op te geven;
- de derde constructor geeft de mogelijkheid om naast de diepte ook de basis en de hoogte van de rechthoek in te geven.
Voeg een methode toe om het volume van de balk te berekenen.
Oefening 11-3 Ontwikkel in BlueJ een systeem via overerving voor een platenzaak die cd’s en dvd’s verkoopt. Van elke cd en dvd wordt de titel, de prijs en het aantal stuks in voorraad bijgehouden. Van de cd’s wordt ook bijgehouden hoeveel liedjes erop staan.
De winkelbediende moet de voorraad kunnen wijzigen indien een cd of dvd verkocht wordt.
De zaakvoerder wenst een overzicht van het aantal stuks in voorraad en de totale verkoopwaarde van de hele voorraad van ieder artikel.
Oefening 11-4 De platenzaak uit oefening 11-3 besluit het assortiment uit te breiden met games. Doe de nodige aanpassingen in BlueJ.
Oefening 11-5 In een bedrijf werken 3 soorten werknemers: arbeiders, bedienden en kaderleden. Ontwerp voor ieder een aparte klasse. Alle werknemers ontvangen maaltijdcheques. Het aantal maaltijdcheques komt overeen met het aantal gewerkte dagen. Arbeiders ontvangen een uurloon daarom is het belangrijk om voor iedere arbeider bij te houden het aantal gewerkte uren in de afgelopen maand. Bedienden en kaderleden krijgen een maandwedde uitbetaald. Kaderleden hebben recht op een bedrijfswagen. Van de kaderleden wordt bijgehouden welk type auto ze hebben.
Maak gebruik van overerving bij het oplossen van deze oefening.