Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00
Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00
Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00
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