© 1999-2003, Flemming Koch Jensen
Alle rettigheder forbeholdt
Nedarvning

Vejledende løsninger
Generel vejledning
Opgaver

 

 

1

I denne opgave skal vi lave en række klasser der kan repræsentere simple geometriske elementer: et punkt, en cirkel og et rektangel.

De tre klasser, der bruges til at repræsentere disse tre elementer kan beskrives i følgende klasse-hierarki:
Figur 1:
Klasse-hierarki for de tre geometriske klasser

Super-klassen Punkt indeholder oplysning om en placering i koordinatsystemet. Klassen har to konstruktorer: en set-konstruktor og en copy-konstruktor.

Punkt har en metode move, til at flytte punktet. De to parametre til move angiver en ændring i henholdsvis x- og y-koordinaten. Hvis en parameter er negativ skal den trækkes fra den tilhørende koordinat; hvis den er positiv skal den lægges til. Hvis man ikke ønsker at ændre den pågældende koordinat angives 0.
De to andre klasser nedarver fra Punkt. Den positions-angivelse de arver fra Punkt placerer disse geometriske elementer i koordinat-systemet.
For en Cirkel angiver punktets placering centrum af cirklen. For et Rektangel angiver den placeringen af øverste venstre hjørne:
Figur 2:
Placering af Cirkel og Rektangel
De to subklasser udnytter på denne måde egenskaben "placering i koordinatsystemet" som de arver fra Punkt.
Ud over disse egenskaber udbygger Cirkel med en radius, og Rektangel med en bredde og en højde.
Begge subklasser skal have en set-konstruktor. Begge set-konstruktorer skal modtage positionen i form at et Punkt. Ud over dette Punkt skal set-konstruktorerne også modtage de andre dele af datakernen.
Begge subklasser skal have metoderne areal og omkreds, der returnerer henholdsvis arealet og omkredsen af den geometriske figur. Vedrørende cirklen gælder der følgende formler for areal og omkreds:
Figur 3:
Cirklens areal og omkreds
Du kan anvende konstanten Math.PI som pi.

Lav til slut en test-anvendelse.

 

*2

I denne opgave skal vi lave en række klasser, der kan bruges til at repræsentere forskellige levende organismer. Klasserne der skal laves kan opstilles i følgende klasse-hierarki.

Figur 4:
Klasse-hierarki for organismer
Du skal lave en package til disse klasser. Kald den organismer.
Klassen Organisme har de egenskaber, der er fælles for alle de andre. Alle organismer har en alder, et helt antal år. Alle organismer er enten døde eller levende.
Planter kan ikke dø af alderdom. Alle Dyr kan dø af alderdom. Et Rovdyr dør når det bliver ti år. En PlanteSpiser dør når den bliver tyve år.
En PlanteSpiser kan spise en Plante. De første tre år er en Plante giftig. En PlanteSpiser vil undlade at spise en Plante, hvis den er giftig.
Et Rovdyr kan spise en PlanteSpiser.

 

På baggrund af disse forhold skal der specifikt laves følgende:

Organisme skal have en default-konstruktor, så organismen er "nyfødt".
Organisme skal have en metode , der slår organismen ihjel.
Organisme skal have en metode gro, der ælder organismen med ét år.

 

Du skal vurdere i hvilken udstrækning det er nødvendigt at override de to metoder og gro i subklasserne.

Rovdyr og PlanteSpiser kan begge spise et "bytte". Lav en metode spis til hver af dem. metoden spis skal som parameter have det som henholdsvis Rovdyr'et eller PlanteSpiser'en skal spise. Når noget bliver spist dør det, om muligt.

Implementer samtlige klasser og lave en test-anvendelse.