Lecture overview -- Keyboard shortcut: 'u'  Previous page: Generelle kontraktaspekter: klasseinvarianter [Section] -- Keyboard shortcut: 'p'  Next page: Eksempel på klasseinvariant: CircularList -- 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 18 : 31
Forelæsningsnoter i Objekt-orienteret Programmering
Designkontrakter og ansvarsfordeling
Klasseinvarianter

Pre- og postbetingelser er specifikationselementer, som er knyttet til operationer. Vi kan drage fordel af pre- og postbetingelser i både konventionel imperativ programmering og i funktionsorienteret programmering. I forbindelse med vores introduktion af klasseinvarianter vil vi nu for alvor drage fordel af, at vi organiserer et program i objekter

Klasseinvarianten udtrykker nogle krav, som skal være opfyldt på ethvert stabilt tidspunkt i levetiden af klassens instanser

En klasseinvariant udtrykker egenskaber af et objekt, som er uforanderlige i forhold til en række påvirkninger af objektet

En invariant er en egenskab som er uforanderlig når et objekt (eller lignende) bliver udsat for en række påvirkninger

  • En klasseinvariant

    • virker som en generel skærpelse af både pre- og postbetingelser af metoder klassen

    • kan benyttes til at udtrykke nogle generelle konsistensforhold mellem metoder og/eller datarepræsentation

    • udgør et 'sundhedskriterium' for instanser af klassen

Der skal altid være én kop kaffe på kanden

Invarianter kendes også fra vores ikke-tekniske hverdag. Det er f.eks. en regel, at kanden på afdelingens kaffemaskiner altid skal indeholde mindst én krus kaffe. Alle transaktioner på kaffemaskinen skal overholde denne invariant. Bemærk at handlingerne, der beståer i at tømme kaffekanden samt at lave ny kaffe er at betragte som én transaktion i denne model. På et tidspunkt er kanden tom, men da dette tidspunkt ikke forekommer mellem to (eksterne) transaktioner på maskinen, bryder vi ikke invarianten.

Go to exerciseKlasseinvariant i DoubleLinkable