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.

unifziert werden. Der Unifikator kann dann benutzt werden um die unifzierte<br />

Typdefinition automatisch zu erzeugen. In Abschnitt 3.4 führen wie die Definition<br />

eines solchen Unifikators interaktiv durch, d.h. der Nutzer wird festgelegen,<br />

welche Konstruktoren und Selektoren unifziert werden sollen, wobei die<br />

Namensgleichheit nicht mehr erforderlich ist.<br />

Um die Frage der Vereinbarkeit zweier Typdefinitionen zu beantworten, konstruieren<br />

wir mit Hilfe eines Fixpunktes die Menge aller vereinbarbaren Typtupel<br />

über zwei Typmodulen (DTDModule im Metamodell). Durch Prüfen, ob ein<br />

gegebenes Paar von Typen in dieser Menge enthalten ist, kann die Frage der<br />

Vereinbarkeit dieser beiden entschieden werden.<br />

In diesem Beispiel lassen wir zu Demonstrationszwecken den Benutzer bestimmen,<br />

von welchen beiden DTD-Modulen (den Sammelbehältern für Datentypdefinitionen)<br />

eine Vereinbarkeitsmenge berechnet werden soll und zeigen ihm<br />

diese am Ende an.<br />

Wir beginnen also mit der Auswahl der beiden DTDModule-Instanzen.<br />

context module1:DTDModule . context module2:DTDModule .<br />

Wir nutzen nun den Fixpunktoperator für die rekursive Mengenkonstruktion.<br />

Die Elemente der Menge sind dabei Tupel aus zwei TConst-Instanzen, je eine<br />

aus einem der beiden DTD-Module. TConst ist die MM-Superklasse, die atomare<br />

Typdefinitionen zusammenfasst (vgl. hierzu Abbildung 3.2).<br />

exists eqTypeSet: lfp fp1 set<br />

fp1_it:(mod1Type:(module1.TConsts), mod2Type:(module2.TConsts))<br />

with (<br />

In die Fixpunktmenge nehmen wir als erstes die identischen Tupel auf.<br />

Dies sind hier nur die AutoFocus 2-Grundtypen (also (Int, Int) und (Boolean,<br />

Boolean), usw.). Die Grundtypen sind in jedem DTD-Modul automatisch eingefügt.<br />

fp1_it.mod1Type = fp1_it.mod2Type or (<br />

Der zweite Teil der Konstruktionsvorschrift für den Fixpunkt übernimmt<br />

nun die Überprüfung, ob zwei nutzerdefinierte Datentypen vereinbar sind. Hierzu<br />

suchen wir die zu dem betrachteten Tupel gehörenden Datendefinitionen<br />

(DataDef-Instanzen). Für Grundtypen existieren, wie bereits gesagt keine Datentypdefinitionen,<br />

weshalb sie auch nur mit sich selbst vereinbar sind.<br />

exists mod1dd:DataDef . (<br />

mod1dd = fp1_it.mod1Type.TypeDef <strong>and</strong><br />

exists mod2dd:DataDef . (<br />

mod2dd = fp1_it.mod2Type.TypeDef <strong>and</strong><br />

Konnten wir entsprechende DataDef-Instanzen für beide Tupelteile finden,<br />

überprüfen wir nun sämtliche Konstruktorkombinationen, ob es namensgleiche<br />

Konstruktoren gibt.<br />

forall con1:(mod1dd.Constructors) .<br />

forall con2:(mod2dd.Constructors) . (<br />

(con1.Name = con2.Name) implies (<br />

25

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!