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.
ODL Ausdrücke stellen, analog zur Prädikatenlogik erster Stufe, Formeln mit<br />
Quantoren dar. Neben den Existenz- und Allquantoren besitzt sie zusätzlichen<br />
einen Interaktionsquantor (context), der die Variablenbindung nicht iterativ<br />
vornimmt, sondern dem Benutzer die iterierte Menge in einem Dialog anzeigt<br />
und eine Auswahl verlangt.<br />
Neben dem Analysieren von Modellen und Überprüfen von Nebenbedingungen<br />
ist eine wichtige Fähigkeit der ODL neue Modellelemente und Verknüpfungen<br />
zwischen Modellelementen schaffen zu können. Wir beschäftigen uns damit<br />
ausführlich im Abschnitt 5.5.<br />
2.3.2 Beispiele<br />
Einige kurze Beispiele sollen hier einen Eindruck der ODL vermitteln.<br />
Überprüfung aller Porttypen auf Definiertheit<br />
Wir wollen Überprüfen, ob für alle Port-Elemente entsprechende Type-Elemente<br />
existieren. Wir betrachten also für jedes Schnittstellenelement, ob das zugehörige<br />
Modellschnittstellenelement (MIFType) mit einem Type-Element verknüpft ist.<br />
forall p:Port . exists t:Type . p.DefinedType.Model = t<br />
Interaktives Umbenennen einer Komponente<br />
Der Nutzer wird um die Eingabe einer Komponente und eines Strings gebeten,<br />
worauf diese Komponente entsprechend umbenannt wird.<br />
context tupel:(comp:Component, name:String) .<br />
result has Name(tupel.comp, tupel.name)<br />
Erzeugen eines neuen Ports<br />
In diesem Beispiel erzeugen wir ein neues Port-Element und fügen es der vom<br />
Benutzer gewählten Komponente hinzu. Wir setzen auch die Richtung des Ports<br />
und seinen Typ, indem wir die entsprechenden Kapselelemente generieren und<br />
mit den Nutzereingaben verknüpfen. Als Porttyp erlauben wir nur Typkonstanten<br />
(TConst).<br />
context data:(c:Component, s:String, dir:Boolean) .<br />
context dtd:DTDModule .<br />
context t:(dtd.TConsts) .<br />
exists np:new Port . (<br />
exists nd:new Direction . (<br />
result has IsEntry(nd, data.dir) <strong>and</strong><br />
result has Direction(np, nd)<br />
) <strong>and</strong><br />
exists nmt:new MIFType . (<br />
result has DefinedType(np, nmt) <strong>and</strong><br />
result has Text(nmt, t.Name) <strong>and</strong><br />
result has Model(nmt, t)<br />
) <strong>and</strong><br />
13