P2 Skript Teil 4 ab Seite 53…
abstrakte Datentypen dienen zur besseren modellierung von prgrammen. sie bestehen aus Typen, Funktionen, Axiomen und Vorbedingungen (nach Meyer).
Also ist es einfach nur ein "Modell" der einzelnen Typen.
Gibt es dann von jedem datentyp auch einen abstakten Datentypen?
Man sollte zumindest zu jedem Typen einen ADT bilden koennen.
MoKrates
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"?
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
hmm jetzt bin ich wieder komplett verwirrt! ICh habe dann den sinn de rganzen sache nicht wirklich verstanden
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.