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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

7.1. Spezifikation von ADTen<br />

Konstruktorfunktionen sind Funktionen, die dazu benutzt werden, Elemente<br />

des ADT aufzubauen. Jedes Element eines spezifizierten ADT kann unter ausschließlicher<br />

Verwendung von Konstruktorfunktionen aufgebaut werden. Konstruktorfunktionen<br />

erkennt man oft daran, daß es keine Axiome gibt, die sie einschränken.<br />

Ausnahmen gibt es bei sogennannten nicht-freien 1 Datentypen (z.B. Mengen); dort<br />

sind auch Konstruktoren mit Axiomen möglich. Alle anderen Funktionen werden<br />

hingegen im allgemeinen unter Bezug auf die Konstruktorfunktionen beschrieben.<br />

Beim ADT POINT ist create die Konstruktorfunktion. Jeder Punkt wird mit<br />

create gebildet, <strong>und</strong> alle anderen Funktionen sind unter Bezugnahme auf create<br />

beschrieben. Selektorfunktionen sind sozusagen die Inversen der Konstruktorfunktionen.<br />

Sie zerlegen ein Element des Datentyps in seine ” Einzelteile“. Für POINT<br />

sind dies get x <strong>und</strong> get y. Prädikate haben als Wertebereich den Typ BOOL. Für<br />

POINT ist dies is origin.<br />

Alle anderen Funktionen bezeichnen wir als sonstige Funktionen. Für POINT<br />

sind dies translate, scale <strong>und</strong> distance.<br />

Ein weiterer wichtiger Datentyp sind die natürlichen Zahlen.<br />

Type NAT<br />

Functions<br />

zero: NAT Konstruktor<br />

succ: NAT NAT Konstruktor<br />

pred: NAT NAT Selektor<br />

less: NAT ¢ NAT BOOL Prädikat<br />

add: NAT ¢ NAT NAT<br />

mult: NAT ¢ NAT NAT<br />

Axioms i,j: NAT<br />

pred (succ(i))=i<br />

less(zero,succ(i))=true<br />

less(j,zero)=false<br />

less(succ(i),succ(j))=less(i,j)<br />

add(zero,j)=j<br />

add(succ(i),j)=succ(add(i,j))<br />

mult(zero,j)=zero<br />

mult(succ(i),j)=add(j,mult(i,j))<br />

Preconditions i: NAT<br />

pre(pred(i)): less(zero,i)<br />

Die Spezifikation von NAT zeigt einen wichtigen Spezialfall der ADT-Spezifikation:<br />

Die Axiome sind ausschließlich Gleichungen über aus den neu definierten Funktionen<br />

zusammengesetzten Termen. Diese Art der Spezifikation (die Gleichungsspezifikation)<br />

wird oft auch mit der algebraische Spezifikation gleichgesetzt, obwohl in<br />

den diversen Methoden der algebraischen Spezifikation weitere Axiomtypen (Ungleichungen,<br />

bedingte Gleichungen) verwendet werden.<br />

1 Das sind solche, wo die Konstruktorfunktionen nicht injektiv sind.<br />

139

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!