Exercise index of this lecture   Alphabetic index   Course home   

Exercises
Designkontrakter og ansvarsfordeling


9.1   Pre- og postbetingelser i CircularList  

På den tilknyttede slide er der vist pre- og postbetingelser for klassen CircularList. I betingelserne anvendes funktionerne empty(), countElements(), isCircular(), isFirst(Object), isLast(Object), retrieveSecond() og retrieveButLast().

Denne opgave går ud på at implementere ovennævnte funktioner som private operationer i klassen CircularList. Simuler pre- og postbetingelserne ved at kalde funktionerne hhv. først og sidst i klassen's metoder. Hvis der brydes en prebetingelse skal man udføre:

   throw new PreconditionBroken()

Tilsvarende skal et brud af en postbetingelse føre til udførelse af:

   throw new PostconditionBroken()

Download filen med min løsning af opgaven om Cirkulære lister. Denne fil indeholder endvidere de nødvendige erklæringer af de ovenfor nævnte exception klasser.

Udtrykkene i 'old ...' kan volde særlige problemer. Ideen med old er at kunne evaluere et udtryk i den programtilstand som bestod netop inden metoden blev kaldt. Derfor vil det være en mulighed at forudberegne disse 'old udtryk' i starten af metoden.

 

Solution


9.2   Kontrakter i Bankkonto  

Denne opgave handler igen om én af vore favoriteksempler, nemlig klassen Konto. Ved øvelserne i lektion 3 blev der stillet en opgave om at repræsentere en Konto med en transaktionshistorie. Brug løsningen på den tidligere opgave hvis I har behov for at hente et passende udgangspunkt for denne opgave.

Forsyn klassen konto med en kontrakt. Mere specifikt:

    Lav pre- og postbetingelser på alle operationer i klassen Definer en klasseinvariant

Vær specielt opmærksom på invarianten, som skal sikre konsistens mellem datarepræsentationen (transaktionshistorien) og de eksterne egenskaber af kontoen.

(Man kan iøvrigt hente meget konkret inspiration til denne opgave i artiklen 'Applying Design by Contract').

 


9.3   Klasseinvariant i DoubleLinkable  

Vi har i en tidligere lektion studeret dobbeltkædede lister. Se her for den relevante slide.

Formuler en passende klasseinvariant for en dobbeltkædet liste, som udtrykker at dobbeltkædningen er i orden.

Skitser et prædikat (boolsk funktion) på klassen DoubleLinkable, som udtrykker at et enkelt led i kæden er 'i orden'.

 

Solution


Generated: Monday March 31, 2008, 12:09:02
on the system cs-unix