8. Objektorientierte Programmierung
 
zurück
8.5 Konvertierung


Ein Objekt einer Klasse kann in ein Objekt einer anderen Klasse derselben Klassenhierarchie umgewandelt werden. Dieser Vorgang wird als Konvertierung bezeichnet.


Beispiel:

type Kreis is new Punkt.Punkt with record
   Radius : Integer;
end record;

type Segment is new Kreis.Kreis with record
   Anfangswinkel,
   Endewinkel : Integer;
end record;


with Punkt;
procedure Zeichnen ( S: Segment ) is
begin
   Text_IO.put_line( "Zeichne Segment " & " Wi1=" & Integer'Image(S.Anfangswinkel) & " " &
                  "Wi2=" & Integer'Image(S.Endewinkel) & " Radius=" & Integer'Image(S.Radius) & " und " );

   -- Weiternutzung von vorhandenen Prozeduren:
   Punkt.Zeichnen ( Punkt.Punkt(S) ); -- Konvertierung !
end;


Die vorhandene Prozedur zum Zeichnen eines Punktes wird von der Prozedur zum Zeichnen eines Segmentes weitergenutzt. Durch die Schreibweise "Punkt(S)" wird eine Typ-Konvertierung durchgeführt, die zur Folge hat, daß der Prozeduraufruf "Zeichnen" die Prozedur "Zeichnen" der Klasse "Punkt" aufruft. Ohne diese Konvertierung würde die Prozedur "Zeichnen" der Klasse "Segment" rekursiv aufgerufen!

Wenn die Klassen einer gemeinsamen Hierarchie angehören, können mittels einer Konvertierung Verbundtyp-Elemente hinzugefügt oder entfernt werden.

Das Entfernen von Elementen eines "tagged"-Verbundtyps geschieht einfach durch eine Konvertierung mit dem Namen einer Klasse, die in der Hierarchie höher liegt
(type_conversion <BNF>).

Das Hinzufügen von Elementen zu einem "tagged"-Verbundtyp wird durch Angabe eines Erweiterungsaggregates (extension_aggregate <BNF>) durchgeführt.

P1 : Punkt.Punkt;
L1 : Linie.Linie;
L1 := Linie.Linie(P1 with x1 => 5, y1 => 7);
-- oder einfacher:
L1 := (P1 with x1 => 5, y1 => 7);

Die Klammerschreibweise ist in beiden Fällen notwendig.
Die direkte Zuweisung von Objekten einer Klasse an Objekte einer anderen, unterschiedlichen Klasse ist nicht möglich.


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