18.01.2014 Aufrufe

Metamodellbasierte und hierarchieorientierte ... - RosDok

Metamodellbasierte und hierarchieorientierte ... - RosDok

Metamodellbasierte und hierarchieorientierte ... - RosDok

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.

46 Deklarative UML metamodellbasierte Workflowmodellierung<br />

(a) WCP12: Multiple Instances without Synchronization<br />

(b) WCP13: Multiple Instances with a Priori Design-Time<br />

Knowledge<br />

(c) WCP14: Multiple Instances with a Priori Run-Time Knowledge<br />

(d) WCP15: Multiple Instances without a Priori Run-Time<br />

Knowledge<br />

Abbildung 3.6: Multiple Instance Patterns<br />

verwendet. Die operationale Semantik der Klasse ist wiefolgt: Zur Runtime müssen alle über die Assoziation<br />

instance verb<strong>und</strong>enen Ausführungsinstanzen im Zusand waiting sein, damit die übergeordnete MultiInstance-<br />

Aktivität ebenfalls in den Zustand waiting versetzt werden kann. Damit kann die Folgeaktivität a2 erst dann<br />

ausgeführt werden, wenn alle Instanzen von mi abgearbeitet, d.h. synchronisiert sind. Im Gegensatz zu<br />

WCP12 müssen die einzelnen Ausführungsinstanzen in WCP13 nicht synchronisiert werden. Somit kann in<br />

Abbildung 3.6(b) die Aktivität mi in den Ausführungszustand done versetzt werden, auch wenn noch einzelne<br />

Ausführungsinstanzen ausgeführt werden. Folglich darf die Folgeaktivität a2 ohne Synchronisierung der<br />

Ausführungsinstanzen gestartet werden.<br />

Die Klasse MIRuntime aus Abbildung 3.2 repräsentiert WCP14. Bei diesem Pattern wird erst zur Runtime<br />

beim Starten der Aktivität die Anzahl der zu erzeugenden Instanzen festgelegt. Hierfür wird die Operation<br />

enterNoOfInst() aus dem Metamodell genutzt. Die einzelnen Ausführungsinstanzen werden analog zum<br />

Verhalten von WCP12 synchronisiert. In Abbildung 3.6(c) ist somit die Aktivität a2 erst dann zu starten,<br />

wenn alle Instanzen von mi beendet wurden.<br />

Das letzte Multiinstanz-Pattern ist in Abbildung 3.6(d) mit der Klasse MIRuntimeWithAdd angewendet<br />

worden. Das Verhalten der Objekte dieser Klasse ist analog zum WCP14, wird jedoch um die Operation<br />

addInstance() erweitert. Dem Nutzer steht über diese Operation die Möglichkeit offen, neue Ausführungsinstanzen<br />

während der Ausführung hinzuzufügen. Erst nachdem die Multiinstanz-Aktivität beendet wurde,<br />

können auch keine weiteren Instanzen erzeugt werden.<br />

Die oben beschriebene Ausführungssemantiken der verschiedenen MultiInstance-Patterns sind anhand der<br />

unterschiedlichen OCL-Invarianten im Metamodell spezifiziert. Diese Invarianten werden hier jedoch nicht<br />

weiter angegeben.<br />

3.2.4.4 State-based Patterns<br />

Abbildung 3.7 zeigt die drei Patterns, die zu den State-based Patterns gehören. Das Deferred Choice-Pattern<br />

kann sehr einfach modelliert werden (s. Abbildung 3.7(a)). Die OCL-Invariante allWaitingXorOneRunningOthersSkipped<br />

zur Definition der Semantik ist in Listing 3.8 spezifiziert. Sie besagt, dass zum einen alle<br />

Aktivitäten aus der DeferredChoice-Gruppe im Zustand waiting sein dürfen. Wenn sich zum anderen eine<br />

Aktivität im Zustand running befindet, müssen alle anderen im Zustand skipped überführt worden sein.<br />

Das nächste Pattern ist Interleaved Parallel Routing, welches in Abbbildung 3.7(b) modelliert wurde. Es ist<br />

ähnlich einfach zu modellieren wie der vorher betrachtete Deferred Choice. Der Unterschied liegt darin,<br />

dass mit InterleavedParallelRouting ein anderes Gruppenobjekt verwendet wurde, in dem eine andere<br />

OCL-Invariante gilt. Damit gilt eine andere Semantik, die mit der Invariante atMostOneRunning in Listing<br />

3.8 spezifiziert wurde. Sie besagt, dass höchstens eine Aktivität der Gruppe zur gleichen Zeit ausgeführt

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!