next up previous contents index
Weiter: 2.6 Limitierte Typen Hinauf: 2 TypenKlassen Zurück: 2.4.3 Alias-Objekte

2.5 Private Typen

   

Ada bietet, wie wir bisher gesehen haben, sehr flexible Möglichkeiten, um Datenstrukturen zu definieren. Das heißt, wir sind in der Lage, die Werte, die ein Objekt eines Typs annehmen kann, sehr exakt zu spezifizieren. Um jedoch die Operationen festzulegen, die auf ein Objekt ausgeübt werden können, bedarf es zusätzlicher Unterstützung. Meist besteht dabei in programmiersprachlicher Hinsicht das Problem vor allem darin, zu verhindern, daß hinterrücks Komponenten des Objektes (meist unabsichtlich) verändert werden, womit die Konsistenz des gesamten Objektes zerstört wird. Es ist daher erforderlich, auf Programmiersprachen-Niveau Sprachmittel zur Verfügung zu stellen, die solche ,,Untergriff-Methoden``verhindern.

Ada kennt sogenannte private Typen  , um dieses Prinzip des ,,information hiding's``  zu verwirklichen. Dabei werden die Einzelheiten der Implementierung verborgen und die Abstraktion im Problembereich in den Vordergrund gestellt. Wenn man zum Beispiel daran denkt, einen Stack zu realisieren, so sind vor allem die Operationen Push und Pop wichtig, nicht jedoch wie diese konkret implementiert werden. Der Stack kann dann konkret als Array oder als verkettete Liste realisiert werden, ohne die, davon unabhängig definierten Operationen zu beeinflussen.

Um ein vernünftiges Beispiel angeben zu können, müssen wir leider einen kleinen Vorgriff tätigen. Ein privater Typ muß nämlich in eine Paket-Struktur eingeschlossen werden. Wie solche Strukturen genauer aussehen, werden wir in Kapitel 7 sehen. Wir wählen als Beispiel unseren oben eingeführten Typ Datum (siehe Seite gif). Es ist leicht zu sehen, daß bei Beibehaltung des Record-Typs niemand daran gehindert werden kann, etwa das Datum  31. Februar 1991 darzustellen. In Ada kann das unterbunden werden, indem wir Datum als privaten Typ vereinbaren.

package Datum_Manager is
type Datum is private;

...

private
type Datum is
record
Tag: integer range 1 .. 31;
Monat: Monatsname;
Jahr: integer range 0 .. 4000;
end record;
end Datum_Manager;

Die benötigten Operation, wie etwa Setzen und Lesen des Datums, sind im Anschluß an die Definition von Datum zu spezifizieren, die Implementation erfolgt dann in einem zugehörigen Package-Body.

Abschließend sei darauf hingewiesen, daß MODULA-2  ein ähnliches Sprachkonstrukt unterstützt, die sogenannten opaquen Typen   .



next up previous contents index
Weiter: 2.6 Limitierte Typen Hinauf: 2 TypenKlassen Zurück: 2.4.3 Alias-Objekte

Johann Blieberger
Wed Feb 11 09:58:52 MET 1998