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.

3.2 Workflow-Metamodell 39<br />

hungen anhand von OCL definiert, die von Workflow Patterns nicht abgedeckt sind, aber Bestandteile des<br />

Metamodells <strong>und</strong> damit der neuen Sprache sind. Eine detaillierte Analyse der Elemente, die die Workflow<br />

Patterns abdecken wird in Abschnitt 3.2.4 folgen.<br />

3.2.3.1 Angabe der Objektlebenszyklen mit OCL<br />

Die Lebenszyklen von Aktivitätsobjekten sind mit Hilfe von UML-Zustandsautomaten in Abbildung 3.3<br />

spezifiziert. Die Transitionen werden durch Operationsaufrufe repräsentiert. Diese Art der Spezifikation<br />

von Objektlebenszyklen ist in der UML Spezifikation [UML10, Kap. 15.1] mit Protocol State Machines<br />

bezeichnet.<br />

Die State Charts können über OCL Vor- <strong>und</strong> Nachbedingungen ausgedrückt werden. Der Zustand des<br />

Objekts ist durch das Attribut state im Zusammenhang mit der Enumeration State im Klassendiagramm<br />

angegeben. In Listing 3.3 ist anhand der angegebenen OCL Vor- <strong>und</strong> Nachbedingung die Transition mit<br />

dem Operationsaufruf start() aus Abbildung 3.3(a) angegeben. Die Vorbedingung isActivityWaiting gibt an,<br />

dass der Zustand des Aktivitätobjekts waiting sein muss. Die Nachbedingung isActivityRunning spezifiziert<br />

die Zustandsänderung auf Zustand running. Zusätzlich ist in Listing 3.3 noch die OCL-Spezifikation für die<br />

Operation finish() angegeben. Analog werden die weiteren Transitionen für die Operationsaufrufe skip(),<br />

fail() <strong>und</strong> cancel() von Abbildung 3.3(a) mit Hilfe von OCL gebildet. Diese werden hier jedoch nicht weiter<br />

angegebenen.<br />

✞<br />

1 context Activity::start()<br />

2 pre isActivityWaiting: state=#waiting<br />

3 post isActivityRunning: state=#running<br />

4<br />

5 context Activity::finish()<br />

6 pre isActivityRunning: state=#running<br />

7 post isActivityDone: state=#done<br />

8<br />

9 context IterationGroup::nextIteration()<br />

10 pre isDoneSkippedOrCanceled: self.activity−>forAll(state=#done or state=#skipped or state=#canceled)<br />

11 post isIGWaiting: self.activity−>forAll(state=#waiting)<br />

✝<br />

Listing 3.3: OCL-Vor- <strong>und</strong> Nachbedingungen für Transitionen im Zustandsdiagramm der Klasse Activity<br />

☎<br />

✆<br />

In Listing 3.3 ist noch die Spezifikation für die Operation nextIteration() spezifiziert. Diese Operation ist wie<br />

im Abschnitt 3.2.1 erwähnt der Klasse IterationGroup zugeordnet. Entsprechend der Zustandsdiagramme<br />

von Abbildung 3.3 besagt die Vorbedingung, dass alle zur Gruppe gehörende Aktivitäten im Zustand<br />

done, skipped oder canceled sein müssen. Die Nachbedingung besagt, dass die Aktivitäten auf waiting<br />

zurückzusetzen sind.<br />

Im Gegensatz zum Automaten von normalen Aktivitäten in Abbildung 3.3(a) haben Iterationsaktivitäten den<br />

Objektlebenszyklus von Abbildung 3.3(b). Vergleicht man die Automaten, können die Vor- <strong>und</strong> Nachbedingungen<br />

für die start()-Operation für die Iteration Klasse gleich bleiben. Die Vor- <strong>und</strong> Nachbedingungen<br />

werden vererbt, so dass für diese Operation keine neuen Bedingungen angegeben werden müssen. Für die<br />

Operation finish() sieht es da anders aus. Setzt man den Automaten in OCL-Vor- <strong>und</strong> Nachbedingungen um,<br />

ergibt sich eine Spezifikation von Listing 3.4.<br />

Schließlich sei hier noch das Design by contract Prinzip [Mey92] im Zusammenhang mit dem Substitutionsprinzip<br />

[LW94] erwähnt. Dieses besagt, dass Objekte der Unterklassen Objekte der Oberklassen<br />

ersetzen können <strong>und</strong> dieses auch für Verhaltenspezifikation gelten soll. Objekte der Unterklassen sollen

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!