Programmiersprache Pascal

Ausnahmebehandlung

Ausnahmen stellen Abweichungen vom normalen Verhalten dar:
Der normale Handlungsablauf wird unterbrochen, es wird statt dessen nach einem gesonderten Szenarium verfahren.

Bei der Abarbeitung von Programmen können folgende Situationen Ausnahmen darstellen:

Moderne Programmiersysteme stellen zunehmend gesonderte Sprachmittel zur Behandlung von Ausnahmesituationen (exceptions) bereit.
Dabei sind zu unterscheiden
  1. Ausnahmesituationen, die vom Laufzeitsystem festgestellt werden
    z.B. Division durch Null, Überschreitung des Zahlenbereichs, Verwendung unzulässiger Indizes, fehlendes Zugriffsrecht zu einer Datei, nicht arbeitsbereites Gerät, nicht arbeitsbereites Rechnernetz
  2. Ausnahmesituationen, die das Programm selbst diagnostiziert
Fall 1:
Das Laufzeitsystem des Programmiersystems sieht für Ausnahmesituationen Standardmaßnahmen vor.
Diese bestehen im einfachsten Fall in der Ausgabe einer Fehlermeldung und im Programmabbruch. In anderen Fällen werden - stillschweigend oder verbunden mit der Ausgabe von Meldungen - Korrekturen vorgenommen, die einen weiteren Arbeitsablauf ermöglichen.
Mittel zur Ausnahmebehandlung können eingesetzt werden, um diese Standardmaßnahmen zu ersetzen bzw. sie durch eigene Maßnahmen zu flankieren.
Im einfachsten Fall geht es um die Ersetzung der Standardmeldungen durch anwendungs- und anwenderbezogene eigene Meldungen.

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

Beiden Systemen gemeinsam ist die Nutzung von Mittel der objektorientierten Programmierung, unterscheiden sich aber ansonsten recht stark in der verwendeten Syntax.


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.
Wird bei der Abarbeitung eines Befehls aus anweisungsfolge eine Ausnahme ausgelöst, so wird die Abarbeitung des Normalteils beendet, und zwar auch dann, wenn noch nicht alle Anweisungen vollständig abgearbeitet wurden. Statt dessen werden die zutreffenden Anweisungen im Ausnahmeteil 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.
Wird bei der Abarbeitung von anweisungsfolge_1 eine Ausnahme ausgelöst, so wird die Abarbeitung von anweisungsfolge_1 abgebrochen, anweisungsfolge_2 wird jedoch in jedem Fall 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

Programmgesteuerte Auslösung einer Ausnahme
Behandlung einer Ausnahme
Datentypen zur Ausnahmebehandlung
Abschlußhandlungen



P. Böhme, 29.08.1996