Abstrakte Datentypen (1)


Pointer und dadurch zugängliche dynamische Variable sind ein bequemes Mittel, um dynamische Datenstrukturen aufzubauen, deren Umfang sich zur Laufzeit des Programms ändern kann. Diese lassen sich wiederum zu neuen Datentypen  zusammenfassen, und wenn man diese in einer Weise definiert, daß ihr Verhalten  für die Anwendung hinreichend genau bekannt ist, ohne aber die interne Realisierung im Detail festzulegen, so nennt man sie abstrakte Datentypen.

Besonders bequem kann man abstrakte Datentypen durch eine funktionale  oder algebraische Spezifikation definieren. In diesem Sinne besteht ein abstrakter Datentyp aus:

Mit den Operationen lassen sich nun ganz beliebige formal korrekt  aufgebaute (wohlgeformte) Terme bilden, und in der so gewonnenen Termalgebra kann man mittels der gegebenen Regeln rechnen.  Wir erhalten so eine algebraische Struktur (die uns schon bekannten Strukturen wie Halbgruppen, Gruppen, Ringe, Körper, Vektorräume etc. passen hier auch hinein!) Durch die Regeln zerfällt die Termalgebra in Äquivalenzklassen  von Termen, und diese sind die Objekte  unseres Datentyps. Manchmal unterscheidet man bei den Operationen auch Konstruktoren, mittels deren wir Objekte aufbauen, und Projektoren, über die wir auf Komponenten oder Attribute von Objekten zugreifen. Allein aus Konstruktoren aufgebaute Terme nennt man Grundterme. Oft enthält jede Äquivalenzklasse genau einen Grundterm, auf den sich die anderen Elemente der Klasse mittels der Regeln reduzieren lassen, und der damit das Objekt repräsentiert.

Wir nennen eine algebraische Struktur  oft kurz eine Algebra oder, wenn es uns auf ihre Verwendung innerhalb von Programmen ankommt, eine Rechenstruktur. In diesem Falle werden wir nicht direkt auf der Termalgebra arbeiten (das ist meist recht unbequem), sondern eine äquivalente, womöglich effizientere oder leichter handhabbare Implementierung wählen. Deren Schnittstelle  ist durch die Angabe der Sorten und der Funktionalität der Operationen gegeben, während ihr gewünschtes Verhalten  durch die Regeln näher spezifiziert wird. Für die Frage, ob die Implementierung korrekt ist, hat man gerade die Einhaltung der Regeln nachzuprüfen.


zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:35