Spezifikationsmodule - Software and Systems Engineering - TUM
Spezifikationsmodule - Software and Systems Engineering - TUM
Spezifikationsmodule - Software and Systems Engineering - TUM
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