Metamodellbasierte und hierarchieorientierte ... - RosDok
Metamodellbasierte und hierarchieorientierte ... - RosDok
Metamodellbasierte und hierarchieorientierte ... - RosDok
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
3.2 Workflow-Metamodell 47<br />
(a) WCP16: Deferred Choice<br />
(b) WCP17: Interleaved Parallel<br />
Routing<br />
(c) WCP18: Milestone<br />
Abbildung 3.7: State-based Patterns<br />
werden darf.<br />
✞<br />
1 context DeferredChoice inv allWaitingXorOneRunningOthersSkipped:<br />
2 let act_selected:Set(Activity) = activity−>select(a | a.state=#running or a.state=#done) in<br />
3 activity−>forAll(a | a.state=#waiting) xor<br />
4 ( act_selected−>size=1 and (activity − act_selected)−>forAll(a|a.state=#skipped))<br />
5<br />
6 context InterleavedParallelRouting inv atMostOneRunning:<br />
7 self.activity−>select(a | a.state=#running)−>sizeselect(isDefined()).activity<br />
12 −>union(until.oclAsType(Activity)−>select(oclIsTypeOf(Activity)))−>asSet()<br />
13 in act−>forAll(a | a.state=#waiting)<br />
✝<br />
Listing 3.8: Definition vom Deferred Choice, Interleaved Parallel Routing <strong>und</strong> Milestone Pattern<br />
☎<br />
✆<br />
Das letzte der State-based Patterns ist das Milestone Pattern (WCP18). Es sagt aus, dass wenn ein bestimmter<br />
Ausführungspunkt im Prozessmodell erreicht wird, gewisse Aktivitäten nicht weiter ausführbar sind. Bereits<br />
gestartete Aktivitäten werden weiterhin ausgeführt.<br />
Dieser Sachverhalt wird mit der Assoziation exceeded im Metamodell ausgedrückt. Die Assoziation wird<br />
in Abbildung 3.7(c) angewendet <strong>und</strong> das Pattern damit ausgedrückt. Sobald Aktivität a5 ausgeführt wird,<br />
steht die Ausführung von Aktivität a2 nicht mehr zur Verfügung. Es wird also Aktivität a2 geskippt, falls<br />
sie sich im Zustand waiting befindet. Falls a2 schon gestartet wurde, hat dies keine Effekte auf deren<br />
Ausführung. Jedoch ist ein nochmaliges starten untersagt. Dieser Umstand kann nicht durch eine OCL-<br />
Invariante ausgedrückt werden, sondern muss mit der Vorbedingung für die Operation start() verknüpft<br />
werden. In Listing 3.8 ist die Vorbedingung untilActivitiesStillWaiting spezifiziert, die diesen Sachverhalt<br />
ausdrückt. Die Vorbedingung ist etwas umfangreicher, weil auch Gruppen mit der exceeded-Assoziation<br />
verb<strong>und</strong>en werden können. Die in den Gruppen enthaltenen Aktivitäten müssen erstmal in der Variablen act<br />
eingesammelt werden. Daraufhin wird sichergestellt, dass sich alle until-Aktivitäten im Zustand waiting<br />
befinden. Die Vorbedingung ist für die Klasse Activity in Listing 3.8 angegeben. Sie hat zudem auch für alle<br />
deren Unterklassen zu gelten.<br />
Ist die Aktivität a2 von Abbildung 3.7(c) durch das WCP18 geskippt worden, ist eine weitere Ausführung<br />
der Folgeaktivitäten möglich. Im Falle von Abbildung 3.7(c) ist a3 weiterhin auszuführen.<br />
3.2.4.5 Iteration and Cancellation Patterns<br />
In diesem Abschnitt werden die restlichen aus dem Katalog [AHKB03] verbliebenen Patterns beschrieben.<br />
Es gibt noch die Kategorie Iteration Patterns, zu der das Arbitrary Cycle Pattern (WCP10) gehört. Die