Der REPOSITORY-Paragraf definiert die Klassen-und Schnittstellennamen, die im Geltungsbereich der entsprechenden ENVIRONMENT DIVISION verwendet werden können.
Format
REPOSITORY.
[{ CLASS klassenname-1 [EXPANDS klassenname-2 USING {klassenname-3 | interfacename-3}... ]
| INTERFACE interfacename-1 [EXPANDS interfacename-2 USING {klassenname-4 | interfacename-4}... ]
}... .
]
- Ist klassenname-1 identisch mit dem Namen der Klassendefinition in der der REPOSITORY-Paragraf spezifiziert ist, wird dieser Eintrag ignoriert.
Ist interfacename-1 identisch mit dem Namen der Interfacedefinition in der der REPOSITORY-Paragraf spezifiziert ist, wird dieser Eintrag ignoriert.
Ist programmprototypname-1 identisch mit dem Namen der Programmdefinition in der der REPOSITORY-Paragraf spezifiziert ist, wird dieser Eintrag ignoriert.
Im COBOL-Standard 2002 ist die EXPANDS-Angabe innerhalb einer Klassen- und Interfacedefinitionen verboten, die die USING-Klausel in ihrem ID-Paragrafen nutzen. Dieser Compiler erlaubt jedoch eine weitere Schachtelungsebene für die EXPANDS-Angabe. Um Namenskonflikte zu vermeiden und um die Übersichtlichkeit und Portabilität solcher Programme zu gewährleisten, sollte diese Schachtelung jedoch nur in begründeten Fällen verwendet werden.
klassenname-2, klassenname-3, und interfacename-3 müssen im gleichen REPOSITORY-Paragraf definiert sein, in dem klassenname-1 definiert ist.
klassenname-4, interfacename-4 und interfacename-2 müssen im gleichen REPOSITORY-Paragraf definiert sein, in dem interfacename-1 definiert ist.
klassenname-2 und interfacename-2 dürfen nur in einer EXPANDS-Angabe angesprochen werden.
Die Expansion einer parametrisierten Klasse darf nicht direkt oder indirekt als aktueller Parameter der gleichen parametrisierten Klasse verwendet werden.
Die Expansion eines parametrisierten Interface darf nicht direkt oder indirekt als aktueller Parameter des gleichen parametrisierten Interface verwendet werden.
Allgemeine Regeln
Innerhalb einer Klassen-/Schnittstellendefinition dürfen im REPOSITORY-Paragraf keine Klassen-/Interfacenamen angegeben werden, die direkt oder indirekt auf die aktuell definierte Klasse in ihrem REPOSITORY-Paragraf Bezug nehmen.
klassenname-1 ist der Name der Klasse, der für die gesamte Quelleinheit gilt, die die entsprechende Environment Division enthält.
interfacename-1 ist der Name der Schnittstelle, der für die gesamte Quelleinheit gilt, die die entsprechende Environment Division enthält.
programmprototypname-1 ist der Name des Programmprototyps, der für die gesamte Quelleinheit gilt, die die entsprechende Environment Division enthält.
Fehlt die EXPANDS-Angabe, dann müssen im externen Repository-Daten enthalten sein, die klassenname-1 bzw. interfacename-1 charakterisieren.
Wenn in der Übersetzungsgruppe ein Programmprototyp für programmprototypname-1 vorhanden ist, hängt die Verwendung dieser Prototypdefinition von der Steuerung des Repositoryzugriffs ab (siehe Handbuch „COBOL2000 Benutzerhandbuch“ [1]).
klassenname-3 und interfacename-3 sind die aktuellen Parameter der parametrisierten Klasse klassenname-2.
klassenname-4 und interfacename-4 sind die aktuellen Parameter des parametrisierten Interface interfacename-2.
Die Anzahl der aktuellen Parameter in der USING-Klausel muss mit der Anzahl der formalen Parameter in der USING-Klausel der CLASS-ID von klassenname-2 übereinstimmen. Ebenso muss die Spezifikation (als Klasse oder Interface) der einander entsprechenden aktuellen und formalen Parameter übereinstimmen.
klassenname-1 wird aus der parametrisierten Klasse klassenname-2 erzeugt mittels Ersetzen aller formalen Parameter durch die entsprechenden aktuellen Parameter sowie durch Ersetzen von klassenname-2 durch klassenname-1.Die Anzahl der aktuellen Parameter in der USING-Klausel muss mit der Anzahl der formalen Parameter in der USING-Klausel der INTERFACE-ID von interfacename-1 übereinstimmen. Ebenso muss die Spezifikation (als Klasse oder Interface) der einander entsprechenden aktuellen und formalen Parameter übereinstimmen.
interfacename-1 wird aus dem parametrisierten Interface interfacename-2 erzeugt mittels Ersetzung aller formalen Parameter durch die entsprechenden aktuellen Parameter sowie Ersetzen von interfacename-2 durch interfacename-1.