5. Sprachelemente / Operatoren | ||||||
|
||||||
5.1.4.2 Aggregate für Verbunde
Jeder Komponente eines Verbunds kann entweder über den Namen oder über eine Positionsangabe ein Wert zugeordnet werden. Die Komponenten eines Verbunds haben in der Regel unterschiedliche Typen. Wenn eine der Komponenten aus einer Reihung besteht, so muß diese Reihung feste Indexgrenzen haben. In Aggregaten dürfen nur eingeschränkte Reihungstypen verwendet werden. (record_aggregate <BNF>) Aggregat_fuer_Verbundtypen ::= ( Komponentenzuordnungsliste ) Komponentenzuordnungsliste ::= Komponentenzuordnung { , Komponentenzuordnung } | null record Komponentenzuordnung ::= [ Komponentennamenliste => ] Komponentenwert Komponentennamenliste ::= Komponentenname { | Komponentenname } | others Ein Aggregat für Verbundtypen besteht aus einer Liste von Komponentenzuweisungen oder aus "null record" (nur bei erweiterbaren Typen möglich). Bei Verbundtypen können die verschiedenen Zuordnungsarten auch kombiniert werden. So kann man z. B. einigen Komponenten nach Position Werte zuordnen, einigen nach Namen und den restlichen mit "Others". Die Zuordnungsart "Others" ist die einzige oder letzte Position in einem Aggregat. Hierbei ist zu beachten, daß bei der Kombination der Zuordnungsarten nach Position und nach Namen die Zuordnungen nach Position als erstes erscheinen müssen, diese sind dann auch die ersten Komponenten im entsprechenden Typ. Generell ist es empfehlenswert, allen Komponenten die Werte nach Namen zuzuordnen. Beispiele:
Wenn in der Definition des Verbundtyps Diskriminanten enthalten sind, so muß auch der Wert für diese angegeben werden, entweder per Name oder bei Zuordnung nach Position an erster Stelle. Beispiel:
Voraussetzung für die Erweiterung von Verbundtypen ist ein erweiterbarer Typ (tagged type). Dieser erweiterbare Typ ist ein Verbundtyp, der selbst auch schon Komponenten enthalten kann, aber nicht muß. Ziel der Erweiterung von Verbundtypen ist es, auf der Basis eines Verbundtyps eine Hierarchie von Verbundtypen aufbauen zu können. Diese Typen haben dann gleiche Eigenschaften und können so leicht in einen anderen Typ dieser Verbundtyphierarchie konvertiert werden. Aggregat_für_Erweiterung_von_Verbundtypen ::= ( Vorfahre with Komponentenzuordnungsliste ) Der Vorfahre kann hierbei entweder eine Variable eines erweiterbaren Verbundtyps sein, der in der Verbundtyphierarchie über dem erweiterten Typ steht, oder aber ein Aggregat für Verbundtypen mit den entsprechenden Komponenten des übergeordneten Verbundtyps (Konvertierung in der OOP). Die Zuordnung erfolgt, wie bei den Verbundtypen, über Position, Namen und "Others". Beispiele:
Bei der Verwendung von Diskriminanten in einem Verbund ist zu beachten, daß - auch wenn der Vorfahre schon diese Diskriminante initialisiert hat - der Wert für diese Komponente erneut hinter dem with angegeben werden muß, und zwar mit dem Wert, der auch bei der Deklaration der Variablen verwendet wurde. Beispiel:
|
||||||
|