8. Objektorientierte Programmierung
 
zurück
8.6 Polymorphismus (Klassenweite Programmierung)


Mit Einführung der Klassen gibt es auch die Möglichkeit, bei einem Unterprogrammaufruf entweder Objekte der Basisklasse oder Objekte einer beliebigen, von dieser Basisklasse abgeleiteten Klasse als Parameter zu übergeben. Diese "Klassenweite Programmierung" wird mittels des neuen Ada-95-Attributes 'Class ermöglicht. Die Verwendung des klassenweiten Typs T'Class ist auf formale Unterprogramm-parameter, Verweistypen und Variablenvereinbarungen mit Initialisierung beschränkt.

Bei der "Klassenweiten Programmierung" kann ein Objekt verschiedenen Objekten einer Klassenhierarchie zugewiesen werden. Dem Objekt einer Klassenhierarchie werden dann zur Laufzeit selbständig die zugehörigen Unterprogramme zugeordnet. Des weiteren bietet die "klassenweite Programmierung" den Vorteil der Erweiterbarkeit. Man kann die Klassenhierarchie mit neuen Klassen erweitern, ohne daß nachträglich in die bestehenden Strukturen eingegriffen werden muß. Fehlende Datentypen werden von der neuen Klasse bereitgestellt und Unterprogramme werden gegebenenfalls überladen, um neue Funktionalität einzubringen.

Beispiel:


-- akzeptiere ein beliebiges Objekt der Klassenhierarchie <Punkt>
-- als Parameter und rufe die passende Prozedur "Zeichnen" auf :
procedure Zeichne_Alles ( X: Punkt.Punkt'Class ) is
begin
   Zeichnen ( X );
end;

Die Prozedur "Zeichne_Alles" entspricht einer überladenen Prozedur (überladenes Unterprogramm), die alle Datentypen der Klassenhierarchie als Parameter akzeptiert.
Der Aufruf "Zeichne_Alles ( X )" ruft selbständig die richtige "Zeichnen"-Prozedur auf, indem "X" daraufhin untersucht wird, ob "X" von der Klasse "Punkt", "Linie" oder einer weiteren Klasse abgeleitet wurde.

Die Prozedur "Zeichne_Alles" kann zur Übersetzungszeit noch nicht wissen, mit welchen Objekten von welcher Klasse sie aufgerufen wird. Der Übersetzer kann nur eine Menge von Prozeduren (die Klassenhierarchie) zuordnen; zur Laufzeit muß die richtige Prozedur durch Untersuchung ermittelt werden. Diese "dynamische Bindung" findet aber nur dann statt, wenn der Datentyp mit dem Ada-95-Bezeichner 'Class bearbeitet wurde, ansonsten wird "statische Bindung" verwendet.

Die dynamische Auswahl einer Operation zur Laufzeit wird auch als "Verzweigung zur Laufzeit" (dispatching) bezeichnet.ird "statische Bindung" verwendet. Die dynamische Auswahl einer Operation zur Laufzeit wird als "Verzweigung zur Laufzeit" (dispatching) bezeichnet.

Beachte:

- Die "dynamische Bindung" kann in Ada sowohl mit Objekten als auch mit Zeigern auf Objekte verwendet werden. Der Übersetzer benutzt bei Objekten automatisch den "call by reference"-Aufruf und behandelt Objekte als Zeiger, ohne daß der Programmierer sich damit befassen muß.

- Der größte Vorteil der "klassenweiten Programmierung" liegt darin, daß die Klassenhierarchie nachträglich erweitert werden kann, und daß dann ein Unterprogramm wie "Zeichne_Alles", das den Ada-Bezeichner 'Class verwendet, auch mit neu hinzugefügten überladenen Prozeduren zurechtkommt.

Wenn z. B. die neue Klasse "Quadrat" mit einem eigenen überladenen Unterprogramm "Zeichnen" zu den vorhandenen Klassen hinzugefügt wird, dann akzeptiert das Unterprogramm "Zeichne_Alles" auch Objekte der Klasse "Quadrat".


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.