www.wikidata.de-de.nina.az
Ein Abstrakter Datentyp ADT ist ein Verbund von Daten zusammen mit der Definition aller zulassigen Operationen die auf sie zugreifen Inhaltsverzeichnis 1 Beschreibung 2 Spezifikationen 3 Beispiel 3 1 Signatur 3 1 1 Mathematisch axiomatische und algebraische Methode 3 1 2 Informelle Methode Java 3 1 3 Spezifikation durch eine funktionale Programmiersprache Haskell 3 2 Semantik 3 2 1 Mathematisch axiomatische Methode 3 2 2 Mathematisch algebraische Methode 3 2 3 Informelle Methode Java 3 2 4 Spezifikation durch eine funktionale Programmiersprache Haskell 4 Angestrebte Eigenschaften 5 LiteraturBeschreibung BearbeitenDa der Zugriff nur uber die festgelegten Operationen erfolgt sind die Daten nach aussen gekapselt Ein ADT beschreibt was die Operationen tun Semantik aber noch nicht wie sie es tun sollen Implementierung Auch kann das Konzept des ADTs unterschiedlich spezifiziert und ein ADT auf verschiedene Weise notiert werden bspw durch Pseudocode oder durch eine mathematische Beschreibung Modernere Programmiersprachen unterstutzen allerdings gezielt die Erstellung von ADTs Objektorientierte Programmiersprachen unterstutzen durch ihr Klassenkonzept die Erstellung von ADTs da hier Daten und Operationen gebunden werden die Daten geschutzt und die zulassigen Operationen festgelegt werden konnen Einige modulare Programmiersprachen wie Ada oder Modula 2 unterstutzen ebenfalls gezielt die Erstellung von ADTs In der Regel ist es moglich einen ADT durch Definition der Daten und der Signaturen der Operationen festzulegen wahrend die Semantik als Kommentartext beschrieben wird Beispiel Java unterstutzt ADTs durch Klassen abstrakte Klassen und Interfaces In einem Interface werden nur Daten und Signaturen der Operationen definiert eine festgelegte Klasse implementiert erst das Interface Allgemein legt eine Klasse die Daten und die darauf zulassigen Operationen fest Spezifikationen BearbeitenEin abstrakter Datentyp kann durch unterschiedliche Spezifikationen angegeben werden Eine Spezifikation besteht aus einer Signatur und einer Semantik die Bedeutung und Interaktion der Operationen festlegt Mathematisch betrachtet handelt es sich um die Spezifikation einer Termalgebra durch Signatur Erzeuger und Axiome Daraus ergibt sich die erste Art der Spezifikation die mathematisch axiomatische Eine weitere Moglichkeit ist die mathematisch algebraische Spezifikation die sich nur in der Angabe der Semantik von der axiomatischen unterscheidet Die inhaltliche Bedeutung der Operationen wird hierbei durch mathematische Mittel Matrizen Vektoren Folgen etc definiert Daneben existieren Sonderformen wie die informelle Methode der Spezifikation durch Angabe einer Schnittstelle einer Programmiersprache beispielsweise als Java Schnittstellen oder die Implementierung des Datentyps in einer funktionalen Programmiersprache wie Haskell was im ersten Moment widerspruchlich zu dem Bestreben steht den Datentyp unabhangig von einer Implementierung zu machen Die Implementierung in einer funktionalen Programmiersprache dient allerdings als Spezifikation fur ADTs die schliesslich in prozeduralen oder objektorientierten Sprachen implementiert werden Der Vorteil dieser Spezifikation ist dass gleich getestet werden kann ob die Spezifikation sinnvoll ist was bei den anderen Moglichkeiten besonders der axiomatischen nicht ohne weiteres moglich ist Beispiel BearbeitenIm Folgenden werden die ADTs Stapelspeicher Stack arbeitet nach dem Last in First out Prinzip und Warteschlange Queue arbeitet nach dem First in First out Prinzip in den angesprochenen vier Spezifikationen definiert Signatur Bearbeiten Mathematisch axiomatische und algebraische Methode Bearbeiten STACK wird hier definiert ELEMENT ein hier nicht definierter ADT mit dem der Stack arbeitet BOOL emptyStack STACK erzeugt einen leeren Stack isStackEmpty STACK BOOL fragt nach ob der Stack leer ist push ELEMENT STACK STACK packt ein Element oben auf den Stack pop STACK STACK entfernt das oberste Element und gibt den neuen Stack zuruck top STACK ELEMENT gibt das oberste Element zuruck ohne es zu entfernen QUEUE ELEMENT BOOL emptyQueue QUEUE isQueueEmpty QUEUE BOOL enqueue ELEMENT QUEUE QUEUE fugt ein Element hinten an dequeue QUEUE QUEUE entfernt das vorderste Element head QUEUE ELEMENT gibt das vorderste Element zuruck ohne es zu entfernen Informelle Methode Java Bearbeiten public interface IStack lt E gt public boolean isStackEmpty public IStack lt E gt push E elem public IStack lt E gt pop public E top public interface IQueue lt E gt public boolean isQueueEmpty public IQueue lt E gt enqueue E elem public IQueue lt E gt dequeue public E head Spezifikation durch eine funktionale Programmiersprache Haskell Bearbeiten data Stack e E S e Stack e isStackEmpty Stack a Bool push e Stack e Stack e pop Stack e Stack e top Stack e e data Queue e E Q Queue e e isQueueEmpty Queue e Bool enqueue e Queue e Queue e dequeue Queue e Queue e head Queue e e Semantik Bearbeiten Auch bei genauerer Betrachtung der identischen Signaturen sind keine Unterschiede zwischen den Datentypen zu erkennen Erst mit der Definition der Semantik ergeben sich Unterschiede Mathematisch axiomatische Methode Bearbeiten x ELEMENT s STACK isStackEmpty emptyStack TRUE isStackEmpty push x s FALSE pop emptyStack ERROR pop push x s s top emptyStack ERROR top push x s x push top s pop s s falls s nicht leer x ELEMENT q QUEUE isQueueEmpty emptyQueue TRUE isQueueEmpty enqueue x q FALSE head emptyQueue ERROR head enqueue x q IF isQueueEmpty q THEN x ELSE head q dequeue emptyQueue ERROR dequeue enqueue x q IF isQueueEmpty q THEN q ELSE enqueue x dequeue q Mathematisch algebraische Methode Bearbeiten SETS ELEMENT E Menge der Elemente x E displaystyle x in E nbsp STACK S x 1 x n x i E n N n 1 displaystyle lbrace langle rangle rbrace cup lbrace langle x 1 x n rangle x i in E land n in mathbb N land n geq 1 rbrace nbsp FUNCTIONS emptyStack displaystyle langle rangle nbsp isStackEmpty S S displaystyle S langle rangle nbsp push S x x displaystyle langle x rangle nbsp falls S displaystyle S langle rangle nbsp x 1 x n x displaystyle langle x 1 x n x rangle nbsp falls S x 1 x n displaystyle S langle x 1 x n rangle nbsp top S displaystyle perp nbsp falls S displaystyle S langle rangle nbsp x n displaystyle x n nbsp falls S x 1 x n n 1 displaystyle S langle x 1 x n rangle n geq 1 nbsp pop S displaystyle perp nbsp falls S displaystyle S langle rangle nbsp displaystyle langle rangle nbsp falls S x displaystyle S langle x rangle nbsp x 1 x n 1 displaystyle langle x 1 x n 1 rangle nbsp falls S x 1 x n n 2 displaystyle S langle x 1 x n rangle n geq 2 nbsp SETS ELEMENT E Menge der Elemente x E displaystyle x in E nbsp QUEUE Q x 1 x n x i E n N n 1 displaystyle lbrace langle rangle rbrace cup lbrace langle x 1 x n rangle x i in E land n in mathbb N land n geq 1 rbrace nbsp FUNCTIONS emptyQueue displaystyle langle rangle nbsp isQueueEmpty Q Q displaystyle Q langle rangle nbsp enqueue Q x x displaystyle langle x rangle nbsp falls Q displaystyle Q langle rangle nbsp x x 1 x n displaystyle langle x x 1 x n rangle nbsp falls Q x 1 x n displaystyle Q langle x 1 x n rangle nbsp head Q displaystyle perp nbsp falls Q displaystyle Q langle rangle nbsp x n displaystyle x n nbsp falls Q x 1 x n n 1 displaystyle Q langle x 1 x n rangle n geq 1 nbsp dequeue Q displaystyle perp nbsp falls Q displaystyle Q langle rangle nbsp displaystyle langle rangle nbsp falls Q x displaystyle Q langle x rangle nbsp x 1 x n 1 displaystyle langle x 1 x n 1 rangle nbsp falls Q x 1 x n n 2 displaystyle Q langle x 1 x n rangle n geq 2 nbsp Informelle Methode Java Bearbeiten Semantik durch Angabe von Voraussetzung und Effekt Ergebnis der Methode beim objektorientierten Programmieren entfallt meist die Notwendigkeit als Voraussetzung die Existenz der Datenstruktur anzugeben da die Methode an ein Objekt gebunden ist was schon existiert public interface IStack lt E gt Konstruktor in der konkreten Klasse Ergebnis true wenn der Stack leer ist false andernfalls public boolean isStackEmpty Effekt Der Stack enthalt das Element elem als oberstes Element Ergebnis Der Stack nach dem Einfugen des Elements elem public IStack lt E gt push E elem Voraussetzung Der Stack ist nicht leer Effekt Das oberste Element wird vom Stack geloscht Ergebnis Der Stack nach dem Loschen public IStack lt E gt pop Voraussetzung Der Stack ist nicht leer Ergebnis Das oberste Element public E top public interface IQueue lt E gt public boolean isQueueEmpty public IQueue lt E gt enqueue E elem public IQueue lt E gt dequeue public E head Spezifikation durch eine funktionale Programmiersprache Haskell Bearbeiten emptyStack E isStackEmpty E True isStackEmpty S x xs False push e xs S e xs pop S x xs xs top S x xs x emptyQueue E isQueueEmpty E True isQueueEmpty Q xs x False enqueue e xs Q xs e dequeue E E dequeue Q E x E dequeue Q Q ys y x enqueue x dequeue Q ys y head E error Queue ist leer head Q E x x head Q Q ys y x head Q ys y Angestrebte Eigenschaften BearbeitenAnzustrebende Eigenschaften eines gut programmierten ADT und meist auch einer gut spezifizierten Datenstruktur sind Universalitat implementation independence Der einmal entworfene und implementierte ADT kann in jedes beliebige Programm einbezogen und dort benutzt werden z B in Form einer Unit Prazise Beschreibung precise specification Die Schnittstelle zwischen Implementierung und Anwendung muss eindeutig und vollstandig sein Einfachheit simplicity Bei der Anwendung interessiert die innere Realisierung des ADT nicht der ADT ubernimmt seine Reprasentation und Verwaltung im Speicher selbst Geschutztheit integrity Die Schnittstelle soll als eine hermetische Grenze aufgefasst werden Der Anwender soll sehr genau wissen was ein ADT tut aber keinesfalls wie er es tut Kapselung encapsulation Der Anwender kann in die interne Struktur der Daten nicht eingreifen Die Gefahr Daten ungewollt zu loschen bzw zu verandern sowie Programmierfehler zu begehen ist dadurch deutlich herabgesetzt Modularitat modularity Das modulare Prinzip erlaubt ubersichtliches und damit sicheres Programmieren und leichten Austausch von Programmteilen Bei der Fehlersuche konnen einzelne Module sehr isoliert betrachtet werden Viele Verbesserungen konnen uber ADTs nachtraglich ohne die geringste Anderung in samtlichen Umgebungs bzw Anwendungsprogrammen ubernommen werden Wird objektorientiert programmiert konnen diese Eigenschaften besonders leicht erfullt werden weil das objektorientierte Paradigma auf naturliche Weise die Erstellung von ADTs unterstutzt Eine weitere Moglichkeit zur Erstellung von ADTs auch in Verbindung mit objektorientierter Programmierung sind generische Typen Literatur BearbeitenBarbara Liskov Stephen Zilles Programming with abstract data types In SIGPLAN Notices Vol 9 No 4 1974 S 50 59 John Guttag Abstract Data Types and the Development of Data Structures In Communications of the ACM Vol 20 1977 No 6 S 396 404 J A Goguen J W Thatcher E W Wagner An Initial Algebra Approach to the Specification Correctness and Implementation of Abstract Data Types In R T Yeh Hrsg Current Trends on Programming Methodology Vol IV 1978 Prentice Hall Int Hartmut Ehrig Bernd Mahr Fundamentals of Algebraic Specification 1 Equations and Initial Semantics Springer Verlag 1985 Luca Cardelli Peter Wegner On Understanding Types Data Abstraction and Polymorphism In Computing Surveys Vol 17 No 4 Dezember 1985 S 470 522 John C Mitchell Gordon D Plotkin Abstract Data Types Have Existential Type In ACM Transaction on Programming Languages ans Systems Vol 10 No 3 Juli 1988 S 470 502 Peter Muller Introduction to Object Oriented Programming Using C Kapitel zu ADT Jorge Martinez Ordered algebraic structures proceedings of the Gainesville conference sponsored by the University of Florida 28th February 3rd Marchf 200 Kluwer Academic Publishers Dordrecht Boston 2002 ISBN 978 1 4020 0752 1 englisch eingeschrankte Vorschau in der Google Buchsuche Rolke Sennholz Grund und Leistungskurs Informatik Cornelsen Dusseldorf 1992 ISBN 3 464 57312 5 Abgerufen von https de wikipedia org w index php title Abstrakter Datentyp amp oldid 220057300