Neues Google-Projekt: Contracts für Java

Contracts für Java (cofoja) will eine Java-Implementierung des durch die Programmiersprache Eiffel bekannt gewordenen Konzepts "Design by Contract" bereitstellen.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Alexander Neumann

Contracts für Java (cofoja) ist ein neues Google-Projekt, das eine Java-Implementierung des durch die Programmiersprache Eiffel bekannt gewordenen Konzepts "Design by Contract" bereitstellen möchte. Damit kann der Programmierer Vor- und Nachbedingungen festlegen, die vor dem Aufruf einer Funktion beziehungsweise bei deren Ende erfüllt sein müssen. Außerdem gibt es Klasseninvarianten, mit denen sich zum Beispiel der Wertebereich von Variablen einschränken lässt. Ein Beispiel für das Konzept, wie es cofoja nutzt, sieht wie folgt aus:

interface Time {

...

@Ensures({ "result >= 0", "result <= 23" })
int getHour();

@Requires({ "h >=0", "h <= 23" })
@Ensures("getHour()==h")
void setHour(int h)

...

}

Dieses Beispiel legt einen Vertrag fest, bei dem das Ergebnis der getHour()-Methode zwischen 0 und 23 liegen muss und die setHour()-Methode nicht einen Wert außerhalb dieser Spanne enthalten darf. Nach der Ausführung der Methode wird getHour() den Wert zurückgeben, der für setHour() beschlossen wurde.

Entwickler sollen darüber hinaus mit den Contracts mehr Informationen über den Ablauf eines Programms erhalten. cofoja wurde als Java-Assertions implementiert, die die Verträge als Boolsche Ausdrücke definieren. Die Contracts können von Schnittstellen und Klassen erben sowie gezielt zur Laufzeit eingesetzt werden. Standardmäßig sind sie deaktiviert und über einen JVM-Parameter zuschaltbar.

Der Code des Projekts ist unter die LGPL (GNU Lesser General Public License) gestellt. Ein wissenschaftliches Dokument (PDF), das in das Framework einführt, ist ebenfalls verfügbar. (ane)