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.
esult has Name(mk_prt.copy,<br />
concat(mk_prt.orig.one.Name, mk_prt.orig.two.Name)) <strong>and</strong><br />
/* set direction attribute */<br />
exists mk_nd:new Direction . (<br />
result has Direction(mk_prt.copy, mk_nd) <strong>and</strong><br />
result has<br />
IsEntry(mk_nd, mk_prt.orig.one.Direction.IsEntry)<br />
) <strong>and</strong><br />
/* set port type */<br />
exists mk_prt_mt:new MIFType . (<br />
result has DefinedType(mk_prt.copy, mk_prt_mt) <strong>and</strong><br />
exists ntm_elem_port:new_tconst_map . (<br />
mk_prt.orig.one.DefinedType.Model =<br />
ntm_elem_port.orig.one.TConst <strong>and</strong><br />
mk_prt.orig.two.DefinedType.Model =<br />
ntm_elem_port.orig.two.TConst <strong>and</strong><br />
result has Model(mk_prt_mt, ntm_elem_port.copy)<br />
)))) .<br />
Hier sehen wir auch, dass bei vielen Modellelementen zusätzliche Elemente<br />
erzeugt werden müssen, die meist nur als Kapselobjekte für primitive Datentypen<br />
(Direction) oder zur Flexibilisierung der Modellierungsfähigkeiten (MIFType<br />
für unvollständige Modelle) von AutoFocus 2 benutzt werden.<br />
5.5.5 Konstruktion nicht-unifizierter Elemente<br />
Da die Unifikationsrelationen hier partielle Funktionen sein dürfen, müssen wir<br />
nicht-unifizierte Elemente der jeweiligen Modellelementklasse ebenfalls beh<strong>and</strong>eln.<br />
Für sie erstellen wir jeweils eine Kopie und verknüpfen sie entsprechend<br />
mit den restlichen neuen Elementen. Hier zeigen wir die Umsetzung wieder am<br />
Beispiel der Port-Elemente.<br />
Wir konstruieren dazu zunächst die Menge der nicht-unifizierten Port-Elemente.<br />
Sie besteht aus allen Elementen, die zu einer der beiden Komponenten<br />
gehören und nicht in der portmap-Menge auftauchen.<br />
exists copy_port_set: lfp FP7 set fp7_it:Port<br />
with (<br />
(<br />
fp7_it.Component = component_pair.one or<br />
fp7_it.Component = component_pair.two<br />
) <strong>and</strong><br />
neg exists sm_fp7:port_map . (<br />
sm_fp7.one = fp7_it or<br />
sm_fp7.two = fp7_it<br />
)<br />
).<br />
Für diese Menge erzeugen, wie eben, eine bijektive Abbildung auf neue Port-<br />
Elemente und bauen für diese die Assoziationen mit einer Subroutine auf, die<br />
56