Integritätsbedingung: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Die Seite wurde neu angelegt: „{{In Bearbeitung}} =Definition= Integritätsbedingungen ('''Zusicherungen''', '''Assertions'''') sind Bedingungen, die ein Objekt oder eine Entität z…“
 
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{In Bearbeitung}}
=Definition=
=Definition=
[[Integritätsbedingung]]en ('''Zusicherungen''', '''Assertions'''') sind Bedingungen, die ein [[Objekt]] oder eine [[Entität]] zu bestimmten  
[[Integritätsbedingung]]en ('''Zusicherungen''', '''Assertions''') sind Bedingungen, die die Inhalte von [[Variable]]n, [[Objekt]]e oder [[Entität]]en zu bestimmten Zeitpunkten oder dauerhaft erfüllen müssen. Derartigen Bedingungen können durch [[Term|boolesche Terme]] formal dargestellt werden.  
Zeitpunkten oder dauerhaft erfüllen muss. Derartigen Bedingungen können durch [[Term|boolesche Terme]] formal dargestellt werden.  


Man unterscheidet verschiedene Arten von Integritätsbedingungen:
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.
* Invarianten: Diese Bedingungen müssen dauerhaft erfüllt sein.
* Vorbedingungen: Diese Bedingungen müssen erfüllt sein, bevor eine zugehörige [[Modifikations-Methode]] aufgerufen werden kann.
* Vorbedingungen: Diese Bedingungen müssen erfüllt sein, bevor eine bestimmte [[Methode]]/[[Funktion]] aufgerufen werden kann.
* Nachbedingungen: Diese Bedingungen müssen erfüllt sein, nachdem eine zugehörige [[Modifikations-Methode]] aufgerufen wurde.   
* Nachbedingungen: Diese Bedingungen müssen erfüllt sein, nachdem eine bestimmte [[Methode]]/[[Funktion]] aufgerufen wurde.   


=Bemerkung=
=Bemerkung=
Zeile 30: Zeile 28:


* <code>newvalue(a)=f*oldvalue(a)</code>, <code>newvalue(b)=f*oldvalue(b)</code>, <code>newvalue(c)=f*oldvalue(c)</code>
* <code>newvalue(a)=f*oldvalue(a)</code>, <code>newvalue(b)=f*oldvalue(b)</code>, <code>newvalue(c)=f*oldvalue(c)</code>
==Datentypen und Signaturen==
[[Datentyp]]en und [[Signatur]]en von [[Methode]]n, [[Prozedure]]n, [[Funktion]]en sind spezielle Integritätsbedingungen.
Zum Beispiel sagt die Variablendefinition <code>var x: int</code> aus, dass die Variable <code>x</code> zu jedem Zeitpunkt nur Werte
vom Typ <code>int</code> enthalten darf. Genauso besagt die Funktionsdefinition <code>function sqrt(x: double): double</code>,
dass die Funktion nur mit Double-Werten aufgerufen werden darf (Vorbedingung) und dass sie nur Double-Werte als Ergebnis liefert (Nachbedingung). 
==SQL==
Gerade in SQL gibt es viele Integritätsbedingungen, die automatisch vom System überprüft werden.
Man kann Not-Null-Bedingungn, [[Primärschlüssel]], [[Unique]]-Constraints, [[Fremdschlüssel]] und Check-Constraints formulieren. Das zugehörige
System garantiert dann, dass diese Bedingungen dauerhaft erfüllt sind (Invarianten).  Weitere Integritätsbedingungen (insbesonder Vor- und Nachbedinungen) können mit Hilfe von Triggern formalisiert und überprüft werden. 


=Quellen=
=Quellen=

Version vom 21. Februar 2011, 17:11 Uhr

Definition

Integritätsbedingungen (Zusicherungen, Assertions) sind Bedingungen, die die Inhalte von Variablen, Objekte oder Entitäten zu bestimmten Zeitpunkten oder dauerhaft erfüllen müssen. Derartigen Bedingungen können durch boolesche Terme formal dargestellt werden.

Man unterscheidet verschiedene Arten von Integritätsbedingungen:

  • Invarianten: Diese Bedingungen müssen dauerhaft erfüllt sein.
  • Vorbedingungen: Diese Bedingungen müssen erfüllt sein, bevor eine bestimmte Methode/Funktion aufgerufen werden kann.
  • Nachbedingungen: Diese Bedingungen müssen erfüllt sein, nachdem eine bestimmte Methode/Funktion 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)

Datentypen und Signaturen

Datentypen und Signaturen von Methoden, Prozeduren, Funktionen sind spezielle Integritätsbedingungen.

Zum Beispiel sagt die Variablendefinition var x: int aus, dass die Variable x zu jedem Zeitpunkt nur Werte vom Typ int enthalten darf. Genauso besagt die Funktionsdefinition function sqrt(x: double): double, dass die Funktion nur mit Double-Werten aufgerufen werden darf (Vorbedingung) und dass sie nur Double-Werte als Ergebnis liefert (Nachbedingung).

SQL

Gerade in SQL gibt es viele Integritätsbedingungen, die automatisch vom System überprüft werden. Man kann Not-Null-Bedingungn, Primärschlüssel, Unique-Constraints, Fremdschlüssel und Check-Constraints formulieren. Das zugehörige System garantiert dann, dass diese Bedingungen dauerhaft erfüllt sind (Invarianten). Weitere Integritätsbedingungen (insbesonder Vor- und Nachbedinungen) können mit Hilfe von Triggern formalisiert und überprüft werden.

Quellen

Siehe auch


Dieser Artikel ist GlossarWiki-konform.