In diesem Abschnitt behandeln wir die Kernpunkte von Ada, die die Objektorientierung betreffen, nämlich Vererbung und (Laufzeit-)Polymorphismus . Umfangreichere Beispiele zu diesem Thema finden sich in Kapitel 12.
Ein Record-Typ oder ein privater Typ, der das reservierte Wort tagged in seiner Deklaration beinhaltet ist ein getaggter Typ. Ein Objekt eines getaggten Typs trägt zur Laufzeit mit sich ein eindeutiges Tag .
Nur von getaggten Typen kann man andere Typen ableiten. Dabei können zusätzliche Komponenten und primitive Operationen definiert werden. Der abgeleitete Typ wird Erweiterung des Vorgängertyps oder einfach Typerweiterung genannt. Jede Typerweiterung ist wieder ein getaggter Typ. Der Typ, von dem abgeleitet wird, heißt Vatertyp. Es gibt also nur einfache Vererbung und keine mehrfache Vererbung.Man kann folgende Eigenschaften von abgeleiteten Typen festhalten:
Man sagt ein abgeleiteter Typ is direkt von seinem Vatertyp abgeleitet; er ist indirekt abgeleitet von jedem Typ, von dem sein Vatertyp abgeleitet ist. Durch Ableitung bildet sich somit ein Ableitungsbaum von getaggten Typen. Man nennt so einen Ableitungsbaum mit Wurzel T eine Ableitungsklasse von Typen für den Typ T.
Klassenumfassende Typen (auch klassenweite Typen genannt) sind für alle Ableitungsklassen definiert, deren Wurzel ein getaggter Typ ist. Man schreibt T'CLASS, um den klassenumfassenden Typ T zu bezeichnen. Der Name leitet sich her aus der Tatsache, daß ein formaler Parameter, dessen Typ T'CLASS ist, als aktuellen Wert ein Objekt eines beliebigen Typs aus der Ableitungsklasse von T annehmen kann. Wichtig ist, daß Operationen, die einen klassenweiten Typ als Parameter besitzen, keine primitiven Operationen sind.
Die Operationen, die auf einem getaggten Typ definiert sind, nennt man Dispatching-Operation. Manchmal ist es möglich zur Compile-Zeit zu entscheiden, welche Operation eines getaggten Typs ausgeführt werden soll; meist jedoch kann diese Entscheidung erst zur Laufzeit gefällt werden. Das zur Laufzeit mit jedem Objekt eines getaggten Typs mitgeführte Tag ermöglicht es, diese Entscheidung zu treffen. Dabei ist vor allem wichtig, daß eine Operation nicht von mehr als einem getaggten Typ abhängig sein darf.
Für alle Subtypen S eines getaggten Typs T sind folgende Attribute definiert:
S'CLASS | siehe oben |
S'TAG | gibt das Tag von zurück |
Vorgriff: Objekte des Typs Tag KöNNEN MITTELS DES PACKAGES Ada.Tags BEARBEITET WERDEN.
package Ada.Tags is
Beispiele für getaggte Record-Typen sind:
type point is tagged
record
x,y: real := 0.0;
end record;
type expression is tagged null record;
-hierwirderwartet,dassdieTyperweiterungenKomponentenhinzufuegen
Johann Blieberger