7. Programmeinheiten | |||||||||
|
|||||||||
7.13.1 Aufbau generische Einheiten
Eine generische Einheit ist eine Programmeinheit, die entweder ein generisches Unterprogramm (generische Funktion oder generische Prozedur) oder ein generisches Paket ist. Sie ist eine parametrierte Schablone, aus der verschiedene Programmeinheiten, Unterprogramme bzw. Pakete, erzeugt (ausgeprägt) werden können. Bestimmte Einzelheiten werden offengelassen und durch die sogenannten generischen formalen Parameter repräsentiert. Als Parameter übergeben werden können: Objekte, Typen, Unterprogramme und Pakete. Diese Parameter für generische Einheiten werden generische formale Objekte, Typen, Unterprogramme und Pakete genannt. Bei der Ausprägung (Instantiierung) müssen diese Parameter besetzt werden. Wie jede andere Programmeinheit besteht eine generische Programmeinheit aus einer Spezifikation und einem Rumpf. Im Gegensatz zu Paketen hat jede generische Einheit einen Rumpf. Zur Spezifikation einer generischen Einheit gehört:
Eine generische Einheit wird durch eine generische Deklaration (generic_declaration <BNF>) spezifiziert. generic <generische Formalparameter> procedure <Prozedurname> <Parameterliste>; generic <generische Formalparameter> package <Paketname> <Paketspezifikation> end <Paketname>; Eine generische Einheit ist entweder ein generisches Unterprogramm oder ein generisches Paket. Die generische Deklaration baut daher auf der Deklaration eines Unterprogramms/Pakets auf. Darüber hinaus hat sie einen generischen formalen Teil (generic_formal_part <BNF>), um die generischen Formalparameter zu spezifizieren. Dieser Teil beginnt mit dem Schlüsselwort "generic". Darauf folgt eine Unterprogramm- (subprogram_specification <BNF>) oder Paketspezifikation (package_specification <BNF>). Ein generischer Formalparameter kann nicht nur ein Objekt sein, sondern auch ein Typ, ein Unterprogramm oder ein Paket. Die einzelnen Bestandteile des generisch formalen Teils werden auch
Beispiele für generische Deklarationen von generischen Unterprogrammen:
Beispiel für die generische Deklaration eines generischen Pakets:
Der Rumpf einer generischen Einheit ist eine Schablone für die Rümpfe der Instanzen. Die Syntax eines generischen Rumpfes entspricht der eines vergleichbaren nicht generischen Rumpfes. Der generische Rumpf unterscheidet sich durch die Verwendung der generischen formalen Parameter. Implizit wird durch eine Instantiierung der Rumpf einer neuen Programmeinheit erzeugt. An die Stelle der Formalparameter treten in diesem neuen Rumpf die Aktualparameter. Beispiel eines generischen Prozedurrumpfs:
Beispiel eines generischen Funktionsrumpfes:
Beispiel eines generischen Paketrumpfes:
Generische Einheiten sind als Schablonen nicht lauffähig! Um generische Einheiten zu benutzen und damit lauffähigen Code erzeugen müssen generische Einheiten mit aktuellen Parametern versorgt werden, d.h. eine sogenannte Instanz bilden. Die Instanz einer generischen Einheit ist das Ergebnis einer generischen Instantiierung mit bestimmten Aktualparametern für die generischen Formalparameter. Bei der generischen Instantiierung sind grundsätzlich alle generischen Parameter mit entsprechenden Aktualparametern zu besetzen; es sei denn, es gibt eine Vorbesetzung für einen generischen Parameter. Vorbesetzungen sind für generische formale Unterprogramme möglich. Beispiele für generische Instantiierungen:
Beispiele für den Gebrauch von Instanzen:
Die so entstandenen Programmeinheiten werden Instanzen der generischen Einheiten genannt. Die Instanz eines generischen Unterprogramms ist ein Unterprogramm, die Instanz eines generischen Pakets ist ein Paket. |
|||||||||
|