03.02.2014 Aufrufe

Spezifikationsmodule - Software and Systems Engineering - TUM

Spezifikationsmodule - Software and Systems Engineering - TUM

Spezifikationsmodule - Software and Systems Engineering - TUM

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.

Haben wir namensgleiche Konstruktoren gefunden, müssen wir überprüfen,<br />

ob diese namensgleiche Selektoren besitzen.<br />

forall sel1:(con1.Selectors) .<br />

forall sel2:(con2.Selectors) . (<br />

(sel1.Name = sel2.Name) implies (<br />

Sollten auch namensgleiche Selektoren existieren, ist für diese nun zu prüfen,<br />

ob deren Typen vereinbar sind, d.h. wir müssen nachsehen, ob unsere Fixpunktmenge<br />

ein entsprechendes Tupel enthält.<br />

exists fp1_elem:fp1 . (<br />

call testSelectorType(sel1, fp1_elem.mod1Type) <strong>and</strong><br />

call testSelectorType(sel2, fp1_elem.mod2Type)<br />

)<br />

or (<br />

call testSelectorType(sel1, fp1_it.mod1Type) <strong>and</strong><br />

call testSelectorType(sel2, fp2_it.mod2Type)<br />

)<br />

... /* lots of ) */<br />

) .<br />

Das Disjunktionsglied benötigen wir für den Fall, der sich ergibt, wenn wir<br />

rekursive Datentypen untersuchen, wenn also die Selektoren den in der Fixpunktiteration<br />

gerade betrachteten Typ besitzen. In diesem Fall muss die Überprüfung<br />

der Vereinbarkeit der Selektortypen dahingehend erweitert werden, dass<br />

auch das aktuell betrachtete Typtupel überprüft wird.<br />

Nachdem nun die Fixpunktmenge der vereinbaren Typen konstruiert ist (Variable<br />

eqTypeSet), lassen wir an dieser Stelle den Benutzer ein Element der Menge<br />

auswählen, um das Ergebnis in einem entsprechenden Dialog darzustellen.<br />

context elem:eqTypeSet . true<br />

3.4 Interaktive Typvereinigung<br />

Bisher haben wir die Unifikation von Typdefinitionen auf die Namensgleichheit<br />

bei Konstruktoren und Selektoren gestützt. Für die Praxis ist dieses Vorgehen<br />

meist unzureichend, da wir mehr an der Struktur, die durch die Typdefinition<br />

festgelegt wird, interessiert sind als an den Bezeichnern in der Definition. Oft<br />

kommt es sogar vor, dass Typdefinitionen strukturell identisch sind, während<br />

der Entwicklungsarbeit allerdings mit unterschiedlichen Bezeichnern versehen<br />

wurden.<br />

Beispielsweise kann man<br />

data Comm<strong>and</strong> = Start | Stop | Reset;<br />

und<br />

data State = On | Off | Init;<br />

26

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!