11.10.2013 Aufrufe

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!