|
7.13 Generische Einheiten
Die beiden folgenden Prozeduren zeigen, daß die Logik des Vertauschens von
zwei Elementen nicht vom Typ der zu vertauschenden Elemente abhängt.
procedure Vertausche_Gleitpunktzahl (U, V : IN OUT
Float)
is
T : Float;
begin
T := U;
U := V;
V := T;
end Vertausche_Gleitpunktzahl;
procedure Vertausche_Ganzzahl (U, V : IN OUT Integer) is
T : Integer;
begin
T := U;
U := V;
V := T;
end Vertausche_Ganzzahl; |
Es ist daher sinnvoll, ein Ausdrucksmittel in einer Programmiersprache
zu haben, das unabhängig vom Typ der Elemente mit ihnen operieren
und so die Logik umsetzen kann.
Dieses Mittel sind die generischen Einheiten.
Die folgende Prozedur "Vertausche" ist ein generisches Unterprogramm
und kann mit einer Schablone verglichen werden.
generic
type Element is private;
procedure Vertausche (U, V : IN OUT Element);
procedure Vertausche (U, V : IN OUT Element) is
T : Element; -- der generische formale Typ
begin
T := U;
U := V;
V := T;
end Vertausche; |
Von dieser Schablone können nun Unterprogramme abgeleitet werden, die
für verschiedene Typen ausgeprägt werden können. Dieser Vorgang
wird Instantiierung genannt.
procedure Vertausche_Ganzzahl is new Vertausche
(Element
=> Integer);
procedure Vertausche_Gleitpunktzahl is new Vertausche (Element => Float); |
Bei generischen Einheiten können neben Typen auch Objekte, Unterprogramme
und Pakete generische Parameter sein. Damit stehen dem Programmierer eine
Vielzahl an Ausdrucksmöglichkeiten zur Verfügung.
Generische Einheiten haben eine besondere Bedeutung für die Wiederverwendbarkeit
:
- Die generische Einheit kann in einer bestimmten Ausprägung (Instanz)
auf korrektes
Verhalten getestet werden. Für weitere Ausprägungen mit anderen Parametern
kann das
korrekte Verhalten vorausgesetzt werden.
- Die Wiederverwendung ist nicht mit Kopieren von Ada-Quelltext verbunden, sondern
aus
der vorgegebenen Schablone, der generischen Einheit, können durch Instantiierung
immer
wieder neue Programmeinheiten erzeugt werden.
- Eventuell spätere Änderungen/Ergänzungen sind nur an einer
Stelle erforderlich und gelten
für alle Instanzen der generischen Einheit.
|