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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!