Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00
Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00
Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
7. Abstrakte Datentypen<br />
welche Art von Daten sie speichern (ob ganze Zahlen oder Bankkonten oder Personaldatensätze).<br />
Deswegen haben die Spezifikationen solcher Typen im allgemeinen<br />
einen (in Ausnahmefällen auch mehrere) Parameter. Man nennt diese Datentypen<br />
generisch oder parametrisiert. Generische ADT-Spezifikationen spezifizieren genau<br />
genommen keinen einzelnen ADT, sondern einen ADT für jede Instanz des Parameters.<br />
Sie sind also eigentlich Datentypgeneratoren.<br />
Type ARRAY[ITEM]<br />
Functions<br />
create: INT ¢ INT ARRAY[ITEM] Konstruktor<br />
put: ARRAY[ITEM] ¢ INT ¢ ITEM ARRAY[ITEM] Konstruktor<br />
lower: ARRAY[ITEM] INT Selektor<br />
upper: ARRAY[ITEM] INT Selektor<br />
get: ARRAY[ITEM] ¢ INT INT Selektor<br />
empty: ARRAY[ITEM] BOOL Prädikat<br />
Axioms i,j,k : INT, a : ARRAY[ITEM], x : ITEM<br />
lower(create(i,j))=i<br />
lower(put(a,i,x))=lower(a)<br />
upper(create(i,j))=j<br />
upper(put(a,i,x))=upper(a)<br />
k=i get(put(a,i,x),k)=x<br />
k i get(put(a,i,x),k)=get(a,k)<br />
empty(create(i,j))<br />
empty(put(a,i,x))<br />
Preconditions a: ARRAY[ITEM]; i: INT; x: ITEM<br />
pre(put(a,i,x)): lower(a) i upper(a)<br />
pre(get(a,i)): lower(a) i upper(a)<br />
Was passiert, wenn man ein Array-Element überschreibt? get liefert den korrekten<br />
Wert zurück, aber nach den bisherigen Axiomen können wir nicht zeigen,<br />
daß gilt:<br />
ÔÙØ ÔÙØ Ü Ý ÔÙØ Ý<br />
Wenn wir wollen, daß diese Gleichheit gilt, <strong>und</strong> daß außerdem die Reihenfolge<br />
des Hinzufügens von Elementen egal ist, müssen wir folgende Axiome hinzufügen:<br />
ÔÙØ ÔÙØ Ü Ý ÔÙØ ÔÙØ Ý Ü<br />
ÔÙØ ÔÙØ Ü Ý ÔÙØ Ý<br />
Weiterhin ist die Frage interessant, was passiert, wenn man mit get(i,a)<br />
auf ein Arrayelement zugreifen will, das nicht vorher mit put(a,i,x) initialisiert<br />
wurde. Hier ist die Antwort, daß der Funktionsaufruf get(i,a) zwar ein Element<br />
des Typs ITEM liefert, aber über dieses Element nichts bekannt ist.<br />
148