Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
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.