Programmiersprache Pascal

Module

Module sind selbständig übersetzbare Programmeinheiten.
Ein Modul bündelt typischerweise verschiedene logisch zusammengehörige Unterprogramme, die durch Programme bzw. andere Module nachgenutzt werden können. Ein Modul kann jedoch nicht nur Unterprogramme (Prozeduren, Funktionen), sondern auch Datentypen, Variablen und symbolische Konstanten exportieren.

Ein Modul besteht aus zwei Teilen:

Die Trennung in Interface- und Implementationsteil wird unterschiedlich realisiert.

Ein Modul kann Ressourcen aus anderen Modulen importieren.

Standard Pascal

Standard Pascal sieht keine Module vor.
Dies ist ein erheblicher Mangel von Standard Pascal und hat zu vielen, oft nicht miteinander verträglichen Spracherweiterungen bei Pascal-Systemen geführt.
Der neue Sprachstandard Extended Pascal sieht Module vor.

Turbo Pascal

Turbo Pascal realisiert Module in einer einfachen Form.
Der in dieser Sprachversion eingeführte Begriff dafür lautet UNIT. Eine Unit vereint Interface- und Implementationsteil in einer Übersetzungseinheit.

  +------------------------------+
  | UNIT name;                   | Unit-Kopf
  +------------------------------+
  | INTERFACE                    | Interface-Teil
  |     USES ...;                |     Import von Ressourcen aus ...
  |     PROCEDURE name(...);     |     }
  |     FUNCTION name(...);      |     }
  |     TYPE ...;                |     } zu exportierende Ressourcen
  |     CONST ...;               |     }
  |     VAR ...;                 |     }
  +------------------------------+
  | IMPLEMENTATION               | Implementationsteil
  |     USES ...;                |     Import von Ressourcen aus ...
  |     PROCEDURE name(...);     |     }
  |     FUNCTION name(...);      |     } dem Nutzer des Moduls
  |     TYPE ...;                |     } nicht zugängliche
  |     CONST ...;               |     } Implementationsdetails
  |     VAR ...;                 |     }
  +------------------------------+
  | BEGIN                        |
  |   Ausführbare Anweisungen    | Initialisierungsteil
  | END.                         |
  +------------------------------+
Der Unit-Kopf legt den Namen des Moduls fest.
Dieser Name wird bei Bezug auf die Unit in einer USES-Anweisung benutzt.

Der Interface-Teil deklariert die Ressourcen (Datentypen, symbolische Konstanten, Variablen, Prozeduren und Funktionen), die exportiert werden, d.h. auf die in anderen Programmeinheiten (im Hauptprogramm oder in anderen Modulen) zugegriffen werden kann.
Die Bezeichner dieser Ressourcen sind öffentlich (public).
Prozeduren und Funktionen werden nur als Kopfzeile im aufgeführt, die eigentliche Deklaration im Implementationsteil.

Der Implementationsteil definiert den Rumpf aller öffentlichen (zu exportierenden) Prozeduren und Funktionen.
Innerhalb des Implementationsteils können auch weitere Typen, Konstanten, Variablen, Prozeduren und Funktionen deklariert werden. Diese Resourcen sind privat, d.h. sie sind nach außen hin nicht sichtbar und können vom Benutzer der Unit nicht verwendet werden.

Für den Aufbau des Initialisierungsteils gibt es folgende Möglichkeiten:

Turbo Pascal für Windows, Delphi

Es ist möglich, dynamische Linkbibliotheken (DLL) zu erstellen.
Der Aufbau der entsprechenden Programmeinheit entspricht dem eines Programms, anstelle des Schlüsselworts PROGRAM beginnt sie jedoch mit LIBRARY.

Delphi

Gegenüber Turbo Pascal gibt es erweiterte Möglichkeiten:

  +------------------------------+
  | UNIT name;                   | Unit-Kopf
  +------------------------------+
  | INTERFACE                    | Interface-Teil
  |     deklarationen            |
  +------------------------------+
  | IMPLEMENTATION               | Implementationsteil
  |     deklarationen            |
  +------------------------------+
  | INITIALIZATION               | Initialisierungsteil - wahlweise
  |   Ausführbare Anweisungen    |
  +------------------------------+
  | FINALIZATION                 | Abschlußteil - wahlweise
  |   Ausführbare Anweisungen    |
  | END.                         |
  +------------------------------+
Initialisierungs- und Abschlußteil sind optional.
Der Abschlußteil darf nur auftreten, wenn ein Initialisierungsteil vorhanden ist.

Der Initialisierungsteil wird beim Programmstart, der Abschlußteil beim Programmabschluß ausgeführt.
Nutzt ein Programm mehrere Units, so entscheidet die Reihenfolge der Namensangabe in den USES-Anweisungen darüber, in welcher Reihenfolge die Units initialisiert werden.
Beim Programmabschluß werden die Abschlußteile in der umgekehrten Reihenfolge wie bei der Initialisierung ausgeführt.

Extended Pascal

In Extended Pascal kann ein Modul (ähnlich wie in Modula) aus zwei Teilen bestehen:

Interface-Teil
  +------------------------------+
  | MODULE name INTERFACE;       | Modul-Kopf
  +------------------------------+
  | EXPORT name = ( liste );     | zu exportierende Ressourcen 
  +------------------------------+
  | IMPORT ... ;                 | Moduln, von denen importiert wird
  +------------------------------+
  | Deklarationen                | Interface der Export-Ressourcen
  +------------------------------+
  | END.                         |
  +------------------------------+
Implementationsteil
  +------------------------------+
  | MODULE name IMPLEMENTATION;  | Modul-Kopf
  +------------------------------+
  | Deklarationen                | Realisierung der Export-Ressourcen
  +------------------------------+
  | TO BEGIN DO BEGIN            |
  |     ausführbare Anweisungen  | Initialisierungsteil - wahlweise
  | END;                         |
  +------------------------------+
  | TO END DO BEGIN              |
  |     ausführbare Anweisungen  | Abschlußteil - wahlweise
  | END;                         |
  +------------------------------+
  | END.                         |
  +------------------------------+


P. Böhme, 03.09.1996