8. Objektorientierte Programmierung
 
zurück
8.2 Klassen


Der Begriff "Klasse" existierte schon in Ada 83 und bezog sich dort auf die Deklaration von Unterbereichstypen. Aufgrund dieser Eigenschaft wurde Ada 83 als objektbasiert, jedoch nicht als objektorientiert bezeichnet.

Klassendefinition in Ada 83

Eine Klasse ist eine Menge von Datentypen, zwischen denen eine Ableitungsbeziehung existiert.

Beispiel:

type Mein_Integer is range 0 .. 10_000;

subtype Puffergroesse is Mein_Integer range 1 .. 1_000;

subtype Puffer_Anfangsbereich is Puffergroesse range 1 .. 10;

Die Eigenschaften von "Mein_Integer" werden an "Puffergroesse" und "Puffer_Anfangsbereich" vererbt.

Aufgrund dieser Eigenschaft wurde Ada 83 als "objektbasiert", jedoch nicht als "objektorientiert" bezeichnet. Unter "objektbasiert" versteht man die Möglichkeit, abstrakte Objekte bzw. Datentypen zu modellieren.

Ada 95 führt kein neues Sprachmittel mit der Bezeichnung "Klasse" ein, sondern unterstützt die objektorientierte Programmierung, indem sie der existierenden Ableitungsbeziehung weitere Eigenschaften zuordnet.

"Klasse" in Ada 95:

Ein Verbundtyp wird als "tagged" gekennzeichnet und man erhält eine "Basisklasse", auch als "tagged"-Verbundtyp oder erweiterbarer Typ bezeichnet.

Dieser erweiterbare Typ dient als Basis für die Definition von Klassen. Die Eigenschaften dieses erweiterbaren Typs können an hiervon abgeleitete Klassen weitergegeben werden. (record_type_definition <BNF>)

Beispiel einer Basisklasse:

type Punkt is tagged record -- Basisklasse Punkt
   x,y : Integer; -- die Koordinaten
   Farbe : Integer; -- die Farbe
end record


Eine Klasse besteht jeweils aus einem "tagged"-Verbundtyp und zugehörigen Operationen auf diesen Datentyp. Zur Kapselung von Datentypen und zugehörigen Komponenten-funktionen wird das vorhandene Paketkonzept genutzt..
Das folgende Beispiel zeigt eine vollständige Klasse im Paket (Spezifikation und Rumpf).

Das im folgenden beschriebene Beispiel deklariert eine Klasse mit dem Namen "Punkt" und kapselt sie in einem gleichnamigen Paket. Das Paketkonzept wird genutzt, um die "tagged"-Verbundtypen zusammen mit den Komponentenfunktionen in einer Programmeinheit zu kapseln.

Die Spezifikation des Paketes benennt diejenigen Unterprogramme und Datentypen der Klasse, die dem Benutzer zugänglich sein sollen.


package Punkt is      -- Spezifikation von <Punkt>:

   type Farbliste is (Rot, Gelb, Grün, Undefiniert );

   type Punkt is tagged record
      X, Y : Integer;
      Farbe : Farbliste;
   end record;

   procedure Erzeuge (P : IN OUT Punkt; X_Koord, Y_Koord : IN Integer);

   procedure Farbe_ändern (P : IN OUT Punkt; Neue_Farbe : IN Farbliste);

   procedure Zeichnen (P : IN Punkt);

end Punkt;

Der Rumpf des Paketes enthält die Implementierung und alle Werte, die nur lokal von Bedeutung sind oder vor dem Benutzer verborgen werden sollen.


with Text_IO; -- Rumpf von <Punkt>:
package body Punkt is

   procedure Farbe_ändern (P : IN OUT Punkt; Neue_Farbe : IN Farbliste) is
   begin
      P.Farbe := Neue_Farbe;
      Text_IO.Put_Line ("Farbe ändern (Klasse Punkt)");
   end;

   procedure Erzeuge (P : IN OUT Punkt; x_Koord, y_Koord : IN Integer) is
   begin
      P.Farbe := Undefiniert;
      P.X := X_Koord;
      P.Y := Y_Koord;
      Text_IO.Put_Line ("Erzeuge Punkt");
   end;

   procedure Zeichnen (P : IN Punkt) is
   begin
      Text_IO.Put_Line ("Zeichne Punkt" & " " & Integer'Image (P.X) & " " & Integer'Image (P.Y) & " " &
                                                                               Farbliste'Image (P.Farbe) );
   end;
end Punkt;

Die Prozedur Punkttst zeigt eine beispielhafte Anwendung, die mit zwei Punkt-Objekten arbeitet.




with Punkt;
-- eine Prozedur, die die Klasse <Punkt> benutzt:
procedure Punkttst is

    Punkt_1: Punkt.Punkt; -- ein Objekt
    Punkt_2: Punkt.Punkt; -- noch ein Objekt

begin
   Punkt.Erzeuge ( Punkt_1, 5, 7 ); -- Initialisierung
   Punkt.Zeichnen ( Punkt_1 ); -- Ausgabe

   Punkt.Erzeuge ( Punkt_2, 2, 4 ); -- Initialisierung
   Punkt.Zeichnen ( Punkt_2 ); -- Ausgabe
end;



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