18.01.2014 Aufrufe

Metamodellbasierte und hierarchieorientierte ... - RosDok

Metamodellbasierte und hierarchieorientierte ... - RosDok

Metamodellbasierte und hierarchieorientierte ... - RosDok

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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!