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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5.4 Umsetzung der Dialogführung in ODL<br />

Nachdem wir nun den Ablauf der Dialogführung illustriert und beschrieben,<br />

und die für das Ablaufdesign relevanten Fragen skizziert haben, wenden wir uns<br />

nun der technischen Seite zu. In diesem Abschnitt werden wir die Dialogschritte<br />

als ODL Ausdrücke formulieren. Dabei konzentrieren wir uns hier nur auf die<br />

Besonderheiten ausgewählter Schrittes. Das komplette Programmlisting findet<br />

sich im Anhang A. Es ist gegenüber den hier gemachten Ausführungen noch<br />

erweitert worden, damit es zu dem Beispiel aus Kapitel 2 passt.<br />

5.4.1 Komponentendialog<br />

Der Komponentendialog ist durch einen sehr einfachen ODL-Ausdruck definiert:<br />

context component_pair:(one:Component, two:Component) .<br />

Wir erhalten vom Benutzer ein 2-Tupel von Komponenten, dessen Elemente<br />

wir über die Tupelselektoren one und two erreichen. Diese Konvention für Tupelselektoren<br />

werden wir im Folgenden auch für die <strong>and</strong>eren Datenstrukturen<br />

beibehalten.<br />

5.4.2 Vorberechnung für Schnittstellendialog<br />

Für den Dialog zur Vereinigung der Schnittstellen (Port-Elemente) führen wir<br />

eine Vorberechnung durch. Dazu definieren wir zunächst ein Prädikat, das die<br />

externe Abhängigkeit von Port zu Component und die interne Abhängigkeit in<br />

Bezug auf das Direction-Attribut, wie in Kapitel 4 gezeigt, kapselt.<br />

define Consistent_Component_Port(<br />

component_pair:(one:Component, two:Component),<br />

pm_elem:(one:Port, two:Port)<br />

) := (<br />

pm_elem.one.Direction.IsEntry =<br />

pm_elem.two.Direction.IsEntry <strong>and</strong><br />

component_pair.one = pm_elem.one.Component <strong>and</strong><br />

component_pair.two = pm_elem.two.Component<br />

) .<br />

Mit diesem Prädikat können wir nun alle Kombinationen von Port-Elementen<br />

der zwei gewählten Komponenten auf Vereinbarkeit mit den Abhängigkeiten<br />

prüfen. Wir setzen hier den Fixpunktoperator ein, um die entsprechenden Tupel<br />

in der Menge port map possible aufzusammeln.<br />

exists port_map_possible: lfp FP1 set<br />

fp1_it:(one:(component_pair.one.Ports),<br />

two:(component_pair.two.Ports)<br />

) with (<br />

call Consistent_Component_Port(component_pair, fp1_it)<br />

) .<br />

48

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!