Lecture overview -- Keyboard shortcut: 'u'  Previous page: Forholdet mellem nedarvning og kontrakter -- Keyboard shortcut: 'p'  Next page: Eksempel på klasseinvarianter: Trekantshierarkiet -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Play sound for this page -- Keyboard shortcut: 'y'  Page 23 : 31
Forelæsningsnoter i Objekt-orienteret Programmering
Designkontrakter og ansvarsfordeling
Subkontrakter

Vi har indset at mængden af assertions (pre- og postbetingelser samt invarianten) på en klasse C kan opfattes som en kontrakt. Vi vil nu studere hvordan denne kontrakt udvikler sig når vi danner subklasser af klassen C

Via polymorfi kan subklasser 'gøre det ud for' superklasser

Derfor skal subklasser's kontrakter overholde kontrakten defineret af en superklasse

Subklassers kontrakter skal udgøre en subkontrakt af superklassens kontrakt

  • Assertions i en subklasse

    • Prebetingelser må ikke strammes

    • Postbetingelser må ikke svækkes

    • Klasseinvarianter må ikke svækkes

En operation i en specialiseret klasse må ikke forhindre et kald af sig selv, som er garanteret af superklassens tilsvarende operation. Derfor må prebetingelsen ikke strammes

En operation i en specialiseret klasse skal gøre arbejdet mindst lige så godt som den tilsvarende operation i superklasenklasse. Derfor må postbetingelsen ikke svækkes

Operationer kan ikke redefineres 'på må og få' i et klassehierarki

Reglerne ovenfor formaliserer, at operationerne der redefineres ned gennem et specialiseringshierarki, skal være tæt beslægtede - også semantisk. Hidtil har vi kun set lagt bånd på navne og parametre af redefinerede operationer (covarians). Her kommer vi altså med nogle semantiske forventninger (krav) i forbindelse med redefintion. Dette er meget tilfredsstillende