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.
38 Deklarative UML metamodellbasierte Workflowmodellierung<br />
den Klassen vom Metamodell in Abbildung 3.2 bereitgestellt werden. Die Aktivitäten werden mit dem<br />
Zustand waiting initialisiert. Daraufhin hat der Nutzer die Möglichkeit, die Aktivität mit dem Aufruf start()<br />
zu starten oder mit skip() zu überspringen. Befindet sich das Aktivitätsobjekt im Zustand running kann es<br />
mit finish() regulär beendet werden. Mit dem Aufruf fail() gibt der Nutzer an, dass während der Ausführung<br />
ein Fehler passiert ist. Nur speziellen Cancel Aktivitäten ist es möglich, sie während der Ausführung<br />
abzubrechen. Ganze Prozesse können mit cancel() abgebrochen werden, wenn es sich um Prozesse vom Typ<br />
CancelProcess handelt.<br />
Gr<strong>und</strong>sätzlich sind Aktivitätsobjekte der Klassen Activity, Cancel <strong>und</strong> der Unterklassen von Decision nur<br />
einmal ausführbar. Die Operationen, die von der Klasse Activity bereitgestellt werden, erlauben kein Zurücksetzen<br />
des Zustandes, was ein wiederholtes Ausführen ermöglichen würde. Die dafür vorgesehene Operation<br />
nextIteration() ist der Klasse IterationGroup zugeordnet. Wenn sich die Aktivität im Zustand done, skipped<br />
oder canceled befindet <strong>und</strong> einer Iterationsgruppe zugeordnet ist, ist darüber eine wiederholte Ausführung<br />
möglich. Diese Operation nextIteration() ist jedoch weiteren Ausführungsbedingungen unterworfen, die in<br />
Abschnitt 3.2.3.1 näher erläutert werden. Es sind hier nur geordnete Iterationsdurchläufe möglich. D.h. es ist<br />
erst dann ein neuer Iterationsdurchlauf erlaubt, wenn bei allen in der Gruppe enthaltenen Aktivitätsobjekten<br />
die Transition in den Zustand waiting nach den State Charts von Abbildung 3.3 möglich ist.<br />
Aktivitäten, die inhärent ohne explizites Zurücksetzen der Aktivität mehrfach ausgeführt werden können,<br />
sind Iteration-Aktivitäten. Deren Verhalten ist im Zustandsdiagramm von Abbildung 3.3(b) verdeutlicht.<br />
Mit den Operationsaufrufen start() <strong>und</strong> finish() können beliebig viele Iterationen durchgeführt werden. Ein<br />
Iterationszyklus ist dafür im Sequenzdiagramm von Abbildung 4.6(b) angegeben. Bei einem Iterationszyklus<br />
kann statt finish() auch fail() aufgerufen werden. Die Ausführungssemantik ist damit folgende: Mit dem<br />
fail()-Aufruf schlägt nicht die Iterationsaktivität an sich fehl, sondern der aktuell ausgeführte Zyklus. Somit<br />
kann z.B. wenn ein Zyklus fehlerhaft beendet wurde, ein weiterer ausgeführt werden, der dann die komplette<br />
Aktivität zum Erfolg führt.<br />
Iterationen werden schließlich explizit über die Methode finish() beendet, wenn sich das Objekt im Zustand<br />
waiting befindet. Der Aufruf cancel() ist nur indirekt über die Klasse CancelProcess möglich. Mit skip()<br />
können Iterationen nur übersprungen werden, wenn noch kein Iterationszyklus durchlaufen wurde, was durch<br />
den zugeordneten OCL-Guard [self.iteration->isEmpty()] ausgedrückt wird. Falls schon ein Iterationszyklus<br />
initiiert wurde, ist ein Aktivitätsobjekt, das diesen repräsentiert, über die Assoziation iteration verb<strong>und</strong>en.<br />
Bereits beendete, übersprungene oder abgebrochene Iterationen können nach dem Zustandsdiagramm von<br />
Abbildung 3.3(b) genauso wie normale Aktivitäten über die Methode nextIteration() wieder zurückgesetzt<br />
werden, wenn sie sich in einer Iterationsgruppe befinden.<br />
3.2.3 OCL-Zusicherungen<br />
Im Gegensatz zu allen anderen bekannten Metamodellansätzen zur Workflowmodellierung (s. Abschnitt<br />
2.5.3) wurde in DMWM umfangreich <strong>und</strong> zu verschiedenen Zwecken von OCL-Constraints Gebrauch<br />
gemacht. Insbesondere wird OCL zur Definition der operationalen Semantik der neu entwickelten Workflowsprache<br />
genutzt, um eine weitgehend plattformunabhängige, deklarative Spezifikation zu erreichen.<br />
Zunächst wird zur Definition der operationalen Semantik in Abschnitt 3.2.3.1 beschrieben, wie die in<br />
Abbildung 3.3 gezeigten Zustandsautomaten anhand von OCL-Vor- <strong>und</strong> Nachbedingungen ausgedrückt<br />
werden. Daraufhin werden in Abschnitt 3.2.3.2 die Gr<strong>und</strong>lagen <strong>und</strong> OCL-Hilfsfunktionen aus dem Metamodell<br />
erklärt, die benötigt werden, um die temporalen Beziehungen mit OCL zu spezifizieren. Hierzu<br />
gehört u.a. die Berechnung von transitiven Hüllen im Zusammenhang mit reflexiven Assoziationen aus<br />
dem UML-Klassendiagramm. Schließlich werden in Abschnitt 3.2.3.3 noch exemplarisch temporale Bezie-