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
Herefter følger min løsning:
Her er endvidere et link til det rene Java program . |
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:
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
Invarianten for en dobbeltkædet lister er: For alle indre kædeobjekter k skal der gælde k.isPartOfDoubleLinking(); For et evt. første kædeobjekt k skal der gælde: k.isFirstOfDoubleLinking(); For et evt. sidste kædeobjekt k skal der gælde: k.isLastOfDoubleLinking(); Metoden isPartOfDoubleLinking(k) udtrykker uformelt at: k.next().previous() = k og k.previous().next() = k De to andre predikater er blot rand- og specialtilfælde af ovenstående. |
Generated: Monday March 31, 2008, 12:09:02
on the system cs-unix