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.

5.5.3 Konstruktion der Komponente<br />

Da wir im interaktiven Ablauf nur ein Paar von Komponenten betrachten, gestaltet<br />

sich das Generieren der Vereinigungskomponente denkbar einfach.<br />

exists new_comp: new Component . (<br />

context new_comp_name:String .<br />

result has Name(new_comp, new_comp_name)<br />

<strong>and</strong> result has<br />

SubComponents(component_pair.one.SuperComponent, new_comp)<br />

<strong>and</strong> ...<br />

Über den Namen der neuen Komponente lassen wir den Nutzer durch den<br />

entsprechenden context-Ausdruck entscheiden. Die neue Komponente wird anschließend<br />

parallel zur ersten unifzierten Komponente in das Modell eingefügt.<br />

5.5.4 Konstruktion der Schnittstellenelemente<br />

Für die Konstruktion der Port-Elemente benutzen wir den map-Operator. Wir erzeugen<br />

eine bijektive Abbildung, sodass zu jedem Tupel von unifizierten Schnittstellenelementen<br />

genau ein neues Element entsteht.<br />

exists new_port_map:map orig:port_map to copy:new Port . (<br />

/* bijective mapping */<br />

forall npm1:new_port_map . forall npm2:new_port_map . (<br />

npm1.orig = npm2.orig equiv npm1.copy = npm2.copy<br />

) <strong>and</strong><br />

/* build associations */<br />

run makePorts(new_comp, new_port_map, new_tconst_map) <strong>and</strong><br />

...<br />

Die Anbindung und Verknüpfung der neuen Elemente haben wir hier der<br />

Übersichtlichkeit halber in ein Unterprogramm ausgelagert. Hier wird für jedes<br />

neue Schnittstellenelement die Anbindung an die neue Komponente, die Namensgebung<br />

und das Setzen der Port-Attribute durchgeführt. Im Gesamtablauf<br />

müssen wir die Datentypdefinitionen bereits generiert haben, da wir sie, wie im<br />

folgenden Programmausschnitt ersichtlich, korrekt verknüpfen müssen.<br />

define makePorts(<br />

new_comp:Component,<br />

new_port_map:set(orig:(one:Port, two:Port),copy:Port),<br />

new_tconst_map:set (<br />

orig:(one:DataDef, two:DataDef),<br />

copy:AbstractType<br />

)<br />

) as (<br />

forall mk_prt:new_port_map . (<br />

/* link port to new component */<br />

result has Ports(new_comp, mk_prt.copy) <strong>and</strong><br />

/* generate name for the port */<br />

55

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!