Metamodellbasierte und hierarchieorientierte ... - RosDok
Metamodellbasierte und hierarchieorientierte ... - RosDok
Metamodellbasierte und hierarchieorientierte ... - RosDok
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
40 Deklarative UML metamodellbasierte Workflowmodellierung<br />
✞<br />
1 context Iteration::finish()<br />
2 pre isIterRunning: state=#waiting or state=#running<br />
3 post isIterDone: state@pre=#waiting implies state=#done<br />
4 post isIterWaiting: state@pre=#running implies state=#waiting<br />
✝<br />
Listing 3.4: OCL-Vor- <strong>und</strong> Nachbedingungen für die Operation finish() der Klasse Iteration<br />
☎<br />
✆<br />
also das Verhalten der Oberklasse haben <strong>und</strong> evtl. zusätzliche Funktionalität hinzufügen. Das hat zur Folge,<br />
dass Vorbedingungen von gleichen Operationen nur gleich bleiben oder abgeschwächt werden können.<br />
Nachbedingungen können nur gleich bleiben oder verschärft werden.<br />
Bei der Programmiersprache Eiffel werden zur Umsetzung für Operationen, die in Unterklassen überschrieben<br />
werden folgende Klauseln verwendet. Vorbedingungen können mit require else nur<br />
abgeschwächt werden. D.h. die Vorbedingungen der Oberklasse <strong>und</strong> die Vorbedingungen der Unterklasse<br />
werden mit einem or logisch verknüpft. Nachbedingungen können mit ensure then nur<br />
verschärft werden. Dort werden die Nachbedingungen der Oberklasse mit der Unterklasse mit dem logischen<br />
and verknüpft.<br />
In der OCL-Spezifikation werden zwar contracts in Verbindung mit Vor- <strong>und</strong> Nachbedingungen erwähnt<br />
[OCL10], aber das Substitutionsprinzip, das eine Abschwächung der Vorbedingung <strong>und</strong> Verschärfung<br />
der Nachbedingung erfordert wird nicht vorgegeben. Das Verhalten ohne Substitutionsprinzip ist für das<br />
DMWM-Metamodell das gewünschte.<br />
Sollte bei der Implementierung des DMWM-Ansatzes das Design by contract inkl. Substitutionsprinzip<br />
gelten, müssten die bisher vorgestellten Vor- <strong>und</strong> Nachbedingungen angepasst werden. Ein Problem würde<br />
ansonsten bei der Nachbedingung von finish() auftreten. Ein Objekt, das sich im Zustand running befindet,<br />
wird durch die Verknüpfung der Zeile 7 in Listing 3.3 <strong>und</strong> Zeile 4 in Listing 3.4 mit dem logischen and<br />
Operator die Nachbedingung state=#done and state=#waiting erhalten. Diese würde offensichtlich ein<br />
Widerspruch enthalten.<br />
3.2.3.2 OCL-Hilfsfunktionen im Metamodell<br />
In UML lassen sich Operationen im Klassendiagramm mit OCL-Termen verknüpfen, wovon u.a. in der<br />
UML-Spezifikation gebrauch gemacht wird [UML10]. Die Operationen haben nach dem Prinzip von OCL<br />
keine Seiteneffekte auf das Objektmodell.<br />
Mit dieser Eigenschaft ist die Möglichkeit zur Berechnung der transitiven Hülle bei reflexiven Assoziationen<br />
gegeben. Ein Beispiel ist dafür in [KHGB] spezifiziert. Auch für DMWM werden verschiedene transitive<br />
Hüllen unter Verwendung der OCL berechnet.<br />
Die Operation getSuccObjects() in Listing 3.5 ist u.a. für die So<strong>und</strong>ness-Prüfung der Prozessmodelle<br />
notwendig, um potenzielle Deadlocks schon während der Designtime zu finden. Dieses Thema wird in<br />
Abschnitt 3.2.6 näher behandelt. Die dort eingeführten OCL-Invarianten benötigen diese Operationen.<br />
Die Operation getFlowObjects() in Listing 3.5 wird u.a. für das Einsammeln der Modellierungselemente<br />
im Prozessmodell benötigt. Wie in Abschnitt 3.2.1 beschrieben, müssen somit nicht alle Elemente im<br />
Prozessmodell mit dem entsprechenden Prozessobjekt über die Assoziation includes verb<strong>und</strong>en werden. Sie<br />
können indirekt über die Berechnung der transitiven Hülle dem Prozessobjekt zugeordnet werden.<br />
Im DMWM-Metamodell, dem Klassendiagramm von Abbildung 3.2, sind die hier vorgestellten Funktionen<br />
aus Übersichtlichkeitsgründen weggelassen worden. Dort sind nur die Operationen aufgeführt, die eine<br />
Schnittstelle zum Nutzer darstellen.