Bei der Abarbeitung von Programmen können folgende Situationen Ausnahmen darstellen:
Fall 2a:
Der Lösungsalgorithmus diagnostiziert eine Situation, in der es zu
einer Ausnahme kommen kann, die vom Laufzeitsystem behandelt wird.
Stehen keine Mittel zur Verfügung, um die Maßnahmen des
Laufzeitsystems abzufangen, so muß ihr Eintreten zuvor verhindert
werden.
Fall 2b:
Der Lösungsalgorithmus diagnostiziert eine Situation, in der aus
sonstigen Gründen vom normalen Lösungsablauf abgewichen werden
kann.
Mittel zur Ausnahmebehandlung können eingesetzt werden, um herauszuheben,
daß besondere Handlungen erforderlich sind.
Günstig sind solche Mittel, die eine klare Trennung der Handlungen im
Normalfall und der Handlungen im Ausnahmefall gestatten.
Für Fall 1 werden meist gesonderte Sprachmittel gebraucht.
Eventuell sind das Überschreiben von (internen) Routinen des
Laufzeitsystems bzw. die Nutzung von Optionen des Programmiersystems
möglich. Letztere Varianten sind sind jedoch wenig portabel.
Für vom Programm diagnostizierte Ausnahmesituationen sind gesonderte Sprachmittel nicht unbedingt erforderlich, jedoch - wie bereits oben angedeutet - wünschenswert.
Gesonderte Sprachmittel zur Ausnahmebehandlung gab es bereits relativ früh
in PL/I.
Stärkere Ausdehnung fanden sie jedoch erst in den letzten Jahren mit
Sprachen wie Ada, C++ und neuerdings Java.
Weder Standard noch Extended Pascal stellen spezielle Sprachmittel zur
Ausnahmebehandlung bereit.
Als Spracherweiterung existieren sie zur Zeit z.B. in
Für die Ausnahmebehandlung werden spezielle Anweisungsgruppen (geschützte Blocks, protected blocks) gebildet:
protected block
+--------------+
| | guarded block
| Normalteil | wird bis zum Auftreten einer
| | Ausnahme abgearbeitet
+--------------+
| | exception handlers response block
| Ausnahmeteil | wird nur nach Auftreten
| | einer Ausnahme abgearbeitet entweder
+--------------+
| | termination code response block
| Abschlußteil | wird in jedem Fall oder
| | abschließend ausgeführt
+--------------+
Neben dem Normalteil werden entweder nur der Ausnahmeteil oder nur der
Abschlußteil angegeben.
Im Pseudocode läßt sich die Ausnahmebehandlung wie folgt
darstellen:
Variante 1:
BEGIN
anweisungsfolge Normalteil
EXCEPTION Ausnahmeteil
WHEN ausnahme_bedingung_1 THEN
ausnahme_anweisungsfolge_1 Handlungen bei Ausnahme 1
...
WHEN ausnahme_bedingung_n THEN
ausnahme_anweisungsfolge_n Handlungen bei Ausnahme n
END
Tritt keine Ausnahmesituation ein, so wird ausschließlich
anweisungsfolge ausgeführt. Variante 2:
BEGIN
anweisungsfolge_1 Normalteil
FINALIZATION
anweisungsfolge_2 Abschlußteil
END
Tritt keine Ausnahmesituation ein, so wird zunächst
anweisungsfolge_1 und dann anweisungsfolge_2
ausgeführt.
Bemerkung:
Ausnahmeteil und Abschlußteil sollten - nach Möglichkeit -
so abgefaßt werden, daß nicht erneut Ausnahmen auftreten
können. Gegebenenfalls kann eine Ineinanderschachtelung von
Anweisungsgruppen helfen.
Eine Ausnahmesituation wird ausgelöst entweder