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.

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!