Integritätsbedingung
Dieser Artikel wird derzeit von einem Autor gründlich bearbeitet. Die Inhalte sind daher evtl. noch inkonsistent.
Definition
Integritätsbedingungen (Zusicherungen, Assertions') sind Bedingungen, die ein Objekt oder eine Entität zu bestimmten Zeitpunkten oder dauerhaft erfüllen muss. Derartigen Bedingungen können durch boolesche Terme formal dargestellt werden.
Man unterscheidet verschiedene Arten von Integritätsbedingungen:
- Invarianten: Diese Bedingungen müssen vom zugehörigen Objekt/von der zugehörigen Entität dauerhaft erfüllt sein.
- Vorbedingungen: Diese Bedingungen müssen erfüllt sein, bevor eine zugehörige Modifikations-Methode aufgerufen werden kann.
- Nachbedingungen: Diese Bedingungen müssen erfüllt sein, nachdem eine zugehörige Modifikations-Methode aufgerufen wurde.
Bemerkung
Integritätsbedingungen können vom System selbstständig überwacht werden (wie dies z.B. bei SQL der Fall ist) oder vom
Programmierer zu bestimmten Zeitpunkten überprüft werden. Dazu gibt es häufig spezielle Befehle (wie z.B. assert
)
oder sogar ganze Testumgebungen wie z.B. Modultests (Unit-Tests).
Beispiele
Für ein Dreiecksobjekt mit den drei Seiten a
, b
und c
gelten folgende Invarianten:
a>0
,b>0
,c>0
a+b>c
,b+c>a
,a+c>b
Für die Methode pop
eines Kellerobjekts (Stack) k
gilt die Vorbedingung !k.empty()
,
d.h., das oberste Kellerelement kann nur entfernt werden, wenn der Keller nicht leer ist.
Nachbedingungen haben häufig einen zeitlichen Bezug, d.h. ein Wert, der sich geändert hat, muss in einer bestimmten Beziehung
zu dem ursprünglichen Wert stehen. Zu Beispiel gelten für die Methode scale(f: double): void
, die auf ein Dreieck mit
den drei Seiten a
, b
und c
angewendet werden, folgende Nachbedingungen:
newvalue(a)=f*oldvalue(a)
,newvalue(b)=f*oldvalue(b)
,newvalue(c)=f*oldvalue(c)