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.
entdeckten Fehler stillschweigend hinwegzugehen. Daher muß die Verletzung von Zusicherungen dazu führen,<br />
daß die Routine abbricht und eine Fehlermeldung absetzt. Aber auch in diesem Fall wäre ein radikaler Abbruch<br />
des gesamten Programms nicht immer die beste Konsequenz. 31<br />
Da Ausnahmesituationen sich also nicht prinzipiell ausschließen lassen, bieten viele Programmiersprachen mittlerweile<br />
einen Mechanismus zur Behandlung von Ausnahmen (exceptions) an, welcher Ausnahmesituationen<br />
“abseits” von dem eigentlichen Programmablauf behandelt. Derartige Mechanismen bergen zwar die Gefahr<br />
in sich, daß Programmierer sie mißbrauchen um die strenge Struktur von Eiffel-Programmen zu umgehen.<br />
Sie werden jedoch gebraucht, um tatsächliche Ausnahmesitationen zu einem wohldefinierten Ende zu bringen<br />
anstatt einen Benutzer vor die Situation eines unkontrollierten Abbruchs zu stellen.<br />
Zwei Vorgehensweisen sind sinnvoll, wenn eine Ausnahme – also eine abnorme Bedingung während <strong>der</strong><br />
Ausführung eines Softwareelements – auftritt.<br />
Wie<strong>der</strong>aufnahme (resumption):<br />
Man versucht innerhalb <strong>der</strong> Routine, in <strong>der</strong> die Ausnahmesituation auftritt, diese durch Korrekturmaßnahmen<br />
zu beseitigen und nimmt die Durchführung <strong>der</strong> Routine wie<strong>der</strong> auf. In dieser Form ist es<br />
eventuell möglich, den Kontrakt zwischen dem Kunden und <strong>der</strong> Routine doch noch zu erfüllen.<br />
Natürlich muß die Wirkung <strong>der</strong> Korrekturmaßnahmen für die Routine zugänglich sein. Übergebene<br />
Argumente können nicht verän<strong>der</strong>t und lokale Variablen nicht neu initialisiert werden. Die Wie<strong>der</strong>holung<br />
(in Eiffel ausgelöst durch die Anweisung retry) muß also hinter den lokalen Deklarationen aufsetzen.<br />
Organisierte Panik:<br />
Läßt sich auf <strong>der</strong> Ebene <strong>der</strong> Routine die Ausnahmesituation nicht beheben, dann muß die Korrektur<br />
vom Benutzers durchgeführt werden. Dazu ist es notwendig, den eigenen Zustand in geordneter Weise<br />
abzubrechen (also z.B. vor dem Abbruch die Klasseninvariante zu erfüllen) und den Kunden von <strong>der</strong> Ausnahmesituation<br />
zu informieren. Der Kunde hat dann die Möglichkeit, seinerseits eine Fehlerbehandlung<br />
vorzunehmen und ggf. gezielte Korrekturen anzubringen.<br />
Alle an<strong>der</strong>en Vorgehensweisen würden einen Bruch gegenüber <strong>der</strong> Vertragssituation zwischen Kunden und<br />
Lieferanten bedeuten. Insbeson<strong>der</strong>e ist es nicht akzeptabel, nach <strong>der</strong> Entdeckung einer Ausnahmesituation<br />
stillschweigend die Steuerung an den Kunden zurückzugeben, <strong>der</strong> dann ahnungslos weiterarbeiten und ggf. eine<br />
katastrophale Situation auslösen würde. 32 Eine Routine muß ihren Vertrag erfüllen o<strong>der</strong> scheitern.<br />
Der Ausnahmemechanismus von Eiffel beruht auf diesen Grundgedanken und bietet zu je<strong>der</strong> Routine die<br />
Möglichkeit einer Ausnahmebehandlung an. Hierzu kann man nach dem Anweisungsteil und nach <strong>der</strong> Nachbedingung<br />
eine rescue-Klausel angeben, in <strong>der</strong> festgelegt wird, was im Falle einer Ausnahme zu tun ist.<br />
r is -- Kommentar<br />
require Vorbedingungen<br />
local Lokale Variablen<br />
do Anweisungsteil<br />
ensure Nachbedingungen<br />
rescue Ausnahmebehandlung<br />
end<br />
31 Mögliche weitere Ausnahmesituationen sind Fehler in <strong>der</strong> Arithmetik (Division durch Null, negatives Argument im Logarithmusg),<br />
Speicherplatzmangel, Fehler in <strong>der</strong> Ein- und Ausgabe. usw. Die Information, welche Art von Ausnahme aufgetreten<br />
ist, ist in <strong>der</strong> jeweiligen Klassendefinition enthalten, <strong>der</strong>en Routinendurchführung die Ausnahme ausgelöst hat. Für Systemfehler<br />
und allgemeine Ausnahmesituationen, wie die Verletzung von Zusicherungen, kann in <strong>der</strong> Klasse EXCEPTION die entsprechende<br />
Information gefunden werden, vorausgesetzt die aktuelle Routine ist einem Erben dieser Klasse.<br />
32 Dies gilt übrigens nicht nur im Bereich <strong>der</strong> Programmierung. Wenn man in seinem eigenen Verantwortungsbereich einen<br />
Fehler entdeckt, dann ist es unverantwortlich, stillschweigend darüber hinwegzugehen in <strong>der</strong> Hoffnung, niemand würde es merken.<br />
Werden Fehler frühzeitig eingestanden, so mag dies vielleicht etwas peinlich sein, aber es ist wenigstens noch möglich,<br />
Gegenmaßnahmen zu ergreifen. Wartet man damit zu lange, dann wird eine Korrektur unmöglich und die Katastrophe wird<br />
unausweichlich. Beispiele hierzu liefert die Geschichte (und das Erfahrungsumfeld <strong>der</strong> meisten Menschen) zur Genüge.