Kleines OOP-Lexikon für die Cobol-Programmierung

29.06.1990

Für objektorientiertes Programmieren unter Cobol sind eine Reihe zusätzlicher Begriffe nötig. In der folgenden Aufstellung wurde versucht, bereits bestehende Festlegungen nach dem im JOD- oder ANSI-Standard zu berücksichtigen.

Ancestor (Eltern, Vorfahr, Ahn, Vater):

Eine Object-class, die in der FROM-Klausel eines PROGRAM-ID-Eintrags mit dem Object-class-Attribut angegeben wird. Der Programmname im selben Eintrag ist ein Sohn des Vaters, alle Instance-Daten, Public-methods und Private-methods des Vaters werden repliziert und sind daher stets im Sohn verfügbar.

Object-Instance:

Der Object-instance, der implizit an eine Method in einer Object-class übergeben und von den speziellen Registern Instance [OF] Object-class-Name und Pointer [TO] Object-class-Name von direkt oder indirekt in der Object-class enthaltenen Anweisungen angesprochen wird.

Daten-Pointer:

Ein Datum der "USAGE Pointer TO DATA". Das ist die Adresse, die an BY REFERENCE-Parameter in der CALL-Anweisung übergeben wird.

Descendant (Sohn, Nachfolger):

Eine Object-class, die die FROM-Klausel in einem PROGRAM-ID-Eintrag mit dem Object-class-Attribut festlegt. Der Programmname im selben Eintrag ist der Object-class-Name des Nachfolgers. Ein Nachfolger kann mehr Eigenschaften als sein direkter Ahn- haben und mehrere Vererbungen von Methods und Instance-Daten desselben Ahnen enthalten.

External Object-class:

Eine mit dem EXTERNAL-Attribut, im PROGRAM-ID-Eintrag definierte Object-class. Wichtig ist, daß genug Information zur Verfügung steht, damit das definierende Programm den für einen solchen Instance benötigten Platzbedarf ermitteln (wenn ein statischer Object-instance zulässig ist) oder einen Pointer auf einen solchen Instance richten kann (wenn pseudo-dynamische Object-instance-Zuweisung zulässig ist). Außerdem müssen die relative Position und die Namen aller PUBLIC-instance-Daten oder Methods errechenbar sein.

Externes Programm:

Ein mit dem EXTERNAL-Attribut im PROGRAM-ID-Eintrag definiertes Programm. Wie bei anderen EXTERNAL Cobol-Daten ist jeweils ein Instance des Programms in der Objektprogramm. Einheit für jedes Programm verfügbar, das ihn benennt. Dabei müssen alle Deklarationen identisch sein. Eine externe Programm-Deklaration gibt an:

- Hersteller-definierte Aufrufkonventionen,

- die vom Programm erwarteten Parameter,

- die Art der Übergabe dieser Parameter,

- ein mögliches, von der GIVING-Angabe der CALL-Anweisung abgerufenes Ergebnis.

Instance-Modifikation:

Eine Sonderform der Referenz für einen Object-instance, um eine ihn bearbeitende Method auszuwählen oder ein darin enthaltenes PUBLIC-Datum anzusprechen. Wenn ein solches PUBLIC-Datum gleichzeitig ein Object-Instance ist, kann der Instance-modifier ebenfalls verändert werden. Der rechte Instance-modifier bestimmt die USAGE- und gegebenfalls die PICTURE-Angabe sowie eine optionale Method für das angesprochene Datum.

Instance-modifier,

Eine linke Klammer, gefolgt von einem Method-Namen oder einem Cobol-Bezeichner passenden Formats. Beide können zusätzlich durch einen Object-class-Namen, gefolgt von einer rechten Klammer, qualifiziert werden. Ein Instance-modifier folgt unmittelbar auf einen Object-instance. Er kann innerhalb eines anderen Modifiers stehen (seiner rechten Klammer unmittelbar vorangehend), wenn der Instance modifier-Name einen Object-instance benennt. Außerdem muß er ein Datum angeben, dessen Bezeichnung sich auf seinen vorangegangenen Object-instance bezieht und im jetzigen Namensumfang enthalten ist.

Instance-Daten:

Der Speicherbereich, der den FILE-, RECORD-, COMMUNICATION- und RECORD-Description-Einträgen zugewiesen ist, die mit dem PUBLIC- oder PRIVATE-Attribut definiert sind. Für jeden Object-instance ist ein Speicherbereich zugewiesen. Einträge ohne Attribut haben nur einen Speicherbereich, der zu dem Programm gehört, in dem sie definiert sind. Zu Einträgen gehörende Namen mit dem PUBLIC-Attribut sind im Namensumfang aller Anweisungen, Klauseln und Angaben enthalten, die den definierenden Object-class-Namen in ihrem Namensumfang haben.

Method:

Ein direkt in einer Object-class enthaltenes Programm. Wenn es direkt oder indirekt aufgerufen wird, hat es impliziten Zugriff auf die Instance-Daten des Object-instance, der im Call zur Verfügung gestellt wird. Methods können aber müssen nicht ein CANCEL-, PUBLIC- oder PRIVATE-Attribut haben.

Innerhalb einer Object-class kann nur eine Method mit dem CANCEL-Attribut versehen sein. Diese wird dann während einer CANCEL-Anweisung aufgerufen, die auf einen Object-instance der Object-class angewendet wird, die wiederum die Method definiert. Der Aufruf findet statt, nachdem CANCEL auf alle ererbten Object-instances innerhalb des Object-instance angewendet wurde, doch bevor der Object-instance wieder in seinem Anfangsstatus ist.

In Söhnen, die eine Method desselben Namens zur Verfügung stellen, werden Methods mit dem PUBLIC- oder PRIVATE-Attribut außer Kraft gesetzt. Ein CALL auf eine außer Kraft gesetzte Method wird auf die passende Redefinition zurückgerichtet, wenn das aufrufende Programm in der Ancestor-object-class enthalten und der aktuelle Object-instance eine Descendant-object-class ist, die die Method außer Kraft setzt.

Methods mit dem PUBLIC-Attribut sind im Namensumfang aller Anweisungen, Klauseln und Angaben enthalten, die den definierenden Object-class-Namen in ihrem Namensumfang haben.

Object-class:

Eine spezielle Art von Programm, die durch das Object-class-Attribut in einem PROGRAM-ID-Eintrag bestimmt wird. Dieser Eintrag kann:

- die Parameter festlegen, die für die automatische Initialisierung eines Nachfolger-object-instance benutzt werden.

- keinen, einen oder mehrere Ahnen festlegen, von denen Instance-Daten und -Methods ererbt werden. Er kann für jeden dieser Ahnen die entsprechenden PUBLIC-instance-Daten oder -methods PRIVATE machen, so daß solche Daten nicht über den Nachfolger-object-class-Namen angesprochen werden können.

- den PUBLIC-Namen eines ererbten Datums ändern, so daß der neue Name benutzt werden muß, wenn er über den descendant-Object-class-Namen angesprochen wird. Dieser Zusatz verhindert Namenskonflikte, wenn das Datum PUBLIC bleiben muß.

- neue Anfangs-VALUE-Anweisungen zur Verfügung stellen, die für die Instance-Daten der Descendant-object-class benutzt werden

- statische oder pseudo-dynamische Zuweisung von Object-instances erzwingen.

Zusätzlich zu den ererbten Instance-Daten und Methods werden Daten, die als PUBLIC oder PRIVATE in der Data Division einer Object-class bestimmt sind, allen Ancestor-instance-Daten angefügt, und unmittelbar in der Object-class enthaltene Programme sind Methods, die ererbte Methods ersetzen oder außer Kraft setzen können.

Alle Object-class-Programme haben eine Method, für die der Code in der Procedure Division der Object-class angegeben wird. Diese Method hat den Object-class-Namen als ihren Method-Namen. Sie wird dazu benutzt pseudo-dynamisch einen Object-instance zuzuweisen, der durch einen Object-Pointer festgelegt ist. Außerdem initialisiert sie statische oder pseudo-dynamische Object-instance-Daten.

Gibt es in der Procedure Division keinen Code, wird EXIT PROGRAM angenommen.

Object-Instance:

Ein Speicherbereich (von mehreren möglichen), der die für eine Object-class definierten Instance-Daten enthält. Wenn der PROGRAM-ID-Eintrag der Object-class nicht mit der RESERVE-Klausel versehen ist, können nur statische Object-instances definiert werden. Wird die Pointer-Klausel im PROGRAM-ID eingetragen, ist nur die pseudo-dynamische Zuweisung eines Object-instance zulässig.

Object-Pointer:

Ein Hilfsmittel, um dynamisch zugewiesene Object-instances zu identifizieren. Der Objekt-Pointer kann eine Speicheradresse für einen Object-instance sein, dessen Lebensdauer durch die Beständigkeit der Objektprogramm-Einheit begrenzt ist.

Ein Objekt-Pointer durch "USAGE Pointer TO Object-class-Name" oder "USAGE Pointer TO Object-class" benannt. Im zweiten Fall wird ein Pointer für die Speicheradresse jedes Object-instance so erzeugte als wäre Object-class ein Ahn aller möglichen Object-class-Deklarationen.

Programm-Pointer:

Ein Datenfeld der "USAGE Pointer TO PROGRAM", das eine Programmadresse enthalten kann. Sie wird optional in CALL- oder CANCEL-Anweisungen benutzt oder in "SET TO Programmname", wobei Programmname das Benutzerwort in einem PROGRAM-ID-Eintrag ist.

Ein solches Datenfeld kann auch als empfangendes Feld in

einer SET-Anweisung benutzt werden, in der das sendende Feld ein modifizierter Object-instance ist, der sich auf einen Method-Namen bezieht. In diesem Fall zeigt der Programm-Pointer auf den Code für die zum Object-instance passende Method. Dieser Zusatz erleichtert die Integration von Cobol-OOPs.

Pseudo-dynamische Zuweisung:

Zuweisung eines zeigerbezogenen Object-instance von einer Gruppe von Object-instances der in der RESERVE-Klausel deren Anzahl dem Compiler in der RESERVE-Klausel eines PROGRAM-ID-Eintrags bekanntgegeben wurde. Die Zuweisung ist nicht erfolgreiche wenn ihre Anzahl minus der Menge der folgenden De-Allokationen des Object-instance der in der RESERVE-Klausel angegebenen Zahl gleich ist.

Pseudo-dynamische Zuweisung findet statt, wenn eine CALL-Object-Pointer-Anweisung abgesetzt wird. Ein solcher CALL übergibt die Steuerung an den Code in der Procedure Divison der Object-class, die einen Speicherbereich für das Objekt zuweist oder die EXCEPTION-Bedingung anzeigt, wenn kein Speicherbereich übrigbleibt.