Exercises in this lecture   Go to the notes, in which this exercise belongs -- Keyboard shortcut: 'u'   Alphabetic index   Course home   

Exercise solution 10.2
Klassificering af undtagelser i CircularList


Efter en konkret analyse viser det sig, at alle problemer i CircularList stammer fra forsøg på at tilgå elementer i en liste, som er tom. I nogle situationer vil vi aflæse elementet, i andre ønsker vi at slette det.

Vi definerer derfor en exception, RetrieveFromEmptyList, som en subklasse af den ønskede klasse CircularListException. Ligeledes definerer vi DeleteInEmptyList, der også er en subklasse af CircularListException. Med denne organisering er vi vel forberedte på situationen, hvor andre problemer vil kunne opstå i listen. Man kunne naturligvis også vælge at slå disse tre klasser sammen til én.

Vi kan bemærke, at nogle præbetingelser på operationer i CircularList er gjort ganske svage: retrieveFirst og retrieveLast returnerer null hvis listen er tom. Vi kunne vælge en prebetingelser der kræver en ikke tom liste; hvis prebetingelsen ikke overholdes kan vi kaste en exception. Dette vælger vi dog ikke at gøre her.

Her er et link til min løsning.

Lad mig henlede opmærksomheden på de steder, hvor de exception-kastende private hjælpe metoder firstLinkable og butLastLinkable bliver kaldt. Kaldene forekommer i tilstande, hvor der ikke vil opstå undtageler. Alligevel skal vi overholde 'catch or specify' princippet. Her vælger vi en pseudo håndtering (catch), som under normale omstændigheder aldrig bør være aktuel. Man kan i høj grad diskutere, om ikke det var bedre at specificere en exception på de berørte metoder.

Jeg må konstatere, at det var ganske besværligt at indføre exception handling i dette program. Nok netop lige så besværlig, at man spørger sig selv, om det er umagen værd...