FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Wozu ADT?

Wozu ADT? 2004-03-23 21:00
Soccer
Wozu dienen ADT's?

Re: Wozu ADT? 2004-03-23 22:43
Anonymer User
P2 Skript Teil 4 ab Seite 53…

Re: Wozu ADT? 2004-03-23 22:45
nicky
abstrakte Datentypen dienen zur besseren modellierung von prgrammen. sie bestehen aus Typen, Funktionen, Axiomen und Vorbedingungen (nach Meyer).

Re: Wozu ADT? 2004-03-23 22:52
Soccer
Also ist es einfach nur ein "Modell" der einzelnen Typen.
Gibt es dann von jedem datentyp auch einen abstakten Datentypen?

Re: Wozu ADT? 2004-03-23 22:55
MoKrates
Man sollte zumindest zu jedem Typen einen ADT bilden koennen.

MoKrates

Re: Wozu ADT? 2004-03-23 22:59
Soccer
Versteh ich das nun richtig, dass ich auch zu der Klasse z.B. Konto ein ADt bilde, in dem ich die ganzen Funktionen "beschreibe" und diese dann anhand von Axiomen "beweise"?

Re: Wozu ADT? 2004-03-23 23:03
MoKrates
Nein. Du fuehrst Invarianzen ein, das sind Deine Axiome (Vor und Nachbedingungen, in P2 gelernt, mit Assert geprueft). Die Methoden eines Objekts sind die Operationen auf dem Typ. Ebenso wie Funktionen, die den ADT wieder liefern, oder annehmen.

MoKrates

Re: Wozu ADT? 2004-03-23 23:05
Soccer
hmm jetzt bin ich wieder komplett verwirrt! ICh habe dann den sinn de rganzen sache nicht wirklich verstanden

Re: Wozu ADT? 2004-03-23 23:14
MoKrates
ADTs musst Du Dir vorstellen als abstrakte Darstellung eines Datentyps (wie der Name sagt). Wie zB ein Stack. Ob Du nun einen Stack in Java, C, Pascal, Scheme, Miranda, PL/1, Fortran, Algol, C++, C#, Python, Bash oder sonstwo benutzt, sie sehen ueberall gleich aus. Und das wird im ADT beschrieben.

Ein ADT fasst zusammen, wie man auf Daten *dieser* Art arbeitet, Aehnlich einer Klasse.

Invarianzen (in Java) sind sowas wie:
!(s.push(o).empty())Dieser Ausdruck ist immer wahr, und kann als Axiom definiert werden (so sollen Stacks sich naemlich *immer* verhalten).
Immer wahr ist zB auch:
s.push(o).top() == o
Der Name "Invarianz" kommt daher, dass sich der Typ in diesem Fall immer gleich verhaelt. Es variiert nicht, sondern ist invariant.

Du musst dem Teil einen Namen geben:
Stack
Du moechtest Operationen definieren:
Stack s.push(Object) boolean s.empty() Object s.top()
Alles, was sich so verhaelt, egal in welcher Sprache, ist ein Stack. Weil es immer dem ADT entspricht. Das ist die Idee.

Wenn Du einen Algorithmus beschreiben willst, arbeitet der auf Daten. Die Typen muessen bekannt sein. Wenn Du nun Datentypen wie "int" benutzt, sind diese abhaengig von Sprache und Maschine, auf der das ganze laufen soll. Wenn Du den Algorithmus *abstrakt* beschreiben willst, moechtest Du solche Abhaengigkeiten vermeiden. Dafuer die ADTs.

MoKrates

Edit: kleine Korrekturen und Ergaenzungen.