WikiDer > Invariante (Informatik)

Invariant (informatica)

In dem Informatik ist ein unveränderlich ein Prädikat das gleiche Wahrheitswert behält während der Aufführung eines Stückes Code.

Die Bestimmung von Invarianten von (Teilen von) Quellcode wird oft durchgeführt, wenn man über die Funktion und Korrektheit eines Computerprogramms nachdenken möchte. Invarianten werden häufig verwendet mit Compiler-Optimierung, Design by Contract und formale Methoden zum Bestimmen der Korrektheit eines Computerprogramms.

Programmierer verwenden oft Behauptungen die Invarianten explizit anzugeben.

Klasseninvariante

Im objektorientiertenProgrammiersprachen es gibt auch Klasseninvarianten, die die Zustände definieren, die a Objekt von a Klasse gefangen nehmen kann. Das Methoden der Klasse sollte diese Invarianten beibehalten. Eine Klasseninvariante wird oft mit der das objekt konstruieren erfasst und aufbewahrt, wenn öffentliche Methoden ausgeführt werden. Es ist möglich, die Klasseninvariante zwischen Aufrufen an interne (Privatgelände)-Methoden, dies wird jedoch nicht empfohlen, da sich das Objekt vorübergehend in einem ungültigen Zustand befindet.

Die Klasseninvariante definiert, welche Werte die Felder des Objekts und damit auch welche Zustände (mögliche Werte der Felder) gültig sind und welche nicht. Wie eine Invariante kann eine Klasseninvariante bei der Überlegung helfen, wie ein objektorientiertes Programm funktioniert und welche Annahmen Programmierer bei der Verwendung eines Objekts einer Klasse treffen dürfen. Eine Klasseninvariante muss nach dem gelten Konstrukteur und vor und nach dem Aufrufen einer öffentlichen Methode.

Die meisten objektorientierten Programmiersprachen unterstützen Assertionen, die es ermöglichen, Klasseninvarianten zu notieren. In einigen Sprachen gibt es auch eine separate Syntax zum Notieren einer Klasseninvariante. Java hat zum Beispiel die Java-Modellierungssprache mit denen solche Invarianten notiert werden können.

Beispiel

Das Folgende ist ein Beispiel für Klasseninvarianten in Java unter Verwendung der Java Modeling Language-Notation; dies definiert eine Syntax für die Anmerkungen die mit Methoden in Java platziert werden können. Öffentliche Methoden müssen eine Vorbedingung und eine Nachbedingung angeben, um die Klasseninvariante beizubehalten.

ÖffentlichkeitKlasseDatum{int/*@spec_public@*/Tag;int/*@spec_public@*/Stunde;/*@invariante 1<=Tag && Tag <=31; @*/// klasseninvariante/*@invariante 0<=Stunde && Stunde < 24; @*/// klasseninvariante/*@       @erfordert 1 <= d && d <=31;       @erfordert 0<=h && h < 24;       @*/ÖffentlichkeitDatum(intd,intha){Tag=d;Stunde=ha;}// Konstrukteur/*@       @erfordert 1 <= d && d <=31;       @sichernday == d;      @*/ÖffentlichkeitLeeresetDay(intd){wenn(1<=d&&d<=31)Tag=d;}/*@       @erfordert 0<=h && h < 24;      @sichert Stunde == h;      @*/ÖffentlichkeitLeeresetStunde(intha){wenn(0<=ha&&ha<24)Stunde=ha;}}