Exercise index of this lecture   Alphabetic index   Course home   

Exercises
Nedarvning


7.1   Opgave om kvadrater i forhold til rektangler  

Denne opgave skal ses i forlængelse af opgaven om rektangler fra en tidligere lektion.

Lav en klasse Square (dansk: Kvadrat). Det er åbentlyst for alle, at der er et nært forhold mellem kvadrater og rektangler, men hvilket? Bør Rectangle arve fra Square, eller Square fra Rectangle? Overvej også om Square kan opfattes som en specialisering af Rectangle (eller omvendt). Eller vil det være mere givende at opfatte Rectangle som en udvidelse af Kvadrat (eller omvendt)?

Implementer ud fra resultatet af disse overvejelser klassen Square. (Jeg linker her til min udgave af Rectangle incl. hjælpeklasser hvis I ønsker at tage udgangspunkt i denne). Klassen skal have 'passende konstruktorer' ala konstruktorerne fra Rectangle. Konstruktorerne i Square og Rectangle bør anvende hinanden via aktivering af super(....).

Bortset fra konstruktorerne skal klassen Rectangle og Square ligne hinanden så meget som muligt.

 

Solution


7.2   Dobbeltkædet cirkulær liste  

Denne opgave skal ses i forlængelse af opgaven om cirkulære lister fra en tidligere lektion .

I kan her vælge at fortsætte med løsning af opgaven om enkeltkædede cirkulære lister. Alternativt kan I læse videre og gennemføre denne opgave, som langt hen ad vejen kan opfattes som en designøvelse.

I denne opgave bedes du designe en udvidelse af klassen CircularList, som var resultatet af opgaven fra lektion 5. (Jeg linker her til min udgave af CircularList for de af jer, som ønsker at tage udgangspunkt i denne). Udvidelsen består i at de cirkulære lister nu skal være dobbeltkædede. Lav en klasse DoubleCircularList som arver fra CircularList. Antag at klassen Linkable (hvis instanser er kædeobjekter) er en indre klasse til CircularList. DoubleCircularList bør tilsvarende indeholde en indre klasse, DoubleLinkable, som skal arve fra Linkable.

Start med at lave den indre klasse DoubleLinkable i en tom klasse DoubleCircularList, og lav dernæst så meget af DoubleCircularList som tiden tillader. Læg vægt på følgende aspekter:

  • Konstruktoren i DoubleCircularList i forhold til konstruktoren i superklassen.
  • Protectede egenskaber i CircularList, som anvendes i DoubleCircularList.
  • Muligheden for at kalde operationerne i CircularList under implementationen af de tilsvarende operationer i DoubleCircularList: super.circularListOperation(...).
Der er ikke tid til at lave en færdig implementation af DoubleCircularList i denne øvelsesgang. Det væsentlige i denne opgave er at komme igennem design overvejelserne, idet dette fører jer igennem langt de fleste aspekter, som er berørt i lektionen om nedarvning.

Jeg erindrer om, at vi faktisk smugkiggede på DoubleLinkable i forelæsningen . I kan naturligvis vælge at tage udgangspunkt i denne version af DoubleLinkable, og dermed gå mere direkte igang med programmering af DoubleCircularList.

 

Solution


7.3   Opgave om covarians  

Forklar hvorfor der ikke opstår problemer i forbindelse med covarians i det Java program, som blev omtalt på den tilknyttede slide
 

Solution


Generated: Monday March 31, 2008, 12:08:47
on the system cs-unix