Lecture overview -- Keyboard shortcut: 'u'  Previous page: Kontrakter i praktisk programudvikling [Section] -- Keyboard shortcut: 'p'  Next page: Udbyttet af kontrakter i programudviklings processen -- 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 27 : 31
Forelæsningsnoter i Objekt-orienteret Programmering
Designkontrakter og ansvarsfordeling
Løbende check af kontrakter under programudførelse

En væsentlig praktisk gevinst ved anvendelse af kontrakter høstes ved at checke kontrakternes gyldighed i takt med at programmet udføres

Undervejs i et programudførelse kan assertions checkes i forhold til programmets aktuelle tilstand

Assertions er udtryk for redundans, og assertions kan som sådan anvendes til check. I lidt mere jævnt sprog kan vi sige, at assertions er et supplerende element i vore programmer i forhold til 'det der sker i operationerne'; Assertions beskriver programmets handlinger på højere og logisk niveau. Vi kan sammenligne det der faktisk sker når vi kører med programmet med det, der er udtrykt i vore assertions.

  • Brud på en kontrakt bringer programudførelsen i store vanskeligheder

    • Under programtest leder dette til debugging og fejlrettelse

    • Under programdrift bringer dette programmet i en undtagelsessituation som bør føre til kontrolleret nedlukning eller valg af en alternativ programudførelsesstrategi

Når eller hvis der opdages et brud på en kontrakt, f.eks. en invariant som ikke holder når man kører programmet, har vi identificeret et stort problem. Det giver ikke mening at fortsætte programudførelsen. Der kan være tale om en programmeringsfejl i forhold til specifikationen af programmet. I en debugging situation er det eneste fornuftige at få rettet denne fejl. I en driftssituation har vi identificeret en undtagelsessituation, som typisk håndteres ved en kontrolleret nedlukning af programmet. I nogle meget kritiske programmer vil vi ønske at genoptage programudførelsen med en ændret 'beregningsstrategi' (recovery).