22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

3.7.1 Zusicherungen<br />

Eiffel logischer Operator<br />

and Konjunktion ∧<br />

or Disjunktion ∨<br />

and then Sequentielle Konjunktion ∧<br />

or else Sequentielle Disjunktion ∨<br />

not Negation ¬<br />

xor Exklusive Disjunktion ˙∨<br />

implies Implikation ⇒<br />

Abbildung 3.22: boolesche Ausdrücke in Eiffel<br />

Eine wichtige Möglichkeit, die Gefahr von Abweichungen zwischen Software-Spezifikationen und ihren Implementierungen<br />

zu vermin<strong>der</strong>n ist die Einführung von Spezifikationselementen in die Implementierung. D.h. man<br />

ordnet einem Element ausführbaren Codes – Klassen, Routinen, o<strong>der</strong> Anweisungen – einen Ausdruck über<br />

den Zweck dieses Elementes zu. Ein solcher Ausdruck, <strong>der</strong> angibt, was das Element eigentlich tun sollte, wird<br />

Zusicherung (assertion) genannt.<br />

Eine Zusicherung ist eine Eigenschaft einiger Werte von Programm-Größen. Sie drückt zum Beispiel aus,<br />

daß bei <strong>der</strong> Erzeugung von Fel<strong>der</strong>n <strong>der</strong> maximale Index nicht kleiner sein darf als <strong>der</strong> minimale. Mathematisch<br />

betrachtet ist eine Zusicherung etwas ähnliches wie ein Prädikat. Allerdings besitzt die in Eiffel<br />

verwendete Sprache für Zusicherungen nur einen Teil <strong>der</strong> Mächtigkeit <strong>der</strong> in Abschnitt 2.2.2 vorgestellten<br />

Prädikatenlogik 16 son<strong>der</strong>n entspricht in etwa nur <strong>der</strong> im Abschnitt 2.2.6 besprochenen dreiwertigen Logik. Es<br />

ist also nicht möglich, jede Aussage über die Eigenschaften von Größen präzise als Zusicherung auszudrücken.<br />

Dies ist jedoch nicht beson<strong>der</strong>s problematisch, da die Zusicherungssprache in erster Linie dazu dienen soll,<br />

Verträge zwischen den Entwicklern von Softwaremoduln zu fixieren. Man kann daher zur Not auch Teilinformationen<br />

in <strong>der</strong> Form von Kommentaren zur Zusicherung verstecken.<br />

Syntaktisch sind Zusicherungen boolesche Ausdrücke <strong>der</strong> Programmiersprache Eiffel (siehe Abbildung 3.22)<br />

mit einigen Erweiterungen, die nur in Zusicherungen, nicht aber im Programmtext benutzt werden können.<br />

• Anstelle <strong>der</strong> gewöhnlichen Konjunktion and wird zur besseren Trennung einzelner, nicht unmittelbar<br />

zusammenhängen<strong>der</strong>, Bestandteile einer Zusicherung ein Semikolon verwendet wie z.B. in<br />

n>0 ; not x=Void<br />

• Bestandteile einer Zusicherung(, die durch Semikolon getrennt sind,) können mit Namen gekennzeichnet<br />

werden, die durch einen Doppelpunkt abgetrennt werden, wie z.B. in<br />

Positiv: n>0 ; Nichtleer: not x=Void<br />

Die Ähnlichkeit zur Syntax <strong>der</strong> Deklaration von Größen ist durchaus gewollt. Namen werden vom Laufzeitsystem<br />

registriert, um gegebenenfalls Meldungen zu erzeugen und eine programmierte Verarbeitung<br />

von Fehlern zu ermöglichen.<br />

• Eine zusätzliche Erweiterung old werden wir im folgenden Abschnitt vorstellen.<br />

Auf Wunsch werden Zusicherungen in <strong>der</strong> Eiffel-Umgebung zur Laufzeit überwacht, was sie zu einem mächtigen<br />

Werkzeug beim Aufspüren von Fehlern und für eine kontrollierte Behandlung von Ausnahmen macht. Diese<br />

Verwendungszwecke wollen wir jedoch erst in späteren Kapiteln aufgreifen. Unser jetziges Interesse liegt in <strong>der</strong><br />

Anwendung von Zusicherungen als Werkzeug zur Konstruktion korrekter Systeme und zur Dokumentation,<br />

warum sie korrekt sind.<br />

16 Der Grund hierfür ist, daß zur Überprüfung von Zusicherungen Verfahren benötigt werden, die logische Beweise ausführen<br />

und hierzu den Kalkül <strong>der</strong> Zusicherungssprache und einen Suchmechanismus verwenden. Die Prädikatenlogik ist für diese Zwecke<br />

zu mächtig: es gibt kein Verfahren, das für beliebige prädikatenlogische Formeln beweisen kann, ob sie wahr o<strong>der</strong> falsch sind.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!