endpunkt uml diagramm

Transcription

endpunkt uml diagramm
Konsistenz und
Werkzeugunterstützung von
Systemspezifikationen in UML
Diplomarbeit von
S TEPHAN S CHUBERT
im Rahmen des Studiengangs
Mathematik mit Studienrichtung Informatik
an der Universität Hannover
Erstgutachter: Prof. Dr. Udo Lipeck
Zweitgutachter: Dipl. Math. Christof Graß-De Iuliis
Hannover, den 25. Juli 1999
Zusammenfassung
Die Unified Modeling Language (UML) ist eine Sprache zur Dokumentation, Analyse,
Entwurf und Spezifikation von Systemen. Ein UML-Modell beschreibt die statischen und
dynamischen Aspekte eines Systems durch mehrere ineinandergreifende Sichten, die aus
verschiedenen Diagrammen bestehen.
In der vorliegenden Arbeit wird vorgestellt, wie mit einem Werkzeug ein UML-Modell
auf Konsistenz überprüft werden kann. Das UML-Metamodell, welches die die Semantik
der UML definiert, wird vorgestellt. Es bildet die Basis für die Identifizierung von Konsistenzbedingungen, die zwischen den Modellelementen eines vom Modellierer erstellten
UML-Modells gelten müssen.
Es wird erläutert, im welchen Rahmen ein Werkzeug den Modellierer bei der Erstellung konsistenter UML-Modelle unterstützen kann. Das kommerzielle UML-Werkzeug
Rational Rose 98 wird vorgestellt und um Konsistenzprüfungen erweitert.
Inhaltsverzeichnis
1
2
Einleitung
1.1 Die Unified Modeling Language . . .
1.2 Historische Entwicklung . . . . . . .
1.3 Ziele der Unified Modeling Language
1.4 Ziele dieser Arbeit . . . . . . . . . .
1.5 Aufbau der Arbeit . . . . . . . . . . .
1.6 Probleme bei der Erstellung der Arbeit
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
8
9
11
11
12
Eine Übersicht
2.1 Dinge in der UML . . . . . . . .
2.1.1 Struktur . . . . . . . . . .
Klasse . . . . . . .
Interface . . . . .
Kollaboration . . .
Anwendungsfall .
Aktive Klasse . . .
Komponente . . .
Knoten . . . . . .
2.1.2 Verhalten . . . . . . . . .
Interaktion . . . .
Zustandsautomat .
2.1.3 Gruppierung . . . . . . .
2.1.4 Anmerkungen . . . . . . .
2.2 Beziehungen . . . . . . . . . . .
2.2.1 Abhängigkeit . . . . . . .
2.2.2 Assoziation . . . . . . . .
2.2.3 Generalisierung . . . . . .
2.2.4 Realisierung . . . . . . .
2.3 Diagramme . . . . . . . . . . . .
2.3.1 Anwendungsfalldiagramm
2.3.2 Klassendiagramm . . . . .
2.3.3 Objektdiagramm . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
14
15
15
15
16
16
17
17
18
18
18
19
19
20
20
20
21
21
22
23
23
23
23
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
INHALTSVERZEICHNIS
2.4
2.5
2.6
3
2.3.4 Interaktionsdiagramme . . . . .
2.3.5 Zustandsdiagramm . . . . . . .
2.3.6 Aktivitätsdiagramm . . . . . . .
2.3.7 Komponentendiagramm . . . .
2.3.8 Einsatzdiagramm . . . . . . . .
Architektur und Sichten . . . . . . . . .
2.4.1 Anwendungsfallsicht . . . . . .
2.4.2 Logische Sicht . . . . . . . . .
2.4.3 Prozeßsicht . . . . . . . . . . .
2.4.4 Komponentensicht . . . . . . .
2.4.5 Verteilungssicht . . . . . . . . .
Vier-Schichten Metamodell-Architektur
Erweiterungsmechanismen . . . . . . .
2.6.1 Stereotypen . . . . . . . . . . .
2.6.2 Eigenschaftswerte . . . . . . .
2.6.3 Zusicherungen . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Metamodell
3.1 Fundament . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Kern . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1 Backbone . . . . . . . . . . . . . . .
Generalisierung . . . . . . . . . . . . . .
Erweiterung und Einschränkung . . . . .
Deskriptor und Vererbungsmechanismus
Instantiierung . . . . . . . . . . . . . . .
Klasse . . . . . . . . . . . . . . . . . . .
Element . . . . . . . . . . . . . . . . .
PresentationElement . . . . . . . . .
ModelElement . . . . . . . . . . . . . .
Namespace . . . . . . . . . . . . . . . .
Constraint . . . . . . . . . . . . . . .
GeneralizableElement . . . . . . . . .
Classifier . . . . . . . . . . . . . . .
Feature . . . . . . . . . . . . . . . . .
StructuralFeature . . . . . . . . . . .
Attribute . . . . . . . . . . . . . . . .
BehavioralFeature . . . . . . . . . . .
Operation . . . . . . . . . . . . . . . .
Method . . . . . . . . . . . . . . . . . .
Parameter . . . . . . . . . . . . . . . .
3.1.1.2 Klassifizierer . . . . . . . . . . . . . .
Class . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
25
26
30
30
30
31
31
31
31
32
32
33
33
34
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
35
37
37
38
40
41
41
42
43
45
45
46
47
47
48
49
51
51
52
53
54
54
55
55
INHALTSVERZEICHNIS
3.2
Interface . . . . . . . . . . . . .
DataType . . . . . . . . . . . . . .
Node . . . . . . . . . . . . . . . .
Component . . . . . . . . . . . . .
3.1.1.3 Assoziation und Generalisierung
Relationship . . . . . . . . . . .
Association . . . . . . . . . . . .
AssociationEnd . . . . . . . . . .
AssociationClass . . . . . . . .
Generalization . . . . . . . . . .
Flow . . . . . . . . . . . . . . . .
3.1.1.4 Abhängigkeiten . . . . . . . . .
Dependency . . . . . . . . . . . .
Abstraction . . . . . . . . . . . .
Usage . . . . . . . . . . . . . . . .
Permission . . . . . . . . . . . .
3.1.1.5 Kommentar . . . . . . . . . . .
3.1.2 Erweiterungsmechanismen . . . . . . . . .
Stereotype . . . . . . . . . . . .
Modelelement . . . . . . . . . . .
Constraint . . . . . . . . . . . .
TaggedValue . . . . . . . . . . . .
3.1.3 Datentypen . . . . . . . . . . . . . . . . .
Primitive . . . . . . . . . . . . .
Structure . . . . . . . . . . . . .
Enumeration . . . . . . . . . . . .
ProgrammingLanguageType . . . .
Mapping . . . . . . . . . . . . . .
Name . . . . . . . . . . . . . . . .
LocationReference . . . . . . . .
Multiplicity . . . . . . . . . . .
Expression . . . . . . . . . . . .
Verhaltenselemente . . . . . . . . . . . . . . . . .
3.2.1 Allgemeines Verhalten . . . . . . . . . . .
3.2.1.1 Signale . . . . . . . . . . . . . .
Signal . . . . . . . . . . . . . . .
Exception . . . . . . . . . . . . .
Reception . . . . . . . . . . . . .
3.2.1.2 Aktion . . . . . . . . . . . . . .
Action . . . . . . . . . . . . . . .
ActionSequence . . . . . . . . . .
CreateAction . . . . . . . . . . .
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
56
56
56
56
57
62
62
63
65
66
66
67
67
68
69
70
71
71
72
73
74
75
75
75
76
76
77
77
77
79
79
79
80
82
82
82
83
83
84
84
86
86
5
INHALTSVERZEICHNIS
3.2.2
3.2.3
DestroyAction . . . . . . . . . . . . . . . . . . . . . .
TerminateAction . . . . . . . . . . . . . . . . . . . . .
CallAction . . . . . . . . . . . . . . . . . . . . . . . .
ReturnAction . . . . . . . . . . . . . . . . . . . . . . .
AssignmentAction . . . . . . . . . . . . . . . . . . . .
SendAction . . . . . . . . . . . . . . . . . . . . . . . .
UninterpretedAction . . . . . . . . . . . . . . . . . .
3.2.1.3 Exemplare und Links . . . . . . . . . . . . . . . . . .
Instance . . . . . . . . . . . . . . . . . . . . . . . . . .
DataValue . . . . . . . . . . . . . . . . . . . . . . . . .
Object . . . . . . . . . . . . . . . . . . . . . . . . . . .
ComponentInstance . . . . . . . . . . . . . . . . . . . .
NodeInstance . . . . . . . . . . . . . . . . . . . . . . .
Linkobject . . . . . . . . . . . . . . . . . . . . . . . .
Stimulus . . . . . . . . . . . . . . . . . . . . . . . . . .
Link . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LinkEnd . . . . . . . . . . . . . . . . . . . . . . . . . .
Kollaborationen . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notation der Rollen in einer Kollaboration . . . . . . . . .
Interaktion . . . . . . . . . . . . . . . . . . . . . . . . .
Botschaften und Stimuli in einem Kollaborationsdiagramm
Sequenzdiagramm . . . . . . . . . . . . . . . . . . . . .
Collaboration . . . . . . . . . . . . . . . . . . . . . .
Interaction . . . . . . . . . . . . . . . . . . . . . . . .
Message . . . . . . . . . . . . . . . . . . . . . . . . . .
ClassifierRole . . . . . . . . . . . . . . . . . . . . . .
AssociationRole . . . . . . . . . . . . . . . . . . . . .
AssociationEndRole . . . . . . . . . . . . . . . . . . .
Zustandsautomaten . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.1 Ereignisse . . . . . . . . . . . . . . . . . . . . . . . .
Event . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SignalEvent . . . . . . . . . . . . . . . . . . . . . . . .
CallEvent . . . . . . . . . . . . . . . . . . . . . . . . .
TimeEvent . . . . . . . . . . . . . . . . . . . . . . . . .
ChangeEvent . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.2 Zustandsautomat . . . . . . . . . . . . . . . . . . . . .
StateMachine . . . . . . . . . . . . . . . . . . . . . . .
CompositeState . . . . . . . . . . . . . . . . . . . . . .
StateVertex . . . . . . . . . . . . . . . . . . . . . . . .
Transition . . . . . . . . . . . . . . . . . . . . . . . .
Guard . . . . . . . . . . . . . . . . . . . . . . . . . . . .
State . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
86
86
86
86
87
87
87
87
89
89
89
89
90
90
90
90
92
92
95
95
97
99
99
100
100
101
101
101
103
103
103
103
104
104
105
106
110
110
110
110
111
INHALTSVERZEICHNIS
.
.
.
.
.
.
.
.
.
.
.
.
.
.
111
111
111
112
113
113
113
116
116
116
117
117
118
118
Werkzeugunterstützung und Konsistenz
4.1 Anforderungen an ein UML-Werkzeug . . . . . . . . . . . . . . . . . . .
4.2 Konsistenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Sinn einer Konsistenzprüfung . . . . . . . . . . . . . . . . . . .
4.2.2 Probleme der (werkzeuggestützten) Konsistenzprüfung . . . . . .
4.2.3 Ein hypothetisches Werkzeug zur Konstruktion konsistenter Modelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.4 Konsistenzprüfung als Informationsproduzent . . . . . . . . . . .
4.3 Rational Rose 98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 UML-Modelle in Rational Rose 98 . . . . . . . . . . . . . . . .
4.3.2 Weitere Merkmale von Rational Rose 98 . . . . . . . . . . . . .
4.3.3 Konsistente UML-Modelle und Rational Rose 98 . . . . . . . . .
4.4 Das Werkzeugmetamodell von Rational Rose 98 . . . . . . . . . . . . . .
4.4.1 Die Spitze der Klassenhierarchie . . . . . . . . . . . . . . . . . .
4.4.2 Diagrammarten . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3 Modellelemente in Klassendiagrammen . . . . . . . . . . . . . .
4.4.4 Modellelemente in Interaktionsdiagrammen . . . . . . . . . . . .
4.4.5 Modellelemente in Zustandsdiagrammen . . . . . . . . . . . . .
4.5 Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1 Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.2 Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.3 Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.4 Assoziationen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.5 Spezielle Assoziationen . . . . . . . . . . . . . . . . . . . . . .
4.5.6 Generalisierungen . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.7 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.8 Realisierungsbeziehungen . . . . . . . . . . . . . . . . . . . . .
119
119
121
124
124
3.2.4
4
SimpleState . . . .
FinalState . . . .
PseudoState . . . .
SyncState . . . . .
SubmachineState .
StubState . . . . .
Aktivitätsgraphen . . . . . .
ActivityGraph . .
SubactivityState
ActionState . . . .
CallState . . . . .
ObjectFlowState .
ClassifierInState
PseudoState . . . .
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
125
128
128
128
131
133
134
134
134
137
139
140
142
142
144
147
150
153
155
157
159
7
INHALTSVERZEICHNIS
4.6
4.7
5
4.5.9 Abhängigkeitsbeziehungen . . .
4.5.10 Signale . . . . . . . . . . . . .
4.5.11 Spezifizierung von Rollen . . .
Interaktionsdiagramme . . . . . . . . .
4.6.1 Klassifiziererrollen und Objekte
4.6.2 Assoziationsrollen und Links . .
4.6.3 Botschaften und Stimuli . . . .
4.6.4 Kontrollfluß . . . . . . . . . . .
4.6.5 Verzweigung und Iteration . . .
Zustandsdiagramme . . . . . . . . . . .
4.7.1 Ereignisse . . . . . . . . . . . .
4.7.2 Aktionen . . . . . . . . . . . .
4.7.3 Transitionen . . . . . . . . . .
4.7.4 Zustände . . . . . . . . . . . .
4.7.5 Zustandsautomaten . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
161
162
164
165
165
167
171
175
177
178
179
182
182
184
186
Benutzerschnittstelle zur Konsistenzprüfung
195
5.1 Möglichkeiten von Rose-Script . . . . . . . . . . . . . . . . . . . . . . . 195
5.2 Strukturierung der Konsistenzprüfungen . . . . . . . . . . . . . . . . . . 197
5.3 Konzept der Benutzerschnittstelle . . . . . . . . . . . . . . . . . . . . . 198
A Realisierung der Benutzerschnittstelle
A.1 Das Skript einer Konsistenzprüfung
A.2 Das Skript eines Auswahldialogs . .
A.3 Entwickelte Skripte . . . . . . . . .
A.3.1 Hilfsfunktionen . . . . . . .
A.3.2 Konsistenzprüfungen . . . .
A.3.3 Auswahldialoge . . . . . . .
A.4 Installation . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
202
202
203
203
203
204
208
208
Kapitel 1
Einleitung
Die ersten drei Abschnitte erläutern, was die Unified Modeling Language ist, ihre historischen Wurzeln und die Ziele, die bei der Entwicklung dieser Modellierungssprache
spezifiziert wurden. Anschließend wird das Ziel dieser Arbeit erklärt und ihr Aufbau
beschrieben. Abschließend wird auf die Probleme bei der Erstellung dieser Arbeit hingewiesen.
1.1
Die Unified Modeling Language
Systeme bestehen „aus einer Menge von Elementen, die über Beziehungen zusammenwirken oder interagieren, um ein bestimmtes Ziel oder einen bestimmten Zweck zu erreichen“ ([Sch95], S. 15). Menschen benutzen zum Verständnis komplexer Systeme
das Prinzip der Abstraktion. „Abstraktion im engeren Sinne heißt ein Denkvorgang,
der vom Einzelnen, Zufälligen, Unwesentlichen absieht und das Allgemeine, Notwendige, Wesentliche heraushebt, um zu wissenschaftlich objektiver Erkenntnis zu gelangen“
([Sch91], S. 4). Das Ziel der Abstraktion von einem System ist die Bildung eines Modells
des Systems, die es dem Menschen erlaubt, die Systemelemente und ihr Zusammenwirken zu verstehen. Allgemein ausgedrückt ist die Unified Modeling Language (UML)
eine Sprache, mit der Modelle von Systemen graphisch beschrieben werden können. Primär dient die UML der Dokumentation, Analyse, Entwurf und Spezifikation von Softwaresystemen - speziell von objektorientierten Systemen. UML ist „nur“ eine (visuelle)
Modellierungssprache, aber kein Softwareentwicklungsprozeß oder gar eine visuelle Programmmiersprache. Der Begriff „unified“ (dt. vereinheitlicht) wird durch die historische
Entwicklung der Sprache begründet.
1.2
Historische Entwicklung
Während der neunziger Jahre wurden eine Vielzahl von Methoden für die Systementwicklung von Software veröffentlicht. Drei der populärsten Methoden waren OMT (Ob-
8
9
KAPITEL 1. EINLEITUNG
ject Modeling Technique, James Rumbaugh u.a., siehe [R+ 93]), Booch (Grady Booch)
und OOSE (Object-Oriented Software Engineering, Ivar Jacobson). Jede dieser Methoden hatte eine eigene Notation und eigene Stärken und Schwächen. Die Weiterentwicklung der einzelnen Methoden führte dazu, daß Konzepte anderer Methoden übernommen wurden. Leider hatte jede Methode noch immer ihre eigene Notation. Diese Zeit
wird durch den Begriff „method war“ beschrieben. Z.B. beschreibt ein gefüllter Kreis in
OMT-Notation einen Kardinalitätsindikator, in Booch-Notation jedoch ein Aggregationssymbol. Wie soll eine Klasse dargestellt werden: Als Wolke (Booch) oder als Rechteck
(OMT)? Welche Darstellung ist besser? Eine Situation die unbefriedigend für alle Beteiligten war, denn eine unterschiedliche Syntax und Semantik führt nicht nur bei Softwareentwicklern zu Kommunikationsschwierigkeiten.
Im Oktober 1994 begannen Grady Booch (Rational Software Corporation) und James
Rumbaugh (der von General Electric zu Rational wechselte) mit der Vereinheitlichung der
Booch und OMT Methoden, dessen Entwurf einer Version 0.8 im Oktober 1995 erschien
und „Unified Method“ hieß.
1995 stieß auch Jakobson (OOSE) zu Rational und OOSE wurde in das Projekt aufgenommen (1996, UML 0.9). Mit mehreren Software-Organisationen, die bereit waren
Ressourcen einzubringen, um eine vollständige UML-Definition auszuarbeiten, wurde ein
UML-Konsortium gegründet (UML 1.0). Im Januar 1997 wurde UML 1.0 bei der OMG
(Object Management Group) zur Standardisierung eingereicht. Das Konsortium wurde
erweitert und eine überarbeitete Version (UML 1.1) wurde im Juli 1997 bei der OMG zur
Standardisierung eingereicht und im November 1997 angenommen. In die Vereinheitlichung gingen nicht nur die Konzepte der Booch, OMT und OOSE Methoden ein, sondern
auch „neue“ Konzepte, z.B. die Statecharts von Harel.
Die Weiterentwicklung der UML wurde von der OMG Revision Task Force (RTF)
übernommen, die im Juni 1998 eine redaktionell überarbeitete Version herausbrachte. Im
Herbst 1998 wurde die Version 1.3 mit einigen technischen Klarstellungen veröffentlicht,
deren endgültige Fassung im Juli 1999 fertiggestellt wurde. Es ist zu erwarten, daß die
UML, wie jede „lebende“ Sprache, laufend weiterentwickelt wird.
1.3
Ziele der Unified Modeling Language
Beim Entwurf der UML gab es mehrere Ziele: (siehe [BRJ99b] und [OMG99])
1. Die Benutzung objektorientierter Techniken zur Modellierung von Systemen vom
Konzept bis zu ausführbaren Teilen.
2. Berücksichtigung der Skalierung von komplexen Systemen.
3. Erzeugung einer Modellierungssprache, die sowohl von Menschen als auch von
Maschinen benutzt werden kann.
1.3. ZIELE DER UNIFIED MODELING LANGUAGE
10
4. Die UML sollte den Benutzern eine leicht zugängliche und ausdrucksstarke visuelle Modellierungssprache bieten, mit der sie Modelle entwickeln und austauschen
können.
UML vereinigt eine Menge von allgemeinen bzw. Kern-Konzepten, die in anderen
Methoden und Tools verwendet werden. Benutzer anderer Methoden können somit
relativ leicht umsteigen und ihre Modelle mit erträglichem Aufwand transformieren.
5. Die UML sollte Erweiterungs- und Spezialisierungsmechanismen enthalten.
Es ist (bzw. war) zu erwarten, daß die UML an neue Bedürfnisse oder spezielle
Bereiche angepaßt werden wird. Dabei ist aber nicht gewollt, den Kern von UML
für jedes Gebiet neu zu definieren oder zu implementieren. Der Kern der UML
sollte nicht mehr als notwendig geändert werden müssen. Die Benutzer sollten in
der Lage sein
• Modelle der meisten Anwendungen mit den allgemeinen Konzepten der UML
zu entwerfen, ohne von den Erweiterungsmechanismen Gebrauch zu machen,
• neue Konzepte und Notationen, die durch den Kern nicht abgedeckt werden,
hinzuzufügen,
• Konzepte und Notationen für besondere Anwendungsbereiche zu spezialisieren.
6. Unabhängigkeit von besonderen Programmiersprachen und Entwicklungsprozessen.
Unabhängigkeit bedeutet, daß man sich nicht auf eine bestimmte Programmiersprache oder einen bestimmten Prozeß festlegen wollte, allerdings bei gleichzeitiger
Minimierung der Schwierigkeiten, die UML mit einer bestimmten Programmiersprache oder einem bestimmten Entwicklungsprozeß anzuwenden.
7. Bereitstellung einer formalen Basis für die UML.
8. Interoperabilität der Werkzeuge.
Interoperabilität verlangt, daß Modelle zwischen verschiedenen Werkzeugen ohne
Informationsverlust ausgetauscht werden können. Damit können sich die Hersteller
von Werkzeugen auf spezielle Funktionen ihrer Software konzentrieren anstatt ihre
Ressourcen auf verschiedene Werkzeuge für verschiedene Modellierungssprachen
zu verteilen.
9. Unterstützung höherer Entwicklungskonzepte wie z.B. Kollaborationen, Frameworks, Muster (pattern) und Komponenten.
10. Integration der besten und bewährten Praktiken.
11
1.4
KAPITEL 1. EINLEITUNG
Ziele dieser Arbeit
Systeme zeichnen sich durch Struktur und Verhalten aus und können durch Modelle beschrieben werden. Ein UML-Modell beschreibt die statischen und dynamischen Aspekte
eines Systems durch mehrere ineinandergreifende Sichten.
In der Anwendungsfallsicht wird das System als black-box betrachtet. Sie beschreibt
relativ grob die Funktionen und Abläufe des Systems, ohne auf deren Realisierung einzugehen. Die logische Sicht beschreibt das Systeminnere. Sie spezifiziert die Systemelemente und ihre gegenseitigen Beziehungen, mit denen die Funktionen und Abläufe der
Anwendungsfallsicht umgesetzt werden. Weitere Sichten beschreiben die Nebenläufigkeit und Synchronisationsmeachnismen des Systems, die Realisierung des Systems durch
Komponenten (Quelltexte, ausführbare Dateien u. ä.) und die Verteilung der Komponenten auf die Hardware des Systems.
Die Sichten bestehen aus Diagrammen, die jeweils einen bestimmten Aspekt des Systems beschreiben. Die UML stellt Diagramme zur Verfügung, die teilweise in mehreren Sichten benutzt werden. Klassendiagramme beschreiben Systemelemente und ihre
Beziehungen, während Interaktionsdiagramme die Interaktion der Systemelemente zur
Erreichung eines bestimmten Ziels darstellen. Mit Zustands- (Statecharts) und Aktivitätsdiagrammen (eine Art Flowchart) können jeweils weitere dynamische Aspekte modelliert
werden. Anwendungsfall-, Komponenten- und Verteilungsdiagramme sind weitere Diagramme, die in den jeweiligen Sichten benutzt werden.
Eine Systemspezifikation in UML besteht also aus einer Vielzahl von Diagrammen,
die jeweils einen bestimmten Aspekt des Systems hervorheben. Ein Ziel dieser Arbeit ist
es, die Zusammenhänge zwischen den Diagrammen und Modellelementen eines UMLModells zu finden, anhand derer sich eine Systemspezifikation in UML auf Konsistenz
(Widerspruchsfreiheit) untersuchen läßt.
Verschiedene Werkzeuge für die Modellierung von System mit der UML sind auf dem
CASE-Toolmarkt verfügbar. Rational Rose 98 ist ein UML-Werkzeug der Rational Software Cooperation (s.o.), welches von verschiedenen Instituten der Universität Hannover
eingesetzt wird. Ein weiteres Ziel dieser Arbeit ist die Untersuchung dieses Werkzeugs.
Wie geht Rational Rose 98 mit der Problematik konsistenter Systemspezifikationen um
und welche Zusammenhänge zwischen den Modellelementen werden auf Konsistenz geprüft? Gegebenenfalls soll Rational Rose 98 um weitere Prüfungen erweitert werden.
1.5
Aufbau der Arbeit
In Kapitel 2 wird ein Überblick über den Sprachumfang der UML gegeben. Es werden
die Sprachelemente, Diagramme und Sichten der UML, aus denen ein UML-Modell besteht und die Erweiterungsmechanismen, mit denen der Sprachumfang der UML erweitert
werden kann, kurz vorgestellt.
In Kapitel 3 wird das Metamodell der UML erläutert. Das Metamodell definiert die
1.6. PROBLEME BEI DER ERSTELLUNG DER ARBEIT
12
Semantik der UML formal und bildet die Basis für die Identifizierung von Konsistenzbedingungen in UML-Modellen.
In Kapitel 4 werden einleitend allgemeine Anforderungen an ein UML-Werkzeug aufgestellt. Anschließend wird definiert, wann ein UML-Modell konsistent ist. Es wird
erläutert, welche Probleme bei der Konsistenzprüfung von UML-Modellen zu beachten
sind. Anhand eines hypothetischen Werkzeugs wird erläutert, wie ein Werkzeug dem
Modellierer bei der Erstellung konsistenter UML-Modelle unterstützen kann und welche
Informationen eine Konsistenzprüfung liefern sollte. Die Modellierungsmöglichkeiten
und Konsistenzprüfungen von Rational Rose 98 werden vorgestellt.
Rational Rose 98 besitzt ein eigenes Metamodell, welches das UML-Metamodell teilweise realisiert. Anhand dieses Metamodells wird erläutert, in welchem Rahmen mit Rational Rose 98 UML-Modelle modelliert werden können und welche Konstrukte Rational
Rose 98 semantisch erkennt. Abschließend werden Konsistenzbedingungen zwischen den
Modellelementen der Klassen-, Interaktions- und Zustandsdiagramme identifiziert.
In Kapitel 5 wird die Erweiterung von Rational Rose um eine Benutzerschnittstelle
für Konsistenzprüfungen beschrieben.
1.6
Probleme bei der Erstellung der Arbeit
Die Komplexität und der formale Grad des Metamodells der UML ist größer als zu Beginn der Arbeit erwartet wurde. Daher mußte nicht nur ein weiteres (optionales) Ziel
der Arbeit, Untersuchung und Realisierung einer Codeerzeugung aus UML-Modellen,
gestrichen werden, sondern auch einige Diagrammarten. Behandelt werden Klassen, Interaktions-, Zustands- und Aktivitätsdiagramme, da zwischen den Modellelementen
dieser Diagrammarten Verbindungen existieren, die sich auf Konsistenz untersuchen lassen.
Das UML-Metamodell, und damit auch die Semantik der UML, beinhaltet selbst Inkonsistenzen. Es gab zwar in relativ kurzen Abständen korrigierte und wenig veränderte
Spezifikationen der UML, zwischen April ’99 und Juni ’99 waren es sieben, die einige
Inkonsistenzen beseitigten, aber auch Veränderungen beinhalteten und damit neue Fragen
aufwarfen. Eine Sprachspezifikation umfaßt mittlerweise knapp 800 Seiten, von denen
ungefähr die Hälfe relevant für diese Arbeit ist. Leider sind die Veränderungen zwischen
den Spezifikationsversionen kaum dokumentiert, so daß als Grundlage für diese Arbeit
die Version 1.3 beta R1 vom April 1999 gewählt wurde.
Der formale Grad des Metamodells und die Semantik der Konzepte ist bei „älteren“
Diagrammarten, z.B. Klassen- und Zustandsdiagrammen hinreichend definiert und klar,
während „neuere“ Diagrammarten, z.B. Sequenz- und Kollaborationsdiagramme, diesem
Anspruch (noch) nicht gerecht werden, d.h. das Metamodell ist in diesem Sinne nicht
vollständig.
Die Identifizierung von Konsistenzbedingungen setzt voraus, daß die Semantik der
Konzepte formal klar definiert ist. Dies ist nicht immer der Fall. Dadurch gibt es auch
13
KAPITEL 1. EINLEITUNG
in der benutzten Literatur, die größtenteils die Anwendung der UML beschreibt, Inkonsistenzen. Teilweise hat es den Anschein, als ob die Autoren (verständlicherweise) nach
dem Motto „Problem erkannt – Gefahr gebannt“ verfahren. Diesen Vorwurf muß sich
auch der Autor dieser Arbeit gefallen lassen. Eine Diskussion dieser Problematik würde zu Veränderungsvorschlägen des Metamodells der UML führen, die den Rahmen der
Arbeit sprengen.
Kapitel 2
Eine Übersicht
Die Unified Modeling Language ist eine Sprache zur Visualisierung, Spezifizierung, Konstruktion und Dokumentation der Bestandteile eines software-intensiven Systems. Das
Vokabular und die Grammatik dieser Modellierungssprache zielen auf die konzeptionelle und physische Darstellung von Softwaresystemen. Die graphische Darstellung von
(komplexen) Zusammenhängen erleichtert das Verständnis („ein Bild sagt mehr als tausend Worte“) und die Kommunikation über Grenzen (Programmiersprache, Sprache, Vokabular1 ) hinweg. Die UML ist aber mehr als eine reine Ansammlung von graphischen
Symbolen. Hinter jedem Symbol der UML verbirgt sich eine wohldefinierte Semantik,
so daß ein Entwickler ein Modell erstellen kann, welches ein anderer Entwickler (oder
ein Werkzeug) eindeutig identifizieren kann ([BRJ99a], Seite 15). In diesem Kontext bedeutet Spezifizierung die Erstellung präziser, eindeutiger und vollständiger Modelle. Die
Abbildung solcher Modelle auf eine Programmiersprache ermöglicht (unter bestimmten
Voraussetzungen) Codeerzeugung (forward engineering). Die UML unterstützt die Dokumentation von Softwaresystemen durch Diagramme, die bestimmte Sichten auf ein
System oder Phasen repräsentieren.
Das Vokabular der UML besteht aus Dingen, Beziehungen und Diagrammen (2.1 bis
2.3). Dinge sind die Grundbausteine in einem Modell, Beziehungen verbinden diese Dinge miteinander und Diagramme stellen durch Gruppierung bestimmter Dinge und deren
Beziehungen einen Aspekt des Systems dar. Eine Sicht auf das System besteht aus mehreren Diagrammen (2.4). Die UML ist in ein Schichtenmodell (2.5) eingebettet und besitzt
Erweiterungsmechanismen, mit denen die Sprache selbst, in einem gewissen Rahmen,
erweitert werden kann (2.6).
2.1
Dinge in der UML
In der UML gibt es vier Arten von Dingen, mit denen ein System beschrieben werden
kann: strukturelle Dinge (2.1.1), Dinge, mit denen das Verhalten beschrieben wird (2.1.2),
1
Wittgenstein: „Die Grenzen meiner Sprache sind die Grenzen meiner Welt“
14
15
KAPITEL 2. EINE ÜBERSICHT
Dinge, die der Gruppierung von Dingen dienen(2.1.3) und Anmerkungen (2.1.4).
2.1.1 Struktur
Strukturelle Dinge sind die Substantive der UML. Sie repräsentieren konzeptionelle oder
physische Elemente eines Systems und sind meist statischer Natur. Insgesamt gibt es
sieben Arten von strukturellen Elementen.
Klasse Eine Klasse beschreibt eine Menge von Objekten, die sich durch gleiche Struktur (Attribute und Beziehungen), gleiches Verhalten (Operationen) und die gleiche Semantik auszeichnen.
Eine Klasse wird als Rechteck mit ihrem Namen und optional mit ihren Attributen
und Operationen dargestellt (Abb. 2.1).
Klassenname
Attribut : Typ = Initialwert
Operation(Argumentliste) : Rückgabewert
Abbildung 2.1: Notation einer Klasse
Interface Ein Interface (Schnittstelle) ist eine Sammlung von Operationssignaturen (Name, Argumente, Rückgabetyp), die einen Dienst einer Klasse oder einer Komponente beschreiben. Die Operationen des Interface werden von der Klasse bzw. der Komponente
realisiert. Ein Interface beschreibt somit das extern sichtbare Verhalten einer Klasse bzw.
Komponente.
Ein Interface kann auf zwei Arten dargestellt werden:
1. Das Interface wird als Kreis zusammen mit dem Namen des Interface dargestellt.
Der Kreis wird mit dem Element verbunden, welches die Operationen des Interface
realisiert (Abb. 2.2). Diese Interfacedarstellung wird auch „Lolli“ genannt.
Kunde
name
adresse
speichern()
speicherbar
Abbildung 2.2: Darstellung eines Interface ohne Operationssignatur.
2.1. DINGE IN DER UML
16
2. Alternativ kann ein Interface in einem Klassenrechteck dargestellt werden (Abb.
2.3). Damit sich ein Interface von einer regulären Klasse unterscheidet, wird das
Klassenrechteck mit «interface», einem Stereotyp (siehe Seite 33), markiert. Die
Verbindung zwischen dem Interface und der Klasse wird durch eine Realisierungsbeziehung (siehe Seite 22) hergestellt.
Kunde
name
adresse
speichern()
<<Interface>>
speicherbar
speichern()
Abbildung 2.3: Ausführliche Darstellung eines Interfaces mit Operationssignatur.
Das UML-Interfacekonzept gleicht dem Interfacekonzept von Java. In Java werden
Interfaces ebenfalls durch Klassen realisiert.
Kollaboration Eine Kollaboration definiert einen Kontext für eine Interaktion und besteht aus Rollen, die von Elementen (z.B. Klassen) gespielt werden, und Beziehungen
zwischen den Rollen. Die Rollen und ihre Beziehungen werden benutzt, um ein kooperatives Verhalten darzustellen, das größer ist als die Summe der einzelnen Elemente, d.h. in
einer Kollaboration wird die Bewältigung einer Aufgabe beschrieben, zu der ein einzelnes Element nicht in der Lage ist. Eine Kollaboration hat also nicht nur eine strukturelle,
sondern auch eine verhaltensorientierte Dimension. Kollaborationen stellen die Implementierung von Mustern dar, aus denen ein System gebildet wird.
Dargestellt wird eine Kollaboration als Ellipse mit einer gestrichelten Linie, die normalerweise nur ihren Namen enthält (Abb. 2.4). Diese Darstellung ist meistens ein Platz-
Kollaborationsname
Abbildung 2.4: Kollaborationsnotation
halter für ein Interaktionsdiagramm (Seite 23), welches die notwendige Struktur und das
Verhalten zur Erfüllung der Aufgabe der Kollaboration ausführlicher darstellt.
Anwendungsfall Ein Anwendungsfall ist eine Beschreibung einer Menge von Abläufen, die ein System ausführt und die dem Benutzer (Anwender, aber auch ein externes
System) ein wahrnehmbares Ergebnis liefert. Anwendungsfälle werden benutzt um das
17
KAPITEL 2. EINE ÜBERSICHT
Verhalten eines Systems zu strukturieren, ohne auf die Realisierung des Verhaltens einzugehen. Das System wird hierbei als „black box“ betrachtet. Realisiert werden Anwendungsfälle durch Kollaborationen, d.h. durch die Zusammenarbeit mehrerer Elemente.
Ein Anwendungsfall wird als Ellipse mit dem Namen des Anwendungsfalls (Abb.
2.5) in einem Anwendungsfalldiagramm (z.B. Abb. 2.17, Seite 24) dargestellt. Die Abläufe selbst werden z.B. durch strukturierten Text oder mit Hilfe von Interaktions- und
Aktivitätsdiagrammen (Seite 26) spezifiziert.
Bestellung aufnehmen
Abbildung 2.5: Anwendungsfallnotation
Aktive Klasse Eine aktive Klasse ist eine spezielle Klasse, deren Objekte einen Prozeß
oder Thread oder mehrere Prozesse oder Threads besitzen, d.h. ihre Objekte repräsentieren Elemente, die nebenläufig ausgeführt werden können.
Eine aktive Klasse wird wie eine Klasse in einem Klassenrechteck dargestellt, welches
zur Unterscheidung von normalen Klassen fett umrandet wird (Abb. 2.6).
EreignisManager
aussetzen( )
verwerfem( )
Abbildung 2.6: aktive Klasse
Komponente Eine Komponente ist ein physisches und austauschbares Teil eines Systems, welches die physische Gruppierung der Realisierung logischer Elemente (z.B.
Klassen und Kollaborationen) repräsentiert.
Eine Komponente wird als Rechteck mit Streifen dargestellt (Abb. 2.7).
Ereignis
Manager.java
Abbildung 2.7: Komponente
2.1. DINGE IN DER UML
18
Knoten Ein Knoten ist ein physisches Element eines Systems und stellt meist einen
Computer mit Prozessor und Speicher dar. Ein Computer mit mehreren Prozessoren kann
durch mehrere Knoten modelliert werden. Mit Hilfe der Knoten kann z.B. die Topologie
des Rechnernetzes modelliert werden (Abb. 2.8). Den Knoten können Komponenten
zugeordnet werden.
Applikationsserver
Workstations
100 Mb Ethernet
100 Mb Ethernet
switching
Hub
10 Mb Ethernet
100 Mb Ethernet
Datenbankserver
PCs
Abbildung 2.8: Mit Knoten kann die Topologie eines Systems dargestellt werden
2.1.2
Verhalten
Verhaltensweisen beschreiben die dynamischen Aspekte eines Systems. Sie sind die Verben der Sprache. Insgesamt gibt es zwei grundlegende Arten von Verhaltensweisen in
der UML, welche die Dynamik eines Systems beschreiben: Interaktionen und (endliche)
Automaten.
Interaktion Eine Interaktion ist eine Menge von Botschaften (messages), die von Objekten in einem, durch eine Kollaboration bestimmten, Kontext ausgetauscht werden, um
ein bestimmtes Ziel oder einen bestimmten Zweck zu erfüllen. Mit einer Interaktion läßt
sich das Verhalten einer Gruppe von Objekten oder einer Operation spezifizieren. Der
Empfang einer Botschaft führt bei dem empfangenen Objekt zur Ausführung eines Verhaltens. Dies ist meist eine Operation des empfangenden Objekts, die z.B. Beziehungen
zu anderen Objekten modifiziert, Werte verändert oder Botschaften an andere Objekte
verschickt.
Eine Botschaft wird als Pfeil, gerichtet vom Sender zum Empfänger, dargestellt (Abb.
2.9). Die zu übermittelnde Information ist meistens ein Operationsname inklusive optionaler Argumente.
Chart Name : New Sequence Diagram
Chart Filename : C:\Home\Stephan\DA\VUML\seqUntitled4.Vob
Chart Type : UML Sequence Diagram
19
KAPITEL 2. EINE ÜBERSICHT
EventManager
«create»
Druckvorschau : Window
display
Abbildung 2.9: Botschaften in einem Sequenzdiagramm
Zustandsautomat Ein Zustandsautomat (endlicher Automat) beschreibt ein Verhalten,
das sowohl die möglichen Folgen von Zuständen eines Objekts spezifiziert, welches dieses in seiner Existenz als Reaktion auf Ereignisse durchläuft, als auch die Reaktion auf
diese Ereignisse. Mit Zustandsautomaten kann das Verhalten einer einzelnen Klasse oder
einer Operation spezifiziert werden.
Zustände werden als Rechtecke mit abgerundeten Ecken dargestellt, die den Namen
des Zustands enthalten (Abb. 2.10). An der Darstellung eines Automaten sind meistens
weitere Elemente beteiligt: Zustandsübergänge (Transitionen) als gerichtete Pfeile, Ereignisse (Auslöser eines Zustandsübergangs) und Aktivitäten als Reaktion auf einen Zustandsübergang.
satt / an den Schreibtisch setzen
essen
arbeiten
hungrig / Essen organisieren
Abbildung 2.10: Vereinfachte Darstellung der Zustände eines Diplomanden während der
Diplomarbeit
Die Zustandsautomaten bzw. Diagramme der UML basieren auf den Statecharts von
Harel. Ein UML-Zustandsautomat kann Zustände besitzen, die selbst als Zustandsautomaten angesehen werden können.
2.1.3
Gruppierung
Zur Organisation eines Modells in überschaubare Gruppen bietet die UML einen Paketmechanismus an. Ein Paket beinhaltet beliebige (logisch zusammengehörende) Modellelemente und kann somit ein Teilsystem darstellen. Die Organisation in Pakete ist allerdings nur rein konzeptionell, für die physische Aufteilung sind Komponenten und Knoten
zuständig.
Dargestellt wird ein Paket als Akte mit Reiter und dem Namen des Pakets. Alternativ
kann auch der Inhalt des Pakets dargestellt werden (Abb. 2.11).
2.2. BEZIEHUNGEN
20
applet
(from java)
+ Applet
+ AppletStub
+ AppletContext
+ AudioClip
Abbildung 2.11: Das Java-Package „applet“
2.1.4
Anmerkungen
Benutzerschnittstelle
siehe GUI.DOC
Abbildung 2.12: Notiz
Die UML kennt eine Hauptart von Anmerkungen: Notizen bzw. Kommentare. Diagramme, aber auch einzelne Modellelemente, können in der UML mit einer Notiz versehen werden.
Eine Notiz wird als Rechteck mit Eselsohr dargestellt (Abb. 2.12), welches weitere
Informationen zu einem oder mehreren Elementen enthält. Eine Notiz kann jede beliebige
Kombination von Text und Graphik enthalten, z.B. eine Web-Adresse (URL) oder ein
Verweis auf ein Dokument. Notizen geben dem Modellierer die Möglichkeit, die Modelle
mit Informationen zu versehen, die sich nicht oder nur schwer in UML ausdrücken lassen.
Der Informationsinhalt selbst hat in der UML allerdings keine Semantik.
2.2
Beziehungen
Es gibt vier Arten von Beziehungen in der UML: Abhängigkeit, Assoziation, Generalisierung und Realisierung. Von diesen Arten existieren weitere Abwandlungen und Spezialisierungen.
2.2.1
Abhängigkeit
Eine Abhängigkeit ist eine semantische Beziehung zwischen zwei Modellelementen, bei
denen sich Änderungen der Spezifikation des unabhängigen Elements auf das abhängige
Element auswirken können. Eine Abhängigkeit wird als gestrichelte Linie dargestellt, die
optional gerichtet und benannt ist (Abb. 2.13).
21
KAPITEL 2. EINE ÜBERSICHT
Paket-A
Paket-B
Abbildung 2.13: Paket-A ist abhängig von Paket-B
2.2.2 Assoziation
Eine Assoziation ist eine strukturelle Beziehung zwischen Klassen. Sie beschreibt eine
Menge von Objektbeziehungen, die sich durch eine gemeinsame Struktur und Semantik auszeichnen. Eine Aggregation ist eine spezielle Assoziation, welche eine „GanzesTeile“-Beziehung beschreibt. Eine Assoziation wird als Linie dargestellt, die optional
gerichtet, benannt wird und weitere Beschriftungen, wie z.B. Kardinalität und Rollennamen, enthalten kann (Abb. 2.14).
Person
Person
1..*
Arbeitgeber
Firma
*
Abbildung 2.14: Eine Person (in der Rolle als Angestellter) kann beliebig vielen Firmen
zugeordnet werden. Einer Firma (in der Rolle als Arbeitgeber) muß mindestens ein Angestellter zugeordnet sein. In dieser Beziehung spielt ein
Objekt der Klasse „Person“ die Rolle „Angestellter“ und entsprechend
ein Objekt der Klasse „Firma“ die Rolle „Arbeitgeber“. Der Rollenname
„Arbeitgeber“ wird als Pseudoattribut der Klasse „Person“ bezeichnet,
da der „Arbeitgeber“ als Merkmal einer Person angesehen werden kann.
2.2.3 Generalisierung
Eine Generalisierung (auch Vererbung genannt) ist eine Beziehung einer allgemeinen
und einer spezielleren Spezifikation eines Modellelements, in der Exemplare (Instanzen)
eines spezialisierten Elements (Sub-Element, child) durch Exemplare des verallgemeinerten Elements (Super-Element, parent) substituiert werden können. Das Sub-Element
„erbt“ auf diese Weise die Struktur und das Verhalten des allgemeineren Elements. Das
Sub-Element kann die Struktur und das Verhalten unter der Prämisse der Substituierbarkeit spezialisieren. Dieses Substitutionsprinzip garantiert, daß überall dort, wo ein
Exemplar eines allgemeinen Modellelements erwartet wird, auch ein Exemplar eines spezielleren Modellelements verwendet werden kann.
Dargestellt wird eine Generalisierung als durchgezogene Linie mit einem Dreieck als
Spitze, welches auf das allgemeinere Element zeigt (Abbildung 2.15).
2.2. BEZIEHUNGEN
22
Window
position
open()
close()
move()
display()
MessageBox
FileSelectionBox
Abbildung 2.15: Generalisierung: MessageBox und FileSelectionBox sind Unterklassen
der Klasse Window mit spezielleren Eigenschaften als die Klasse Window, können aber überall dort eingesetzt werden, wo ein Objekt der
Klasse Window erwartet wird.
2.2.4 Realisierung
Eine Realisierung stellt eine semantische Beziehung zwischen Klassifizierern (z.B. Klassen, Interfaces, Komponenten) dar, bei der ein Klassifizierer etwas spezifiziert und der andere diese Spezifikation umsetzt (Vertragscharakter). Realisierungsbeziehungen können
zwischen Interfaces und Klassen/Komponenten oder zwischen Anwendungsfällen und
Kollaborationen existieren.
Dargestellt wird eine Realisierung als gestrichelte Linie mit einem Dreieck als Spitze,
welche auf das spezifizierende Modellelement zeigt (Abb. 2.16).
Kunde
name
adresse
speichern()
<<Interface>>
speicherbar
speichern()
Abbildung 2.16: Realisierung: Die Klasse „Kunde“ realisiert das Interface „speicherbar“.
Eine Realisierung beinhaltet eine Abhängigkeit (die Klasse ist vom Interface abhängig) und eine Übertragung von Eigenschaften zwischen
den beteiligten Elementen (die Klasse „erbt“ die Operationssignaturen
des Interface). Als graphische Darstellung einer Realisierungsbeziehung
ist die Kreuzung der Darstellungen von Abhängigkeits- und Realisierungsbeziehung gewählt worden.
23
2.3
KAPITEL 2. EINE ÜBERSICHT
Diagramme
Ein Diagramm wird benutzt, um ein System aus einer bestimmten Sicht und unter einem
bestimmten Aspekt zu betrachten. Einige Diagramme können in verschiedenen Sichten
(siehe 2.4) benutzt werden, so daß sich hieraus Zusammenhänge zwischen den unterschiedlichen Sichten modellieren lassen. In der UML sind die folgenden neun Diagramme definiert.
2.3.1 Anwendungsfalldiagramm
Ein Anwendungsfalldiagramm (use case diagram) zeigt die Beziehungen zwischen Anwendungsfällen (use cases) und Akteuren (actors). Anwendungsfalldiagramme stellen
die statische Anwendungsfallsicht eines Systems dar. Mit Anwendungfalldiagrammen
wird das Systemverhalten organisiert und modelliert. (Abb. 2.17).
Anwendungsfälle beschreiben das Systemverhalten aus der Sicht von Akteuren (meist
Benutzer, aber auch andere Systeme), die sich in der Systemumwelt befinden und diese
Anwendungsfälle benutzen (Abb. 2.17). Anwendungsfälle werden durch Abläufe beschrieben, die angeben was das System machen soll, nicht wie die Anwendungsfälle implementiert werden. Sie dienen primär der Kommunikation zwischen den Endanwendern
bzw. den Experten des Einsatzbereichs des Systems und den Systementwicklern.
2.3.2 Klassendiagramm
Klassendiagramme sind die in einer objektorientierten Modellierung am häufigsten anzutreffenden Diagramme. Ein Klassendiagramm (Abb. 2.18) besteht im wesentlichen aus
einer Menge von Klassen, Interfaces und ihren Beziehungen. Klassendiagramme zeigen
die statische Entwurfssicht des Systems. Klassendiagramme mit aktiven Klassen zeigen
die statische Prozessicht des Systems.
2.3.3 Objektdiagramm
Ein Objektdiagramm ist eine Instantiierung von Modellelementen eines oder mehrerer
Klassendiagramme. Es enthält Objekte und Links (Exemplare einer Klasse bzw. einer
Assoziation) und zeigt eine statische Momentaufnahme des Systems (Abb. 2.19). Objektdiagramme werden benutzt, um Klassen und Beziehungen exemplarisch darzustellen.
2.3.4 Interaktionsdiagramme
Ein Interaktionsdiagramm besteht aus Objekten und zeigt, wie sie miteinander durch Botschaftenaustausch kommunizieren. Die UML bietet zwei semantisch äquivalente Interaktionsdiagramme, die jeweils einen anderen Aspekt hervorheben. Ein Sequenzdiagramm
zeigt den Botschaftenaustausch zwischen den Objekten zeitlich geordnet (Abb. 2.20),
2.3. DIAGRAMME
24
Auftragsbearbeitung
Bestellung
aufnehmen
MA-Bestellannahme
Kunde
Zahlungseingang
überwachen
Datenbank
MA-Rechnungswesen
Waren ausliefern
MA-Lager
Abbildung 2.17: Anwendungsfalldiagramm. Das Rechteck symbolisiert die Systemgrenzen.
25
KAPITEL 2. EINE ÜBERSICHT
Kunde
name
aktiveBestellungen( )
abgBestellungen( )
besteller
0..1
aktiveBestellung 0..*
eine Bestellung ist immer einem
Kunden zugeordnet. Entweder
als "besteller" oder als "kunde".
0..1 kunde
0..*
abgBestellung
Bestellung
bestDatum: Date
zustand: Bestellzustand
gesamtPreis( )
1 besteht aus
bestellung
BestPosition
menge: Double
position preis: Double
1..*
bestPos
Diese spezielle Form der Assoziation
heißt Komposition.
Sie ist eine Aggregation, bei der die
Teile (BestPosition) vom Ganzen
existenzabhängig sind.
artikel
0..*
1
Artikel
name
bestNr
info
Abbildung 2.18: Klassendiagramm
während ein Kollaborationsdiagramm die strukturelle Organisation der interagierenden
Objekte hervorhebt (Abb. 2.21). Die semantische Äquivalenz der beiden Interaktionsdiagramme bedeutet nicht, daß beide explizit die gleichen Informationen darstellen. Es gibt
Informationen, die nur in jeweils einem Diagramm dargestellt werden. Z.B. wird in einem
Kollaborationsdiagramm die Rückgabe der Kontrolle an ein Objekt nicht explizit gezeigt.
Die wesentliche semantische Information der beiden Diagramme ist jedoch gleich.
2.3.5 Zustandsdiagramm
Ein Zustandsdiagramm (statechart diagram) zeigt einen endlichen Automaten (siehe Seite 19, Abb. 2.10). Ein Zustandsdiagramm wird meistens benutzt, um die Reaktion einer
Klasse (genauer: der Objekte einer Klasse) auf mögliche Ereignisse zu modellieren. Zustandsdiagramme werden nur für Klassen gezeichnet, die mehrere Zustände haben. Es
ist auch möglich, das dynamische Verhalten eines Systems (oder Teilsystems) oder einer
Operation mit Zustandsdiagrammen zu modellieren.
In der UML kann ein Zustand selbst ein Zustandsautomat sein, d.h. ein Zustand kann
2.3. DIAGRAMME
26
KdObj : Kunde
kunde name = Schubert besteller
abgBestellung
BestObj-1 : Bestellung
bestDatum = 01.03.99
zustand = abgeschlossen
aktiveBestellung
BestObj-2 : Bestellung
bestDatum = 25.05.1999
zustand = erfassung
besteht aus
: BestPosition
menge = 1
preis = 99.90
: BestPosition
: BestPosition
: Artikel
name = UML - Das Benutzerhandbuch
bestNr = 3-8273-1486-0
Abbildung 2.19: Objektdiagramm auf Basis des Klassendiagramms (Abb. 2.18)
Unterzustände besitzen (Abb. 2.22). Es ist sogar möglich, einen Zustand aus nebenläufigen Zustandsautomaten zusammenzusetzen.
2.3.6
Aktivitätsdiagramm
Ein Aktivitätsdiagramm ist im wesentlichen ein Flußdiagramm, welches auch nebenläufige Flüsse enthalten kann. Ein Aktivitätsdiagramm ist ein Spezialfall eines Zustandsdiagramms, bei dem der Zustandsautomat größtenteils aus sogenannten Aktivitätszuständen
besteht. In einem Aktivitätsdiagramm findet im Gegensatz zu einem Zustandsdiagramm
das Verhalten innerhalb des Zustands und nicht während eines Zustandsübergangs statt2 .
Der Zustandsübergang in einem Aktivitätsdiagramm findet statt, wenn die Aktivität eines
Zustands beendet ist, d.h. die Beendigung der Aktivität stellt das Ereignis dar.
Aktivitätsdiagramme werden benutzt, um die Befehlssequenz einer Operation oder
2 Mit
der UML können auch Zustandsautomaten modelliert werden, die innerhalb eines Zustands eine
Aktivität ausführen
27
KAPITEL 2. EINE ÜBERSICHT
: ...
KdObj : Kunde
neueBestellung
«create» Bestellung(KdObj) BestObj-2 : Bestellung
setCurrentDate
setKunde(KdObj)
BestObj-2
addAktiveBestellung(BestObj-2)
Abbildung 2.20: Interaktion in einem Sequenzdiagramm
: ...
1.1.2: setKunde(KdObj)
1.1.1: setCurrentDate
1: neueBestellung
{new}
KdObj : Kunde
BestObj-2 : Bestellung
{self}
1.1: Bestellung(KdObj)
{self}
1.2: addAktiveBestellung(BestObj-2)
Abbildung 2.21: Darstellung der Interaktion aus Abb. 2.20 in einem Kollaborationsdiagramm. Die zeitliche Folge der Botschaften kann in dieser Diagrammart
durch sogenannte Sequenznummern gekennzeichnet werden.
C
C
C
2.3. DIAGRAMME
28
C
C
C
Bestellung(kunde)
aktiv
Aufnahme
autorisiere
Autorisierung
autorisiert
lieferbar
vollständig
Warten auf
Vollständigkeit
geliefert
Abbruch/BestellungStornieren
abgeschlossen
BestLöschen
Abbildung 2.22: Zustandsautomat, dessen Zustand „aktiv“ ein Zustandsautomat ist.
29
KAPITEL 2. EINE ÜBERSICHT
[ja]
Neuer Kunde?
[nein]
[nicht gefunden]
Kundendaten suchen
[gefunden]
Kundendaten erfragen
und eingeben
Kundendaten überprüfen
Abbildung 2.23: Dieses Aktivitätsdiagramm modelliert einen Ablauf, wie er z.B. im Anwendungsfall „Bestellung erfassen“ vorkommen könnte.
2.4. ARCHITEKTUR UND SICHTEN
30
einen Ablauf in einem Anwendungsfall zu modellieren (Abb. 2.23).
2.3.7
Komponentendiagramm
Ein Komponentendiagramm zeigt die Organisation und Abhängigkeiten einer Menge von
Komponenten. Da eine Komponente Klassen realisiert, stellt das Komponentendiagramm
eine Abbildung einer logischen Sicht (Klasse) auf eine physische Sicht (Komponente) dar
(statische Implementierungssicht). Abhängigkeiten zwischen den Komponenten zeigen,
ob sich Änderungen in einer Komponente auf andere Komponenten auswirken können.
2.3.8
Einsatzdiagramm
Ein Einsatzdiagramm (auch Verteilungsdiagramm genannt, engl. deployment diagram),
zeigt die physische Architektur der Hard- und Software (statische Einsatzschicht). In
einem Einsatzdiagramm können Computer und andere Geräte sowie ihre Verbindungen
als Knoten (siehe Seite 18, Abb. 2.8) und Linien visualisiert werden. Mit diesen Knoten
sind häufig (ausführbare) Komponenten assoziiert. Verteilungsdiagramme eignen sich zur
Visualisierung eines verteilten Systems.
2.4
Architektur und Sichten
Die Komplexität der Analyse, Entwicklung, Realisierung, Dokumentation und Tests (kurz:
Systementwicklung) eines nicht trivialen Softwaresystems erfordert die Betrachtung eines Systems aus mehreren Perspektiven (z.B. aus einer Black-Box-Sicht oder aus einer
inneren, strukturellen Sicht). Jede in einen Systementwicklungsprozeß involvierte Person (Analysierer, Designer, Tester, Benutzer, Projektmanager) betrachtet das System zu
unterschiedlichen Zeitpunkten unter einem bestimmten Aspekt (z.B. grob konzeptionell
oder detailliert). Die Architektur ist die Entscheidung über (vgl. [BRJ99b], Seite 31):
• die Organisation eines Softwaresystems
• die Auswahl der strukturellen Elemente und ihrer Schnittstellen, aus denen das System zusammengefügt wird
• das Verhalten und die Zusammenarbeit der Elemente
• die Zusammenfügung dieser Elemente in immer größere Teilsysteme
Eine solche Architektur kann durch ineinandergreifende Sichten beschrieben werden.
Eine Sicht ist eine Abstraktion, die Diagramme enthält. Jedes Diagramm wiederum hebt
einen bestimmten Aspekt hervor. So erhält man ein Bild (Modell) des gesamten Systems.
Die Entwickler der UML hatten die folgenden fünf Sichten im Sinn (vgl. [EP98], Seite
15): Anwendungsfallsicht, logische Sicht, Prozeßsicht, Komponentensicht, Verteilungssicht.
31
KAPITEL 2. EINE ÜBERSICHT
2.4.1 Anwendungsfallsicht
Die Anwendungsfallsicht beschreibt die Funktionalität des Systems. Diese Sicht ist für
Kunden, Entwickler und Tester gedacht und wird durch Anwendungsfall-, Interaktions-,
Zustands- und Aktivitätsdiagramme beschrieben. Die Anwendungsfallsicht nimmt unter
den Sichten eine zentrale Stellung ein, da ihr Inhalt die Grundlage für die anderen Sichten
bildet. Ziel der Systementwicklung ist es, die in der Anwendungsfallsicht beschriebene
Funktionalität zu realisieren (neben nicht-funktionalen Eigenschaften). Diese Sicht wird
auch benutzt, um das fertige System anhand der Anforderungen und gewünschten Abläufe zu verifizieren. Die statischen Aspekte dieser Sicht werden durch Anwendungsfalldiagramme und die dynamischen durch Interaktions-, Zustands- und Aktivitätsdiagramme
modelliert.
2.4.2
Logische Sicht
Die logische Sicht (Entwurfssicht) beschreibt wie die in der Anwendungsfallsicht ermittelte Funktionalität zur Verfügung gestellt wird. Diese Sicht ist hauptsächtlich für Entwickler gedacht. Im Gegensatz zur Anwendungsfallsicht zeigt diese Sicht das Innere des
Systems. Sie beschreibt die statische Struktur (Klassen, Objekte und ihre Beziehungen)
und die Kollaboration (Zusammenarbeit) von Systemelementen. Die statische Struktur
wird durch Klassen- und Objektdiagramme beschrieben, die dynamische Sicht wird durch
Zustands-, Aktivitäts- und Interaktionsdiagramme modelliert.
2.4.3
Prozeßsicht
Die Prozeßsicht modelliert mit Hilfe von Prozessen und Threads die Nebenläufigkeit und
Synchronisationsmeachnismen des Systems. Diese Sicht dient primär der Beschreibung
der Performance, Skalierbarkeit und des Durchsatzes des Systems. Die statischen und
dynamischen Aspekte der Sicht werden durch die gleichen Diagramme wie in der logischen Sicht beschrieben, jedoch mit einer Fokussierung auf aktive Klassen, da diese die
Prozesse und Threads darstellen.
2.4.4
Komponentensicht
Die Komponentensicht (Realisierungssicht, Implementationssicht) stellt die Komponenten, aus denen das Systems zusammengestellt wird, und ihre Abhängigkeiten dar. Weiter
beschreibt diese Sicht das Management der Versionsfreigaben (Releases). Die statischen
Merkmale werden in Komponentendiagrammen, die dynamischen Merkmale werden in
Interaktions-, Zustands- und Aktivitätsdiagrammen dargestellt.
2.5. VIER-SCHICHTEN METAMODELL-ARCHITEKTUR
2.4.5
32
Verteilungssicht
Die Verteilungssicht (Einsatzsicht) zeigt die physische Verteilung des Systems. In den
Diagrammen dieser Sicht wird modelliert, wie die Knoten des Systems (Computer und
andere Geräte) verbunden sind und welchen Knoten welche Komponenten zugeordnet
sind. Diese Sicht ist für Entwickler, Tester und Administratoren vorgesehen, und wird
durch Einsatzdiagramme (Verteilungsdiagramme) dargestellt.
2.5
Vier-Schichten Metamodell-Architektur
Die UML ist innerhalb eines vier-Schichten-Modells mit den folgenden Schichten (Abstraktionsebenen) definiert: Meta-Metamodell, Metamodell, Modell und Benutzermodell
(siehe [OMG99], Seite 2-5).
Schicht
MetaMetamodell
Beschreibung
Diese Abstraktionsebene wird
benutzt, um eine Sprache zur
Spezifizierung eines Metamodells zu formalisieren.
Metamodell
Ein Exemplar eines MetaMetamodells. Dieses Exemplar definiert die Sprache zur
Spezifizierung eines Modells.
Anmerkungen
Das Konzept eines „Ding“,
welches alles repräsentiert was
definiert werden kann, wird
spezifiziert. Die Objekte, über
die in dieser Ebene gesprochen
wird heißen z.B. MetaKlasse,
MetaObjekt und MetaAttribut.
Die Semantik dieser Objekte
wird in dieser Schicht festgelegt.
Jedes Konzept dieser Ebene ist
ein Exemplar eines Konzepts
des Meta-Metamodells. Objekte dieser Ebene sind z.B.
Klasse, Attribut, Operation,
Komponente. Mit Hilfe der in
der Meta-Meta-Ebene spezifizierten Sprache wird hier z.B.
festgelegt, was eine Klasse ist.
Auf dieser Abstraktionsebene
wird die UML definiert.
33
KAPITEL 2. EINE ÜBERSICHT
Schicht
Modell
Beschreibung
Ein Metamodellexemplar, welches eine Sprache zur Beschreibung eines Informationsbereichs definiert.
Benutzermodell,
Benutzerobjekte,
Benutzerdaten
Exemplar eines Modells. Es
definiert einen spezifischen Informationsbereich.
Anmerkungen
Diese Schicht besteht aus den
UML Modellen. In dieser Ebene befinden sich die vom Benutzer definierten Modellelemente, z.B. Kunde, getKontostand.
Modelle dieser Ebene werden
häufig Objekt- oder Instanzmodelle genannt. Objekte dieser
Ebene sind z.B. „Schmidt“ und
„Müller“.
Das UML-Metamodell wird nicht durch eine Meta-Meta-Sprache beschrieben, sondern durch die UML selbst, natürliche Sprache und formale Sprache (OCL, Objekt Constraint Language).
Diese vierschichtige Architektur ermöglicht eine Verbindung zu anderen vierschichtigen Architekturen der OMG (Object Management Group), z.B. der OMG Meta-ObjectFacility (MOF).
2.6
Erweiterungsmechanismen
Die Erweiterungsmechanismen sind in der Metamodellebene beschrieben und sind somit
Bestandteil der UML, d.h. die Benutzer der UML können diese Mechanismen benutzen,
ohne von der Existenz der Metaebene zu wissen. Drei Erweiterungsmechanismen sind im
Metamodell beschrieben: Stereotypen, Eigenschaftswerte und Zusicherungen.
2.6.1
Stereotypen
Stereotypen bieten die Möglichkeit, das Vokabular der UML zu erweitern. Unter einem
Stereotyp kann man sich einen Metatyp vorstellen, mit dem (Sprach-) Elemente der UML
auf einer höheren Ebene klassifziert werden. Z.B. könnte man Klassen, die zu einer
Benutzerschnittstelle gehören, mit dem Stereotyp «GUI» markieren. «GUI» bezeichnet
dann eine Klasse mit speziellen Eigenschaften (z.B. existieren ihre Objekte nur zur Laufzeit), bestimmter Semantik und eigener Notation (jedes Stereotyp kann durch ein eigenes
Symbol dargestellt werden). Das Stereotyp «GUI» bezeichnet somit eine andere Art einer
Klasse und ist sogesehen eine Erweiterung des Vokabulars der UML. Da ein Stereotyp auf
einem existierenden Sprachelement basiert, welches im Metamodell definiert sein muß,
sind die Erweiterungsmöglichkeiten durch Stereotypen geringer als die Möglichkeiten
gegenüber einer echten Erweiterung des Metamodells.
2.6. ERWEITERUNGSMECHANISMEN
34
In der einfachsten Form wird das Stereotyp in franz. Anführungszeichen in Kombination mit dem Basiselement dargestellt. So wurde in Abb. 2.3 das Interface als Stereotyp
einer Klasse dargestellt. Alternativ kann das Stereotyp durch ein mit dem Stereotypen
assoziierten Symbol dargestellt werden. Im Falle eines Interface ist dies ein „Lolli“ (Abb.
2.2).
2.6.2
Eigenschaftswerte
Mit Eigenschaftswerten (tagged value, gekennzeichneter Wert) kann man den Modellelementen der UML (inklusive den stereotypisierten) neue Eigenschaften hinzufügen. Ein
Eigenschaftswert ist ein Metadatum. Sein Wert bezieht sich auf das Element selbst, nicht
auf seine Instanzen. In der einfachsten Form wird ein Eigenschaftswert als Zeichenkette,
eingeschlossen von geschweiften Klammern, unter dem Namen des entsprechenden Elements dargestellt. Die Zeichenkette besteht aus einem Namen (tag, Markierung), einem
Trennzeichen „= “und einem Wert. Bei Eindeutigkeit ist der Wert ausreichend.
Beispielsweise können Modellelemente mit einer Markierung „Autor“ versehen werden, dessen Wert den Autor des Modellelements bezeichnet:
{ Autor = Schubert }.
2.6.3
Zusicherungen
Mit Zusicherungen (constraints, Einschränkungen) kann man die Semantik von Modellelementen erweitern oder bestehende Regeln ändern. Eine Zusicherung ist eine Bedingung, die eingehalten werden muß, damit das Modell konsistent bleibt. Ein Zusicherung
Person
Geschlecht : {männlich, weiblich}
+Ehemann
0..1
+Ehefrau
0..1
{self.ehefrau.geschlecht=weiblich and self.eheman.geschlecht=männlich}
Abbildung 2.24: Eine Zusicherung, formuliert in OCL (Object Constraint Language)
wird als Zeichenkette, eingeschlossen von geschweiften Klammern, nahe dem entsprechenden Element dargestellt. Die Zusicherung kann einen beliebigen Text enthalten. Zusicherungen können auch als Ersatz für eine graphische Darstellung benutzt werden (z.B.
wenn das verwendete Werkzeug eine graphische Darstellung nicht unterstützt).
Kapitel 3
Metamodell
Das Metamodell der UML besteht aus ca. 90 Metaklassen, ca. 50 Stereotypen und mehr
als 100 Metaassoziationen. Wegen dieser Komplexität ist das Metamodell hierarchisch in
mehrere logische Pakete aufgeteilt (Abb. 3.1), die jeweils zusammengehörige Elemente
enthalten.
Das Foundation-Paket (Fundament) definiert die Basis der UML. Dieses Paket enthält
die wichtigsten strukturellen Elemente (z.B. Klassen), grundlegende Verhaltensmerkmale
(Operationen und Methoden) und Datentypen, die von der UML benutzt werden. Weiter
werden in diesem Paket die Erweiterungsmechanismen der UML definiert.
Weitere Verhaltenselemente werden im Paket Behavioral Elements definiert: Anwendungsfälle, Kollaborationen, Interaktionen, Zustandsautomaten und Aktivitätsgraphen.
Im Paket Model Management wird spezifiziert, wie Modellelemente z.B. in Pakete
organisiert werden.
Im Rahmen dieser Arbeit werden die wesentlichen Pakete und Konzepte des Metamodells beschrieben. So fehlt neben dem Modell-Management-Paket auch das Konzept
der Schablonen (templates), welches z.B. von C++ benutzt wird. Die Anwendungsfälle
(Paket Use Cases) werden nicht detailliert erläutert, da sie wenig bzw. kaum formale Informationen enthalten, die in anderen Diagrammen und Sichten wiederverwendet werden
können. Die vollständige und offizielle Beschreibung befindet sich in [OMG99] bzw. den
nachfolgenden aktuelleren Dokumenten, die auf der Homepage der UML Revision Task
Force (RTF) (http://uml.systemhouse.mci.com) veröffentlicht werden.
In den folgenden Abschnitten wird vor der Definition der Elemente des Metamodells
jeweils erläutert, welche Informationen auf der Metaebene erfaßt werden müssen.
3.1
Fundament
Abbildung 3.2 illustriert das Fundament der UML. Das Kern-Paket (Core Package) definiert die Basis-Konzepte: Klassifizierer (eine Verallgemeinerung von Klassen, Interfaces, Komponenten, Knoten und Datentypen), strukturelle und dynamische Merkmale von
35
3.1. FUNDAMENT
36
Behavioral Elements
Activity Graphs
Model Management
Collaborations
Use Cases
State Machines
Common
Behavior
Foundation
Core
Extension
Mechanisms
Data Types
Abbildung 3.1: Aufteilung des UML-Metamodells in Pakete. Stärker zusammengehörige
Elemente sind in Pakete zusammengefaßt. Das Paket Model Management
enthält keine weiteren Pakete.
37
KAPITEL 3. METAMODELL
Core
Extension
Mechanisms
Data Types
Abbildung 3.2: Pakete des Fundaments und ihre Abhängigkeiten
Klassifizierern (Attribute, Operationen, Methoden) und Beziehungen (Assoziationen, Generalisierungen, Abhängigkeiten) zwischen Modellelementen. Die Erweiterungsmechanismen der UML (Stereotypen, Zusicherungen und Eigenschaftswerte) werden im Paket
Extension Mechanisms definiert. Das Paket Data Types definiert Datentypen (der Metamodellebene), die zur Definition der UML benutzt werden. Exemplare (engl. Instance)
dieser Datentypen werden von den Benutzern der UML auf der Modellebene verwendet.
3.1.1 Kern
In Abschnitt 3.1.1.1 werden abstrakte Metaklassen definiert, die als Basis für weitere
Metaklassen dienen. Abstrakte Metaklassen sind z.B. ModelElement, Feature (Merkmal) und GeneralizableElement. Sie dienen der Zusammenfassung von gemeinsamen
Merkmalen der Sprachelemente der UML. Das Konstrukt „Klassifizierer“ (Klasse, Interface usw.) wird in Abschnitt 3.1.1.2 konkretisiert. In Abschnitt 3.1.1.3 werden Assoziation und Generalisierung, und in Abschnitt 3.1.1.4 werden Abhängigkeitsbeziehungen
definiert.
3.1.1.1
Backbone
In diesem Abschnitt werden zuerst die Begriffe Klasse und Generalisierung erläutert, da
das Metamodell im wesentlichen aus einer Klassenhierarchie besteht.
Vereinfacht ausgedrückt besteht die UML aus Modellelementen, die graphisch dargestellt werden (z.B. Klassen, Beziehungen zwischen Modellelementen, Operationssignaturen). Die folgenden Erläuterungen und Beispiele zeigen die Komplexität der Zusammenhänge zwischen den Modellelementen der UML, die das Metamodell der UML erfassen
muß.
3.1. FUNDAMENT
38
Generalisierung Eine Klasse dient der Deklaration von Attributen, Operationen und
Methoden1 , die die Struktur und das Verhalten von Objekten2 beschreiben. Eine Generalisierung (Abb. 3.3) ist eine Abstraktionsmöglichkeit, die dazu dient, Ähnlichkeiten
zwischen Klassen durch allgemeinere Klassen zu beschreiben und gleichzeitig ihre Unterschiede zu erhalten. Eine Generalisierung ist eine Relation zwischen einer Klasse und
einer oder mehreren spezialisierten Versionen dieser Klasse. Ein Diskriminator ist ein
Attribut einer Generalisierung, welches die durch die Generalisierung abstrahierte Eigenschaft beschreibt. Eine Generalisierungsbeziehung kann weitere Eigenschaften besitzen,
in Abbildung 3.3 z.B. die Zusicherung disjunkt. Die Klasse, die spezialisiert wird, heißt
Oberklasse und jede spezialisierte Klasse heißt Unterklasse. Synonyme für Oberklasse
sind Basisklasse, Vorfahr, Superklasse und (engl.) parent. Synonyme für Unterklasse
sind Nachkomme, Subklasse, Kind bzw. (engl.) child.
Generalisierungsbeziehungen können auch zwischen anderen Modellelementen (z.B.
Interfaces) bestehen. Die Bezeichnungen gelten dabei entsprechend.
In Abbildung 3.3 ist Viereck eine direkte Oberklasse von Parallelogramm und eine Oberklasse von Rechteck und Quadrat. Umgekehrt ist Parallelogramm eine direkte Unterklasse von Viereck. Rechteck und Quadrat sind weitere Unterklassen von
Viereck.
Bei der Modellierung werden Merkmale wie z.B. Attribute, Operationen und die Beteiligung an Assoziatonen, die für eine Gruppe von Klassen gelten, einer Oberklasse zugewiesen und von den einzelnen (Unter-) Klassen gemeinsam genutzt. Die Unterklassen
„erben“ die Merkmale ihrer Oberklassen. Dieser Mechanismus wird Vererbung genannt.
Vererbung und Generalisierung werden häufig synonym verwandt, hier bezeichnet Generalisierung die Relation und Vererbung den Mechanismus. Andere Synonyme für Generalisierung sind Spezialisierung und Erweiterung. So wird z.B. in der Sprache Java das
Schlüsselwort extends zur Angabe der Oberklasse, von der die Unterklasse erbt, benutzt.
Die Begründung für die Benutzung des Terms „Erweiterung“ erfolgt weiter unten.
In Abbildung 3.3 besitzt die Klasse GeomFigur u.a. die Merkmale istSichtbar,
anzeigen und ist mit der Klasse Punkt assoziiert. Alle Unterklassen von GeomFigur
erben diese Merkmale.
Bei dieser Form der Assoziation wird ein Punktobjekt als existenzabhängiges Teil
einer geometrischen Figur angesehen. Dies bedeutet, daß Punkt ein Merkmal von GeomFigur ist.
Viereck kann direkte Exemplare besitzen, d.h. es kann ein konkretes Exemplar der
Klasse existieren, welches nur die Merkmale von Viereck besitzt (siehe auch Instantiierung, Seite 41). Die Operation berechneFläche ist in der Klasse GeomFigur als
abstract gekennzeichnet, da nicht vorgesehen ist, eine Operation zu implementieren,
welche die Fläche aller geometrischen Figuren berechnet. Daher kann es keine direkten
1 Operationen
und Methoden definieren Verhaltensmerkmale, die ein Objekt einer Klasse besitzt. Eine
Operation deklariert die Signatur eines Verhaltensmerkmals, Methoden implementieren das Merkmal.
2 In der UML bezeichnet ein Objekt ein Exemplar einer Klasse.
39
KAPITEL 3. METAMODELL
GeomFigur
sichtbar : Boolean
Punkt
x : Integer
+Punkt y : Integer
anzeigen()
{abstract}
entfernen()
{abstract}
bewegeRel(x : Integer, y : Integer)
berechneFläche()
{abstract}
istSichtbar() : Boolean
getX() : Integer
getY() : Integer
Diskriminator
Figurenform
{disjunkt}
Ellipse
Dreieck
Viereck
anzeigen()
entfernen()
berechneFläche()
anzeigen()
entfernen()
berechneFläche()
anzeigen()
entfernen()
berechneFläche()
Zusicherung: Eine Instanz der
Oberklasse "GeomFigur"
kann maximal zu einer
Klasse ihrer direkten
Unterklassen gehören, d.h.
nicht gleichzeitig z.B. ein
Dreieck und ein Viereck sein.
Parallelogramm
Kreis
Rechteck
Raute
Quadrat
Abbildung 3.3: Von unten nach oben betrachtet lagern Unterklassen gemeinsame Merkmale in Oberklassen aus. Von oben nach unten betrachtet erben Unterklassen die Merkmale ihrer Oberklassen. Deshalb wird diese Struktur
auch Vererbungshierarchie genannt.
3.1. FUNDAMENT
40
Exemplare der Klasse GeomFigur geben, die aus diesem Grund als abstrakte Klasse bezeichnet wird. Die Unterklassen von GeomFigur können diese Operation implementieren.
So erbt z.B. die Klasse Viereck die Deklaration der Operation berechneFläche und implementiert diese. Klassen mit dieser Eigenschaft werden konkrete Klassen genannt. Ein
direktes Exemplar einer (konkreten) Klasse ist ein indirektes Exemplar dieser Klasse und
aller Oberklassen dieser Klasse.
Das Grundprinzip, welches bei der Konstruktion von Generalisierungsbeziehungen
angewandt wird, heißt Substitutionsprinzip: Ein Exemplar einer Unterklasse kann überall
dort verwendet werden, wo ein Exemplar einer Oberklasse erwartet wird. Dieses Prinzip ermöglicht es, Methoden für eine Oberklasse zu schreiben und diese Methoden auf
Exemplare der Unterklassen anzuwenden. Nach diesem Prinzip sollte in Abbildung 3.3
z.B. die Operation berechneFläche der Klasse Viereck so implementiert werden, daß
sie auf jede Unterklasseninstanz anwendbar ist.
Eine Unterklasse kann eine Methode einer Oberklasse überschreiben, indem sie eine
Operation mit der gleichen Signatur deklariert. Zwei Operationssignaturen sind gleich,
wenn die Operationen den gleichen Namen, den gleichen Rückgabetyp sowie die gleiche
Anzahl und Reihenfolge von Parametertypen besitzen. So überschreibt z.B. die Methode berechneFläche der Klasse Quadrat die Methode ihrer Oberklasse. Dabei sollte
aber nicht die Signatur der Operation (Anzahl und Argumente einer Operation sowie der
Rückgabetyp) verändert werden. Wird die Methode berechneFläche auf ein Objekt der
Klasse Quadrat angewandt, sorgt ein Mechanismus der Implementationssprache dafür,
daß die „richtige“ Methode auf das Objekts angewandt wird (Polymorphismus). Die Bedingung der Beibehaltung der Signatur eines Merkmals (hier Operation) ermöglicht es,
den Programmcode lokal innerhalb einer Klasse zu optimieren, ohne den restlichen Code zu verändern. Daher sollte ein Merkmal niemals so überschrieben werden, daß eine
Inkonsistenz mit der Signatur oder der Semantik des ursprünglich geerbten Merkmals
entsteht. Eine Unterklasse ist eine Spezialisierung ihrer Oberklasse und sollte in jeder
Hinsicht mit ihr kompatibel sein.
Erweiterung und Einschränkung Eine Unterklasse kann den geerbten Merkmalen
neue Merkmale hinzufügen. Dies wird Erweiterung (Synonym für Spezialisierung, s.o.)
genannt. Die Erweiterung ist konsistent mit dem Substitutionsprinzip. So kann z.B. die
Klasse Kreis um das Merkmal radius erweitert werden.
Eine Unterklasse kann auch Vorfahrensmerkmale begrenzen oder einschränken (spezialisieren)3 . So unterliegen z.B. die markanten Punkte eines Quadrats einer stärkeren
Einschränkung als die eines Rechtecks. Diese Einschränkung ist konsistent innerhalb der
Vererbungshierachie, führt aber zu Problemen, wenn man z.B. eine Methode zur nichtmaßstabsgerechten Veränderung einer Figur einführt. So könnte es eine Methode geben,
mit der man einen Punkt eines Rechtecks verschiebt. Wird diese Methode auf ein Quadrat angewandt, kann das Quadrat seine „Quadrateigenschaft“ verlieren. Daher dürfen
3 In
UML werden Einschränkungen Zusicherungen (constraints) genannt
41
KAPITEL 3. METAMODELL
Operationen/Methoden, welche die Einschränkungen einer Klasse verletzen würden, aus
semantischen Gründen nicht zugelassen werden. Eine Einschränkung impliziert, daß eine
Unterklasse unter bestimmten Umständen nicht alle Operationen ihrer Oberklassen erben
kann. Diese Operationen müssen vom Designer spezifiziert werden (vgl.[R+ 93], Seite
78).
Deskriptor und Vererbungsmechanismus Jedes Objekt wird durch einen vollständigen Klassendeskriptor beschrieben. Ein vollständiger Deskriptor enthält eine Beschreibung aller Attribute, Assoziationen und Operationen, die das Exemplar enthält.
In einer objektorientierten Sprache wird die Beschreibung eines Objekts inkrementell aus mehreren Segmenten, entsprechend der Vererbungshierarchie, aufgebaut. Jedes
(generalisierbare) Modellelement enthält eine Liste (Segmentdeskriptor) von Merkmalen
und Beziehungen, die es den geerbten Merkmalen und Beziehungen hinzufügt. Der Vererbungsmechanismus definiert, wie ein Deskriptor aus den Segmentdeskriptoren erzeugt
wird. Jedes Modellelement vererbt Zusicherungen. Klassen vererben u.a. Attribute, Operationen, Methoden und die Teilnahme an Assoziationen. Ein vollständiger Deskriptor
eines Exemplars enthält die Vereinigung des Segment-Deskriptors seiner Klasse mit den
Segment-Deskriptoren der Vorfahrensklassen.
Bei einem Klassifizierer darf kein Attribut in mehr als einem Segment deklariert werden. Eine Methode kann in mehreren Segmenten deklariert werden. Eine Methode eines
Segments überschreibt und ersetzt eine Methode der gleichen Signatur, die durch einen
Vorfahren deklariert wurde. Die Zusicherungen eines vollständigen Deskriptors ergeben
sich entsprechend aus den Zusicherungen der Vorfahren. Sind die Zusicherungen inkonsistent, dann ist es auch das Modell. In jeder Vereinigung der Segmentdeskriptoren einer
Klasse muß zu jeder Methode eine entsprechende Operation existieren. Im Falle einer
konkreten Klasse muß zu jeder Operation des vollständigen Deskriptors eine entsprechende Methode existieren.
Instantiierung Ein Modell dient zur Beschreibung der möglichen Zustände eines Systems und dessen Verhaltens. Der Zustand eines Systems beinhaltet Objekte, Werte und
Links (Verknüpfungen). Eine Instantiierung ist das Erzeugen eines Exemplars (bzw. einer
Instanz). Ein Objekt ist ein Exemplar einer Klasse, ein Wert ist ein Exemplar eines Attributs und ein Link ist ein Exemplar einer Assoziation. Jedes Objekt wird durch einen vollständigen Klassendeskriptor beschrieben. Die Klasse, die diesem Deskriptor entspricht,
ist die direkte Klasse des Objekts. Ebenso hat jeder Link eine direkte Assoziation und
jeder Wert einen direkten Datentyp. Ein Exemplar ist ein direktes Exemplar eines Klassifizierers (z.B. Klasse, Komponente), von dem der vollständige Deskriptor stammt. Ein
Exemplar ist ein indirektes Exemplar dieses Klassifizierers und jeder seiner Vorfahren.
Der Dateninhalt eines Objekts enthält für jedes Attribut des vollständigen Deskriptors
einen Wert. Der Wert muß konsistent zum Typ des Attributs sein.
Der Dateninhalt eines Links enthält eine Liste von Exemplaren, die indirekte Exem-
3.1. FUNDAMENT
42
plare jedes teilnehmenden Klassifizierers des vollständigen Assoziationsdeskriptors sind
(Abb. 3.4).
Quadrat1 : Quadrat
Punkt1 : Punkt
Abbildung 3.4: Visualisierung eines Links. Quadrat1 ist eine indirektes Exemplar von
Quadrat, Rechteck, Parallelogramm, Viereck und GeomFigur
Der Zustand eines Systems ist ein gültiger Systemzustand, wenn jedes Exemplar ein
direktes Exemplar eines Elements des Systemmodells ist und alle Zusicherungen des Modells von den Exemplaren erfüllt werden. Mit den Verhaltenselementen der UML können
Sequenzen gültiger Systemzustände beschrieben werden.
Klasse Eine Klasse deklariert Attribute, Operationen und Methoden, die die Struktur
und das Verhalten von Objekten vollständig beschreiben. Alle Objekte einer Klasse haben
Attributwerte und Operationen, die zum vollständigen Klassendeskriptor passen.
Wenn eine Klasse zur Erzeugung eines neuen Objekts instantiiert wird, wird dieses
Objekt mit einem Attributwert für jedes Attribut aus dem vollständigen Klassendeskriptor
initialisiert. Das Objekt wird ebenfalls mit einer Verbindung zu einer Liste von Methoden
des Klassendeskriptors initialisiert und am Ende wird die Identität des neuen Objekts an
den Erzeuger übermittelt. Die Identität jedes Exemplars in einem wohlgeformten System
ist einmalig und wird automatisch erzeugt.
Wird eine Klasse als root spezifiziert, kann sie keine Unterklasse einer anderen Klasse sein, wird sie als leaf spezifiziert, kann sie keine Oberklasse sein.
Der Gültigkeitsbereich (ownerScope) eines Merkmals einer Klasse gibt an, ob jedes
Objekt einen eigenen Wert für dieses Merkmal besitzt (instance) oder ob es nur einen
Wert des Merkmals für alle Objekte der Klasse gibt (classifier)4 .
Jedes deklarierte Attribut einer Klasse hat eine Sichtbarkeit und einen Typ. Die Sichtbarkeit gibt an, ob das Attribut von Objekten anderer Klassen „gesehen“ und benutzt werden kann. Das Attribut kann für jede Klasse (public), nur für Unterklassen (protected)
oder nur innerhalb der deklarierenden Klasse selbst (private) sichtbar sein.
Der Typ eines Attributs spezifiziert dessen Wertebereich. Ein Attribut kann DefaultWerte deklarieren und festlegen, wie viele Attributwerte mit jedem Attribut verbunden
werden (Kardinalität). Die Modifizierbarkeit der Attributwerte kann angegeben werden. Die Modifizierbarkeit kann uneingeschränkt sein (changeable), unterbunden werden (frozen) oder derart eingeschränkt werden, daß nur noch Attributwerte hinzugefügt
werden können5 (addOnly).
4 classifier
5 Bei
entspricht „static“ in C++.
einer Kardinalität der Attribute > 1.
43
KAPITEL 3. METAMODELL
Für jede Operation werden der Name der Operation, die Typen der Parameter, die
Rückgabetypen sowie ihre Sichtbarkeit angegeben. Eine Operation kann die Spezifikation ihrer Effekte beinhalten. Diese Spezifikation kann auf verschiedene Arten beschrieben
werden, z.B. durch Vor- und Nachbedingungen, Pseudo-Code oder (beliebigen) Text. Zu
einer Operation kann angegeben werden, ob ihre Anwendung den Zustand eines Objekts
ändert (isQuery) und ob die Operation in Unterklassen durch eine andere Methode realisiert werden kann.
Eine Methode realisiert eine Operation, besitzt die gleiche Signatur wie die Operation und einen Rumpf, der die Spezifikation realisiert. Jede Methode implementiert eine
Operation, die in der Klasse oder in einem Vorfahren der Klasse deklariert wurde. Eine
Operation kann mehrfach in den Segmentdeskriptoren der Klasse und ihren Vorfahren deklariert werden. Dabei muß die Beschreibung der Operation, mit Ausnahme der Generalisierungseigenschaften (isAbstract, isRoot, isLeaf) und der isQuery-Eigenschaft,
die von Nachkommen verschärft werden darf, mit der Beschreibung in den Segmentdeskriptoren übereinstimmen. Eine Methode, die eine Operation implementiert, muß die
gleiche Signatur (Name, Parameteranzahl, -folge und -typen) wie die Operation besitzen
und die isQuery-Eigenschaft beachten.
Der einer Klasse in einer Assoziation gegenüberliegende Rollenname kann als Pseudoattribut der Klasse angesehen werden. Für dieses Pseudoattribut wird wie bei einem
normalen Attribut eine Sichtbarkeit spezifiziert. Unter Berücksichtigung dieser Sichtbarkeit wird die Assoziation an Unterklassen vererbt.
Ein Interface ist ein generalisierbares Modellelement, welches eine Sammlung von
Operationssignaturen enthält. Eine Klasse kann Interfaces realisieren. Dies bedeutet, daß
jede Operation aus dem vollständigen Deskriptor eines Interfaces für jedes realisierte Interface im vollständigen Deskriptor der Klasse mit der gleichen Signatur existieren muß.
Ein Interface kann durch mehrere Klassen realisiert werden, d.h. die Operationen eines
Interfaces werden in mehreren Klassen mit der gleichen Signatur deklariert und implementiert.
Eine Klasse kann andere Elemente, z.B. Klassen, Interfaces und Assoziationen, enthalten und ist für diese Elemente ein Namensraum. Der Inhalt einer Klasse, der an eine
andere Klasse vererbt wird, hängt von der Sichtbarkeit (public, protected, private)
der enthaltenen Elemente ab.
Im folgenden werden die Klassen des Backbones (Abb. 3.5) vorgestellt und erläutert.
Element Ein Element (Abb. 3.6) ist ein atomarer Bestandteil eines Modells. Im Metamodell ist Element die oberste Metaklasse in der Metaklassenhierarchie. Element ist
eine abstrakte Metaklasse mit zwei direkten Unterklassen: ModelElement und PresentationElement.
StructuralFeature
Attribute
initialValue : Expression
multiplicity : Multiplicity
changeability : ChangeableKind
targetScope : ScopeKind
*
Operation
{ordered}
1
1
+type
Namespace
BehavioralFeature
+owner
0..1
+namespace
*
+ownedElement
+specification
1
isQuery : Boolean
+feature
concurrency : CallConcurrencyKind
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
*
ownerScope : ScopeKind
visibility : VisibilityKind
Feature
visibility : VisibilityKind
ElementOwnership
name : Name
*
Classifier
Method
Parameter
*
defaultValue : Expression
kind : ParameterDirectionKind
{ordered}
+constrainedElement
1..*
body : ProcedureExpression
0..1
1 +type
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
GeneralizableElement
ModelElement
Element
*
{ordered}
+parameter
Constraint
body : BooleanExpression
*
+constraint
3.1. FUNDAMENT
44
Abbildung 3.5: Backbone: Dieses Diagramm zeigt die allgemeinsten Klassen des Metamodells. Klassen, deren Klassenname kursiv dargestellt werden, sind
abstrakte Klassen. Exemplare konkreter Klassen sind Sprachelemente,
die auf der Modellebene sichtbar sind.
45
KAPITEL 3. METAMODELL
Element
ModelElement
name : Name
+subject
*
+presentation
PresentationElement
*
Abbildung 3.6: Element, die allgemeinste Klasse im Metamodell
Jedes Element besitzt den vordefinierten Eigenschaftswert documentation:
Eigenschaftswert
Semantik
documentation
Ein Kommentar, eine Beschreibung oder eine Erläuterung des
Elements
PresentationElement Ein Präsentationselement (Abb. 3.6) repräsentiert ein oder
mehrere Modellelemente, die durch Text oder Graphik dargestellt werden. Die abstrakte
Metaklasse PresentationElement ist die Basis aller Metaklassen, die der Präsentation
dienen. Die (nicht definierten) Unterklassen von PresentationElement sind für die
Benutzung durch ein Werkzeug vorgesehen.
Im folgenden wird mit Pseudoattribut der Rollenname der gegenüberliegenden Klasse
einer Assoziation bezeichnet.
Pseudoattribut
Semantik
subject
Bezeichnet ein Modellelement, welches durch das Präsentationselement dargestellt wird.
ModelElement Ein Modellelement ist eine Abstraktion eines Elements des zu modellierenden Systems. Die abstrakte Metaklasse ModelElement ist die Basis für alle Metaklassen, die der Modellierung dienen.
Attribut
Semantik
name
Name des Modellelements innerhalb seines Namensraums
Pseudoattribut
presentation
Semantik
(Abb. 3.6) Bezeichnet ein Präsentationselement, welches das
Modellelement darstellt.
3.1. FUNDAMENT
Pseudoattribut
namespace
constraint
46
Semantik
(Abb. 3.7) Bezeichnet den Namensraum, der das Modellelement enthält. Jedes Modellelement mit Ausnahme eines „Wurzelelements“ muß entweder zu genau einem Namensraum gehören oder ein Teil eines anderen Modellelements (virtueller
Namensraum) sein.
(Abb. 3.8) Zusicherung, die das Modellelement erfüllen muß,
damit das Modell wohldefiniert ist.
ModelElement
name : Name
+ownedElement
*
ElementOwnership
visibility : VisibilityKind
+namespace
0..1
Namespace
Abbildung 3.7: Namensraum
Namespace Ein Namensraum (Abb. 3.7) ist ein ModelElement und enthält beliebig
viele Modellelemente. Die Namen dieser Modellelemente, ausgenommen Assoziationen
und Generalisierungen, müssen innerhalb ihres Namensraums eindeutig sein.
Jede Assoziation muß eine eindeutige Kombination des Assoziationsnamens und der
beteiligten Klassifizierer sein. Jedes Modellelement gehört zu maximal einem Namensraum.
Die Assoziationsklasse (siehe 3.1.1.3) ElementOwnership in Abb. 3.7 ist eine Eigenschaft der Assoziation zwischen ModelElement und Namespace. Sie gibt an, ob
das Modellelement außerhalb seines Namensraums sichtbar ist (public, protected,
private).
Namespace ist eine abstrakte Metaklasse, deren Unterklassen (z.B. Class) zusätzliche
Einschränkungen bzgl. der Art der enthaltenen Modellelemente besitzen.
Pseudoattribut
Semantik
ownedElement
Modellelemente, die zum Namensraum gehören.
47
KAPITEL 3. METAMODELL
Constraint Eine Zusicherung (Abb. 3.8) ist eine an ein Modellelement geheftete Bedingung oder Einschränkung, die durch einen Text (Formalisierungsgrad beliebig)
beschrieben wird (siehe auch 3.1.2 Erweiterungsmechanismen). Im Metamodell ist ei-
ModelElement
name : Name
1..*
+constrainedElement
{ordered}
*
+constraint
Constraint
body : BooleanExpression
Abbildung 3.8: Zusicherung
ne Zusicherung ein mit einem Modellelement assoziierter boolescher Ausdruck (body).
Die Zusicherung gilt, wenn der Ausdruck als wahr ausgewertet wird. Ansonsten ist das
Modell nicht wohldefiniert. Zu einer Zusicherung gehört mindestens ein zugesichertes
Element (constraindedElement). Mehrere Modellelemente einer Zusicherung sind geordnet ({ordered}). Ein Modellelement kann mit beliebig vielen Zusicherungen assoziiert sein. Ausnahme: Eine Zusicherung kann nicht auf sich selbst angewandt werden.
Die folgenden Stereotypen einer Zusicherung sind in der UML definiert, weitere können von den Benutzern hinzugefügt werden.
Stereotyp
«invariant»
«postcondition»
«precondition»
Semantik
Eine Zusicherung, die an mehrere Klassifizierer und Beziehungen geheftet wird und immer gelten muß.
(Nachbedingung) Zusicherung, die an eine Operation angeheftet wird und nach der Ausführung der Operation gelten muß.
(Vorbedingung) Zusicherung, die an eine Operation angeheftet
wird und vor der Ausführung der Operation gelten muß.
GeneralizableElement Ein verallgemeinerbares Element (Abb. 3.9) ist ein Modellelement, welches an einer Generalisierungsbeziehung teilnehmen kann (siehe auch
Abb. 3.23, Seite 63).
3.1. FUNDAMENT
48
ModelElement
+ownedElement name : Name
ElementOwnership
visibility : VisibilityKind
*
+namespace
0..1
Namespace
GeneralizableElement
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
Feature
ownerScope : ScopeKind
visibility : VisibilityKind
+feature
Classifier
*
{ordered}
+owner
1
Abbildung 3.9: verallgemeinerbares Element und Klassifizierer
Attribut
isAbstract
isLeaf
isRoot
Semantik
Falls wahr, besitzt das verallgemeinerbare Element keine direkten Exemplare.
(Blatt) Falls wahr, darf das Element nicht weiter spezialisiert
(vererbt) werden.
(Wurzel) Falls wahr, kann das Element keine Spezialisierung
eines anderen Modellelements sein.
Classifier Ein Klassifizierer ist ein Modellelement, welches Verhaltens- und Strukturmerkmale beschreibt (Abb. 3.9, 3.10). Beispiele für Klassifizierer sind Klassen, Interfaces und Komponenten.
Im Metamodell ist ein Klassifizierer ein Namensraum und ein verallgemeinerbares
Element, welches Merkmale (feature) enthalten kann. Als verallgemeinerbares Element
kann es Merkmale und die Teilnahme an Assoziationen (ver-)erben. Ein Klassifizierer
kann in seiner Eigenschaft als Namensraum Klassifizierer (auch verschachtelt) enthalten.
Auf die enthaltenen Klassifizierer können andere Klassifizierer nur unter Berücksichtigung der Sichtbarkeit des Namensraum zugreifen (ElementOwnership).
Kein Verhaltensmerkmal der gleichen Art6 eines Klassifizieres darf die gleiche Signatur besitzen. Rollennamen einer Assoziation des Klassifizierers7 werden als Pseudoattri6 Operationen
7 auf
und Methoden sind verschiedene Arten eines Verhaltensmerkmals
der gegenüberliegenden Seite eines Klassifizierers
49
KAPITEL 3. METAMODELL
bute angesehen. Die Menge der Attributnamen, der Pseudoattributnamen und die Namen
der enthaltenen Modellelemente eines Klassifizierers müssen eindeutig sein (hierzu gehören auch geerbte Modellelemente). Zu jeder als nicht-abstrakt spezifizierten Operation
des Klassifizierers muß der Klassifizierer eine Methode mit der spezifizierten Signatur
enthalten.
Mehrere Stereotypen und Eigenschaftswerte eines Klassifizierers sind definiert:
Stereotyp
«metaclass»
«powertype»
«process»
«thread»
«utility»
Eigenschaftswert
persistence
semantics
Semantik
(Metaklasse) Bezeichnet einen Klassifizierer, dessen Exemplare Klassen sind.
(Metatyp) Bezeichnet einen Typ, dessen Exemplare Untertypen eines anderen Klassifizierer sind.
(Prozeß) Ein Klassifizierer, der eine aktive Klasse und einen
Prozeß darstellt. Ein Prozeß kann nebenläufig mit anderen
Prozessen ausgeführt werden und besitzt einen eigenen Kontrollfokus.
Ein Klassifizierer, der eine aktive Klasse und einen Thread darstellt. Ein Thread kann nebenläufig innerhalb eines Prozesses
ausgeführt werden. Ein Thread besitzt einen eigenen Kontrollfokus, aber keinen eigenen Adressraum.
(Dienstklasse, Hilfsmittelklasse) Klassifizierer, dessen Attribute und Operationen alle die Klasse als Gültigkeitsbereich
haben ([BRJ99a], Seite 148). Hilfmittelklassen sind keine
echten Klassen, sondern Sammlungen von globalen Variablen
und Funktionen, die aber in Form einer Klasse notiert werden
([Oes98], Seite 230).
Semantik
Der Wert persistent (lat.: „anhaltend“) besagt, das die Lebensdauer der Exemplare des Klassifizieres über die Laufzeit
des Programms hinausreicht und gespeichert werden sollten.
transient bedeutet nicht persistent.
Spezifiziert die Semantik des Klassifzierers.
Feature Ein Merkmal ist eine Eigenschaft eines Klassifizierers, z.B. ein Attribut oder
eine Operation. Ein Merkmal (Abb. 3.10) hat einen Namen, der zur Identifizierung innerhalb eines Klassifizierers oder eines Exemplars dient. Ein Merkmal gehört zu genau
einem Klassifizierer (owner). Das Attribut ownerScope gibt an, ob jedes Exemplar ei-
3.1. FUNDAMENT
50
nes Klassifizierers eigene Werte für dieses Merkmal hat oder ob es genau einen Wert für
dieses Merkmal gibt, der dann für alle Exemplare des Klassifizierers gilt. Das Attribut
visibility spezifiziert, ob andere Klassifizierer das Merkmal sehen und benutzen oder
erben können. Feature ist eine abstrakte Metaklasse.
Attribut
ownerScope
visibility
Semantik
instance: Jedes Exemplar des Klassifizierers hat seinen eigenen Wert für dieses Merkmal.
classifier: Es gibt nur einen Wert für alle Exemplare eines
Klassifizierers.
public: Jeder andere Klassifizierer (mit Sichtbarkeit auf den
Klassifizierer) kann dieses Merkmal benutzen.
protected: Jeder Nachkomme des Klassifizierers kann dieses
Merkmal benutzen.
private: Nur der Klassifizierer selbst kann das Merkmal benutzen.
ModelElement
name : Name
Classifier
1
+owner
+type
1
Feature
ownerScope : ScopeKind
+feature visibility : VisibilityKind
{ordered}
*
*
BehavioralFeature
isQuery : Boolean
StructuralFeature
multiplicity : Multiplicity
changeability : ChangeableKind
targetScope : ScopeKind
Attribute
initialValue : Expression
Operation
concurrency : CallConcurrencyKind +specification
isRoot : Boolean
isLeaf : Boolean
1
isAbstract : Boolean
Abbildung 3.10: Merkmale
*
Method
body : ProcedureExpression
51
KAPITEL 3. METAMODELL
StructuralFeature Ein strukturelles Merkmal (Abb. 3.10) ist eine statische Eigenschaft eines Modellelements. Im Metamodell der UML (Version 1.3) ist Attribute
die einzige Unterklasse von StructuralFeature. Ein strukturelles Merkmal besitzt eine Kardinalität (multiplicity), die die Anzahl dieses Merkmals eines Modellelements
angibt, z.B. kann das Merkmal „IP-Adresse“ eines Computers eine Kardinalität > 1 besitzen. Der Wertebereich eines strukturellen Merkmals wird durch einen Typ (type) spezifiziert. Dieser Typ kann z.B. auf der Modellebene eine benutzerdefinierte Klasse oder ein
Exemplar eines in UML definierten Datentyps (siehe 3.1.3) sein. Die Modifizierbarkeit
(changeability) gibt an, ob der Wert des Merkmals verändert werden kann, nachdem
das Exemplar erzeugt wurde. StructuralFeature ist eine abstrakte Metaklasse.
Attribut
Semantik
multiplicity
Gibt die Häufigkeit des Merkmals an.
changeability
changeable: keine Einschränkungen (default)
frozen: Der Wert kann nicht mehr geändert werden, nachdem
das Exemplar instantiiert und der Wert initialisiert wurde. Weitere Werte können nicht hinzugefügt werden.
addOnly: Nur von Bedeutung, wenn die Kardinalität > 1 ist.
Weitere Werte dürfen hinzugefügt werden, aber kein Wert darf
verändert oder entfernt werden.
targetScope
instance: (default) Jeder Wert enthält eine Referenz auf ein
Exemplar des Typs.
classifier: Jeder Wert enthält eine Referenz auf einen Klassifizierer. Auf diese Weise können Metainformationen gespeichert werden.
Pseudoattribut
type
Semantik
Bezeichnet einen durch einen Klassifizierer beschriebenen
Wertebereich des Merkmals. Exemplare des Klassifizierers bilden die Attributwerte. Der Klassifizierer muß eine
Klasse (Class), ein Datentyp (DataType) oder ein Interface
(Interface) sein. Zur Laufzeit kann der aktuelle Typ auch
ein Nachkomme sein. Der aktuelle Typ eines Interfaces ist zur
Laufzeit ein Klassifizierer, der dieses Interface realisiert.
Die Typen sollten im Namensraum des Besitzers des Merkmals
sein.
Attribute Ein Attribut ist ein benanntes Fach innerhalb eines Klassifizierers und beschreibt einen Wertebereich. Im Metamodell ist Attribute ein Teil eines Klassifizierers,
welches einen Namen besitzt (geerbt von ModelElement) und mögliche Zustände, die
Exemplare des Klassifizierers annehmen können, durch einen Wertebereich (type, geerbt
von StructuralFeature) beschreibt.
3.1. FUNDAMENT
Attribut
initialValue
52
Semantik
Ausdruck, der den Wert des Attributs bei seiner Initialisierung
bestimmt.
ModelElement
name : Name
Classifier
+type
1
Parameter
defaultValue : Expression
* kind : ParameterDirectionKind
+parameter *
{ordered}
0..1
BehavioralFeature
isQuery : Boolean
Abbildung 3.11: Parameter
BehavioralFeature Ein Verhaltensmerkmal (Abb. 3.10, 3.11) ist ein dynamisches Merkmal eines Klassifizierers, z.B. eine Operation oder eine Methode. Das Attribut isQuery gibt an, ob die Ausführung/Anwendung des Merkmals den Zustand des
Systems unverändert läßt. Ein Verhaltensmerkmal kann eine geordnete Liste von Parametern besitzen, die das Verhalten des Merkmals beeinflußen können. Die Parameter sollten
unterschiedliche Namen haben und ihre Typen sollten zum Namensraum des Klassifizierers gehören. Ein Verhaltensmerkmal besitzt eine Signatur, die aus dem Namen des
Verhaltensmerkmals und aus der Anzahl, Art und Reihenfolge der Parameter besteht.
BehavioralFeature ist eine abstrakte Metaklasse.
Attribut
Semantik
isQuery
Falls wahr, verändert die Anwendung des Merkmals den Zustand des Klassifizierers nicht, d.h. der Systemzustand bleibt
ebenfalls unverändert. isQuery wird benutzt, um Abfragen
bzw. reine Funktionen, d.h. Funktionen ohne Seiteneffekte, zu
markieren.
53
KAPITEL 3. METAMODELL
Pseudoattribut
parameter
Semantik
Geordnete Liste von Parametern.
Zwei Stereotypen eines Verhaltensmerkmals sind in der UML definiert:
Stereotyp
Semantik
«create»
Erzeugt ein Exemplar des Klassifizierers.
«destroy»
Zerstört ein Exemplar des Klassifizierers.
Operation Eine Operation (Abb. 3.10) spezifiziert einen Dienst, der von Exemplaren
eines Klassifizierers ausgeführt bzw. angefordert werden kann. Eine Operation hat eine
Signatur, die aus dem Namen der Operation (geerbt von ModelElement) und Parametern
besteht.
Im Metamodell ist eine Operation ein Verhaltensmerkmal, welches auf die Exemplare
des deklarierenden Klassifizierers angewandt werden kann.
Das Attribut concurrency (Nebenläufigkeit) spezifiziert die Semantik von nebenläufigen Aufrufen des gleichen passiven Exemplars (die die untersuchte Operation enthält).
Aktive Exemplare kontrollieren den Zugriff auf ihre Operationen selbst8 .
Attribut
concurrency
8 Ein
Semantik
sequential: (sequentiell) Aufrufer der Operation müssen außerhalb des Exemplars koordiniert werden. Die Operation darf
während der Ausführung nicht nocheinmal aufgerufen werden.
Dies gilt für die Gesamtheit der sequentiellen Operationen eines Exemplars, d.h. es dürfen auch nicht gleichzeitig zwei
verschiedene sequentielle Operationen aufgerufen werden. Im
Falle simultaner Aufrufe ist die Semantik und Integrität des
Exemplars (und damit des Systems) nicht gewährleistet.
guarded: (überwacht) Gleichzeitige Aufrufe einer Operation
eines Exemplars von nebenläufigen Threads sind zugelassen,
aber nur eine Anforderung wird zu einem Zeitpunkt bearbeitet, die anderen werden bis zur vollständigen Ausführung der
Operation blockiert. Die Verhinderung von Deadlocks liegt
in der Verantwortlichkeit des Systemdesigners. Im Falle der
gleichzeitigen Ausführung sequentieller Operationen müssen
die überwachten Funktionen korrekt ausgeführt werden bzw.
müssen sie sich selbst blockieren.
aktives Exemplar ist ein Exemplar einer aktiven Klasse
3.1. FUNDAMENT
Attribut
isAbstract
isLeaf
isRoot
54
Semantik
concurrent: (nebenläufig) Wie überwachte Operationen, nur
werden die Operationen in diesem Fall sogar nebenläufig ausgeführt. Nebenläufige Operationen müssen so entworfen werden, daß sie im Falle nebenläufiger sequentieller oder überwachter Operationen korrekt ausgeführt werden.
Falls wahr, implementiert der deklarierende Klassifizierer die
Operation nicht. Die Operation muß von einem Nachfahren
implementiert werden.
Falls wahr, kann die Implementation von keinem Nachfahren
überschrieben werden.
Falls wahr, kann die Klasse eine Deklaration dieser Operation
mit der gleichen Signatur nicht erben.
Method Eine Methode (Abb. 3.10) ist die Implementation einer Operation. Im Metamodell ist eine Methode ein benanntes Verhaltensmerkmal eines Klassifizierers und realisiert/implementiert eine Operation (body). Eine Methode wird durch eine Operation spezifiziert (specification). Eine Operation kann mehrere Methoden spezifizieren. Die
Signaturen der Operation und der Methode müssen übereinstimmen. Falls die Operation als „query“ markiert ist, muß die Methode eine reine Funktion (ohne Seiteneffekte)
sein. Die Sichtbarkeit der Methode sollte mit der Sichtbarkeit der Operation übereinstimmen. Eine Operation muß ein (geerbtes) Merkmal des Klassifizierers sein, der dieses
implementiert. Wenn die Operation von den Vorfahren des Besitzers der Methode bereits
überschrieben wurde, muß die Methode die letzte Überschreibung realisieren.
Parameter Parameter (Abb. 3.11) werden zur Spezifikation der Verhaltensmerkmale
von Klassifizierern benutzt. Im Metamodell beschreibt ein Parameter die Deklaration
eines Arguments, welches an eine Operation o.ä. übergeben wird. Jeder Parameter hat
(als Modellelement) einen Namen. type gibt den Typ (ein Klassifizierer) des Parameters
an. Aus Sicht eines Verhaltensmerkmals sind die Parameter geordnet (Liste).
Attribut
Semantik
kind
in: Eingabeparameter, der Wert darf nicht verändert werden.
out: Ausgabeparameter, der Wert kann verändert werden, um
Informationen zum Aufrufer zu liefern.
inout: Ein modifizierbarer Eingabeparameter.
return: Rückgabeparameter.
defaultValue
Ausdruck, dessen Wert genutzt wird, falls kein Argument übergeben wird.
55
KAPITEL 3. METAMODELL
Classifier
Class
DataType
isActive : Boolean
+deploymentLocation
Interface
*
Node
*
Component
+resident
+implementation
*
ElementResidence
visibility : VisibilityKind
*
+resident
ModelElement
name : Name
Abbildung 3.12: Klassifizierer
3.1.1.2
Klassifizierer
In diesem Abschnitt werden die Klassifizierer Klasse, Interface, Datentyp, Knoten (node)
und Komponente beschrieben. Es gibt weitere Klassifizierer (z.B. Anwendungsfall), die
in anderen Paketen des Metamodells beschrieben sind.
Class Eine Klasse ist eine Beschreibung einer Menge von Objekten, die sich durch
gemeinsame Attribute, Operationen, Methoden, Beziehungen und Semantik auszeichnen.
Attribut
Semantik
isActive
true: Die Klasse ist eine aktive Klasse, d.h. ein Objekt der
Klasse kontrolliert den Zugriff auf seine Operationen und Attribute selbst. Das Objekt besitzt einen eigenen Kontrollfokus
und ist nebenläufig mit anderen aktiven Objekten.
false: (default) Die Klasse ist keine aktive Klasse.
isAbstract
(geerbt von GeneralizableElement)
true: Die Klasse kann nicht instantiiert werden.
3.1. FUNDAMENT
Stereotyp
«type»
«implementationClass»
56
Semantik
Ein Typ ist eine Klasse, die einen Bereich von Exemplaren
(Wertebereich) zusammen mit Operationen, die auf diese Exemplare anwendbar sind, definiert. Ein Typ kann Attribute und
Assoziationen, aber keine Methoden enthalten.
Bezeichnet eine Klasse, die kein Typ sondern die Implementation einer Klasse in einer Programmiersprache repräsentiert.
Ein Exemplar kann maximal zu einer Implementationsklasse
gehören. Dies ist ein Unterschied zu normalen Klassen, bei
denen ein Exemplar zu mehreren Klassen gehören kann (sowohl statisch, als auch dynamisch).
Interface Der Zweck eines Interface ist die Sammlung von Operationen, die einen
Dienst spezifizieren, der von Klassifizierern angeboten wird. Interfaces bieten einen Weg
zur Charakterisierung von Gruppen von Operationen.
Ein Interface ist eine Sammlung von öffentlichen (public) Operationen. Ein Interface kann nicht direkt instantiiert werden. Instantiierbare Klassifizierer können Interfaces
zur Spezifizierung verschiedener Dienste, die von ihren Exemplaren angeboten werden,
benutzen. Mehrere Klassifizierer können das gleiche Interface realisieren. Ein Interface
kann als generalisierbares Element eine Spezialisierung anderer Interfaces sein und an
Assoziationen teilnehmen, vorausgesetzt, es kann die Assoziation nicht sehen (es kann
nicht vom Interface wegnavigiert werden, siehe 3.1.1.3 AssociationEnd). Z.B. kann eine Klasse mit einem Interface assoziiert sein, die Assoziation darf aber nur von der Klasse
zum Interface navigierbar sein9 .
DataType Ein Datentyp ist ein Typ, dessen Werte keine Identität haben (reine Werte).
Zu den Datentypen gehören primitive Typen (z.B. integer, string) und (benutzerdefinierbare) Aufzählungstypen (z.B. boolean).
Im Metamodell ist DataType ein spezieller Klassifizierer, der nur Operationen, die
reine Funktionen sind, enthalten kann.
Node Ein Knoten ist ein physisches Objekt und repräsentiert Rechenkapazität, im allgemeinen mit Speicher und Prozessfähigkeit. Im Metamodell ist ein Knoten mit einer
Menge von Komponenten assoziiert, die sich auf diesem Knoten befinden (resident).
Component Eine Komponente ist ein physisches, austauschbares Teil eines Systems.
Es repräsentiert ein Bestandteil der Implementation des Systems, z.B. Quelltext, Biliothekscode, ein ausführbares Programm oder ein Skript.
9 Der
Sinn einer solchen Assoziation ist dem Autor verschlossen geblieben.
57
KAPITEL 3. METAMODELL
Eine Komponente kann keine anderen Komponenten beinhalten. Eine Komponente
kann nur Datentypen, Interfaces, Klassen, Assoziationen, Abhängigkeiten, Zusicherungen, Signale, Datenwerte und Objekte implementieren (resident). Eine Komponente
kann sich auf einem Knoten (deploymentLocation) befinden.
Für Komponenten sind mehrere Stereotypen vordefiniert:
Stereotyp
«document»
«executable»
«file»
«library»
«table»
3.1.1.3
Semantik
Die Komponente repräsentiert ein Dokument
Die Komponente repräsentiert ein Programm, welches auf einem Knoten ausgeführt werden kann.
Die Komponente repräsentiert ein Dokument, welches Daten
oder Quellcode enthält.
Die Komponente repräsentiert eine (statische oder dynamische) Bibliothek.
Die Komponente repräsentiert eine Tabelle einer Datenbank
Assoziation und Generalisierung
Eine Assoziation deklariert mögliche Verbindungen (links) zwischen Exemplaren von assoziierten Klassifizierern (z.B. Klassen). Die Exemplare einer Assoziation (Links) bilden
eine Menge10 von Tupeln, die aus Referenzen auf die assoziierten Exemplare bestehen.
Eine Assoziation besteht aus mindestens zwei Assoziationsenden, von denen jedes mit
einem Klassifizierer verbunden ist und Zusicherungen definiert, die erfüllt sein müssen,
damit die Beziehung gültig ist. Die Kardinalitätseigenschaft eines Assoziationsendes spezifiziert, wieviele Exemplare eines Klassifizierers an einem gegebenen Assoziationsende
(dasjenige, welches die Kardinalität angibt) mit einem einzigen Exemplar des Klassifizierers an einem anderen Ende assoziiert sein müssen (siehe Abb. 3.13). Eine Kardinalität
ist ein Bereich von nicht-negativen ganzen Zahlen (Integer). Ein Assoziationsende gibt
weiter an, ob die Verbindung zu dem Exemplar navigierbar ist, d.h. ob das Exemplar
durch die Assoziation erreichbar ist (siehe als Beispiel Abb. 3.14).
In einer Assoziation kann die Menge der Merkmale, die eine Klasse in dieser Beziehung benötigt, beschränkt werden. So kann z.B. eine Klasse „Person“ mehrere Schnittstellen realisieren und in einer Assoziation nur die Schnittstellen zur Verfügung stellen,
die sie für die Ausübung dieser Rolle benötigt (Abb. 3.15). Anstelle von Interfaces können auch Typen (Klassen mit dem Stereotyp «type») benutzt werden.
Eine weitere Zusicherung eines Assoziationsendes gibt an, ob die Menge der Links
auf die entsprechenden Exemplare des Assoziationsendes verändert werden dürfen. Möglichkeiten sind:
1. Es existiert keine Zusicherung (changeable), d.h. die Links dürfen beliebig hinzu10 Jedes
Tupel tritt maximal einmal auf (extensionale Auffassung)
3.1. FUNDAMENT
58
Rollenname
+Einwohner
Person
name : String 1..*
+Wohnort
Ort
name
: String
0..*
Kardinalität
Abbildung 3.13: Beispiel einer binären Assoziation: Eine Person kann in der Rolle als
Einwohner mit beliebig vielen Wohnorten assoziiert sein. Ein Wohnort
hat mindestens einen Einwohner. Die Assoziation ist beidseitig navigierbar (nach Konvention des Werkzeugs).
+passwort
Person
name : String
0..1
Passwort
name : String
Abbildung 3.14: Eine gerichtete Assoziation, die nur von Person zu Paßwort navigierbar
ist.
+Vorgesetzer: IManager
1..1
Person
IMitarbeiter
0..*
+Mitarbeiter: IMitarbeiter
IManager
Abbildung 3.15: Spezifizierung von Rollen durch Interfaces
59
KAPITEL 3. METAMODELL
gefügt, entfernt und geändert werden.
2. Nachdem die Verbindung initialisiert wurde, können keine Links mehr geändert
oder gelöscht werden (frozen).
3. Neue Links können hinzugefügt werden, dürfen aber nicht mehr verändert werden
(addOnly).
Diese Zusicherungen betreffen nicht die Änderbarkeit der Exemplare selbst, die an das
Link-Ende (Exemplar eines Assoziationsendes) geheftet sind.
Durch eine weitere Zusicherung eines Assoziationsendes kann angegeben werden, ob
die Exemplare an dem Assoziationsende bezüglich eines einzigen Exemplars eines anderen Assoziationsendes auf irgendeine Weise geordnet sein müssen (Abb. 3.16). In diesem
Fall müssen Operationen, die Links einfügen, verändern oder löschen, die Ordnung berücksichtigen. Das Sortieren von Links ist eine Optimierung aus Performancegründen,
Person
name : String
+Wohnort
Ort
0..* name : String
{addOnly,
zeitlich geordnet}
Abbildung 3.16: Die verschiedenen Wohnorte einer Person zeitlich geordnet. Ist die Beziehung zwischen einer Person und einem Wohnort initialisiert, darf sie
nicht mehr entfernt werden. Die Art der Ordnung (z.B. aufsteigend) ist
nicht festgelegt. Vorsicht: eine Person kann nur einmal mit einem Ort
assoziiert werden, d.h. ein Umzug in einen ehemaligen Wohnort kann
in diesem Modell nicht erfaßt werden.
aber kein Beispiel einer logischen Ordnung, da die Sortierung keine zusätzliche Information besitzt. Die Zusicherung „zeitlich geordnet“ in Abbildung 3.16 ist ein Beispiel einer
benutzerdefinierten Zusicherung und fügt der Assoziation weitere Informationen hinzu,
die (auch) Auswirkungen auf die Implementierung haben. Die Angabe einer Zusicherung
„alphanumerisch sortiert“ fügt zwar der Assoziation selbst keine Information hinzu, ist
aber aus einer Implementierungssicht sinnvoll.
In der UML gibt es drei Arten von Assoziationen:
1. gewöhnliche Assoziation
2. Aggregation (beschreibt eine Ganzes-Teile-Hierarchie)
3. Komposition (Aggregation, bei der die Teile vom Ganzen existenzabhängig sind)
Da das Aggregationskonstrukt verschiedene Bedeutungen abhängig vom Anwendungsgebiet hat, präzisiert die UML Assoziation und Komposition genau, läßt aber bei der
Aggregation einen Interpretationsspielraum offen.
3.1. FUNDAMENT
60
Eine Assoziation kann eine Ganzes-Teile-Hierachie darstellen. In diesem Fall wird
das Assoziationsende, welches das Ganze darstellt, gekennzeichnet, und das andere Ende
der Assoziation stellt die Teile der Aggregation dar. Nur binäre Assoziationen können Aggregationen sein. Eine Komposition ist eine strenge Form der Assoziation, die verlangt,
daß ein Exemplar eines Teils (Komponente) zu einem Zeitpunkt nur zu maximal einer
Komposition gehören darf (Abbildung 3.17). Der Besitzer der Komponente kann allerdings ausgetauscht werden. Eine Komposition impliziert eine Übertragung der Semantik
Absatz
Dokument
Satz
0..*
0..*
Abbildung 3.17: Komposition: Die Teile (Komponenten) sind vom Ganzen (Komposition) existenzabhängig
(propagation semantics), d.h. das Verhalten des Ganzen wird auf seine Teile übertragen.
Wird z.B. das Ganze kopiert/gelöscht, so gilt dies auch für seine Teile.
Firma
1..*
0..*
+Arbeitgeber
Person
+Arbeitnehmer
Abbildung 3.18: Aggregation: In diesem Modell werden Arbeitnehmer als Teil einer Firma angesehen.
Eine (normale) Aggregation hat weniger starke Einschränkungen. Die Teile können
zu verschiedenen Aggregaten (dem Ganzen) gehören, die Besitzer der Teile können ebenfalls ausgetauscht werden. Bei dieser Form der Aggregation impliziert das Löschen des
Ganzen nicht das Löschen seiner Teile (Abbildung 3.18).
Beide Arten der Aggregation definieren eine transitive, asymmetrische Beziehung.
Eine Qualifikationsangabe (engl. Qualifier) ist ein Assoziationsattribut, dessen Werte
die Menge der Exemplare am gegenüberliegenden Ende partitionieren. In Abbildung
Bank
+kunde
ktoNr
Person
0..1
Abbildung 3.19: qualifizierte Assoziation: maximal ein Kunde pro Kontonummer und
Bank
3.19 partitioniert ktoNr die Menge der Kunden, die mit einem gegebenen Exemplar von
Bank assoziiert sind. Ein Exemplar bzw. ein Wert von ktoNr selektiert den zugehörigen Kunden (falls einer existiert). In Abbildung 3.21 kann ein Wert von ktoNr mehrere
Kunden selektieren. Da ein Exemplar von Bank nicht mehrfach mit einem Exemplar
61
KAPITEL 3. METAMODELL
+kunde
Bank
0..*
0..*
Person
ktoNr : String
Abbildung 3.20: nicht-qualifizierte Assoziation: maximal eine Kontonummer für einen
Kunden pro Bank
Bank
+kunde
ktoNr
Person
0..*
0..*
Abbildung 3.21: qualifizierte Assoziation: mehrere Kunden pro Konto und Bank, allerdings kann ein Kunde nur ein Konto pro Bank haben
von Kunde assoziiert sein kann11 , kann ein Kunde maximal eine Kontonummer pro Bank
haben.
Die Kardinalität der Zielseite (die zu partitionierende Seite) einer qualifizierten Assoziation gibt die Anzahl der Zielexemplare, die durch ein Quellexemplar und einem Wert
der Qualifikationsangabe selektiert werden, an. Gebräuchliche Werte sind:
• „0..1“: Maximal ein Zielexemplar wird durch den Wert der Qualifikationsangabe
selektiert, aber nicht jeder mögliche Wert muß notwendigerweise ein Exemplar selektieren.
• „1“: Jeder mögliche Wert der Qualifikationsangabe selektiert genau ein Zielexemplar, daher muß der Wertebereich der Qualifikationsangabe endlich sein.
• „*“: Der qualifizierende Wert partitioniert die Zielexemplare in Teilmengen. Er
suggeriert eine Implementation, bei der durch einen qualifizierenden Wert auf eine
Teilmenge der Exemplare zugegriffen werden kann.
Die Kardinalität der Qualifikationsangabe ist durch die Annahme gegeben, daß der qualifizierende Wert unterstützt wird. Die reine Kardinalität der Quellseite ohne eine Qualifikationsangabe wird meist mit „0..*“ angenommen, da die Situation, in der die Kardinalität
„1“ ist, durch eine einfache Assoziation modelliert werden sollte.
Es ist erlaubt, beide Seiten einer Assoziation zu qualifizieren (ein seltener Fall). Es ist
möglich, einen Klassifizierer mehrfach zu qualifizieren (mehrere Assoziationen) und eine
Assoziation mit mehreren Qualifikationsangaben an einer Seite zu versehen. Ein Beispiel
ist in [OMG99] (Seite 3-71) angegeben.
Bei einer Assoziation zwischen zwei Klassen kann die Assoziation selbst weitere Eigenschaften haben. Z.B. kann in einer Arbeitnehmer/Arbeitgeber-Beziehung zwischen
11 Eine
Assoziation ist eine Menge von Tupeln.
3.1. FUNDAMENT
62
einer Firma und einer Person eine Stelle sein, die die Eigenschaften der Beziehung zwischen genau einem Arbeitnehmer/Arbeitgeber-Paar beschreibt (Einstellungsdatum, Gehalt, usw.). In der UML kann man diese Situation mit einer Assoziationsklasse modellieren (Abbildung 3.22). Eine Assoziationsklasse ist ein Teil einer Assoziation und modelFirma
+Arbeitgeber
+Arbeitnehmer
Person
1..*
0..*
Stelle
eintrittsDatum
gehalt
Abbildung 3.22: Assoziationsklasse: Stelle ist eine Eigenschaft der Assoziation
liert Merkmale, die zur Assoziation selbst gehören. Eine Assoziationsklasse kann nur an
eine einzige Assoziation geheftet werden.
Abbildung 3.23 zeigt die Klassen des Metamodells, die die Assoziations- und Generalisierungsbeziehungen darstellen.
Relationship Im Metamodell in Abb. 3.23 ist Relationship eine abstrakte Klasse
ohne eigene Semantik, die nur aus technischen Gründen vorhanden ist.
Association Eine Assoziation definiert eine strukturelle Beziehung zwischen Klassifizierern. Ein Exemplar einer Assoziation (Link) ist ein Tupel der entsprechenden Exemplare (bzw. Verweise auf die Exemplare) der Klassifizierer. Eine Assoziation besteht
aus mindestens zwei Assoziationsenden, die die Verbindung zwischen der Assoziation
und den Klassifizierern bilden. Jedes Asssoziationsende spezifiziert eine Menge von Eigenschaften, die erfüllt sein müssen, damit die Beziehung gilt (auf der Modellebene). Die
assoziierten Klassifizierer sollten im Namensraum der Assoziation enthalten sein.
Ein Stereotyp und eine Zusicherung sind definiert:
Stereotyp
Semantik
«implicit»
Die Beziehung ist implizit gegeben und wird nur aus rein
konzeptionellen Gründen dargestellt. Beispielsweise ist eine
Assoziation zwischen zwei Unterklassen implizit, wenn ihre
Oberklassen bereits assoziiert sind.
Zusicherung
xor
Semantik
Wird auf eine Menge von Assoziationen angewandt. Sie fordert, daß genau eine Assoziation für jedes assoziierte Exemplar
gilt (Beispiel: Abb. 3.28, Seite 72).
63
KAPITEL 3. METAMODELL
+source
*
ModelElement
name : Name
+target
*
Relationship
+source
+target
*
*
Flow
Generalization
discriminator : Name
+child
+generalization
1
*
1
*
+parent
+specialization
Classifier
+type
AssociationEnd
1
*
+specification
+participant
*
Class
isActive : Boolean
GeneralizableElement
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
*
Attribute
+qualifier
isNavigable : Boolean
ordering : OrderingKind
aggregation : AggregationKind
targetScope : ScopeKind
multiplicity : Multiplicity
changeability : ChangeableKind
visibility : VisibilityKind
2..*
1
Association
+connection
{ordered}
+associationEnd
initialValue : Expression
*
{ordered}
0..1
AssociationClass
Abbildung 3.23: Assoziations-, Generalisierungs- und Flußbeziehungen
AssociationEnd Ein Assoziationsende ist der Endpunkt einer Assoziation und enthält den größten Informationsanteil einer Assoziation. Jedes Assoziationsende ist Teil
genau einer Assoziation. Der Name des Assoziationsendes beschreibt die Rolle, die die
Exemplare des assoziierten Klassifizierers in der Beziehung spielen. Im folgenden werden die Hilfsbezeichnungen aus Abb. 3.24 benutzt.
betrachtetes
Assoziationsende
Quelle
.
Ziel
Abbildung 3.24: Hilfsbezeichnungen für die Erläuterung des Assoziationsendes
3.1. FUNDAMENT
Attribut
name
aggregation
changeability
ordering
isNavigable
multiplicity
targetScope
64
Semantik
Der Rollenname des Assoziationsendes. Er bezeichnet die
Rolle, die der Zielklassifizierer in der Assoziationsbeziehung
spielt. Dieser Rollenname repräsentiert ein Pseudoattribut des
Quell-Klassifizierers, d.h. er kann auf die gleiche Art wie ein
Attribut vom Quell-Klassifizierer benutzt werden (unabhängig
von der Sichtbarkeit, abhängig von der Navigierbarkeit). Daher muß der Rollenname bzgl. der Attribute und anderer Pseudoattribute des Quell-Klassifizierers eindeutig sein.
none: Dies Ende ist keine Aggregation.
aggregate: Der mit diesem Ende assoziierte Klassifizierer
(Ziel) stellt das Ganze der Aggregationsbeziehung dar. Das
Quellende muß den Wert none haben.
composite: Der mit diesem Ende assoziierte Klassifizierer
stellt das Ganze der Kompositionsbeziehung dar. Das Quellende muß den Wert none haben.
Gibt an, ob ein Link vom Quellende aus verändert werden kann (entsprechend der changeability-Eigenschaft von
Attribute). Die Werte von changeability werden als Zusicherungen dargestellt.
changeable: Keine Einschränkungen (Default).
addOnly: Links können von der Quelle hinzugefügt, aber nicht
verändert werden.
frozen: Nachdem das Quellobjekt erzeugt wurde, dürfen keine Links hinzugefügt werden.
unordered: Die Links sind nicht geordnet (Default)
ordered: Die Links sind geordnet (die Ordnung selbst ist aber
nicht definiert)
Zusätzliche Werte (z.B. sorted) werden eventuell in weiteren Versionen definiert. Es besteht die Möglichkeit zusätzliche
Werte als Stereotypen zu definieren, die entsprechende Werkzeuge unterstützen könnten.
true: Ein Exemplar des Quellendes kann auf die assoziierten
Exemplare des Zielendes schließen (zum Ziel navigieren). Die
Navigierbarkeit eines Assoziationsendes ist unabhängig von
der Navigierbarkeit der anderen Assoziationsenden.
false: nicht navigierbar.
(Kardinalität) Bezeichnet die Anzahl der mit einem Quellexemplar assoziierten Zielexemplare.
instance: Der Link verweist auf ein Exemplar (default).
classifier: Der Link verweist auf einen Klassifizierer.
65
KAPITEL 3. METAMODELL
Attribut
visibility
Semantik
Gibt die Sichtbarkeit des Assoziationsendes aus der Sicht von
Klassifizierern an, die den Quellklassifizierer „sehen“ können.
public: Andere Klassifizierer können navigieren und den
Rollennamen in Ausdrücken benutzen, d.h. sie können den
Rollennamen wie ein öffentliches Attribut benutzen.
protected: Nachkommen des Quellklassifizierers können navigieren und den Rollennamen in Ausdrücken benutzen.
private: Nur der Quell-Klassifizierer kann navigieren und
den Rollennamen in Ausdrücken benutzen.
Pseudoattribut
type
Semantik
Bezeichnet den Klassifizierer, der mit dem Assoziationsende
verbunden ist. In einem Link kann die Klasse ein Nachkomme der Quellklasse sein, im Falle eines Interfaces kann es die
realisierende Klasse sein.
Bezeichnet optional Klassifizierer, die Operationen spezifizieren, die auf Exemplare angewandt werden können, welche
durch die Assoziation und das Assoziationsende erreicht werden. Diese spezifizierenden Klassifizierer bestimmen die minimale Schnittstelle, die durch den assoziierten Klassifizierer
realisiert werden muß. Dies können Typen (Klassen mit dem
Stereotyp «type») oder Interfaces sein, die Eigenschaften spezifizieren, die ein Exemplar in dieser Beziehung zur Verfügung
stellt (vgl. Abb. 3.15).
Bezeichnet eine optionale Liste von Qualifikationsangaben.
specification
qualifier
Der Klassifizierer eines Assoziationsendes kann kein Interface oder Datentyp (DataType) sein, wenn ein gegenüberliegendes Assoziationsende navigierbar ist, d.h. man kann
nicht von einem Interface oder Datentyp wegnavigieren.
AssociationClass Mit einer Assoziationsklasse werden Eigenschaften einer binären Assoziation modelliert. Dies sind Eigenschaften, die nicht zu den beteiligten Klassifizierern gehören, sondern Eigenschaften der Assoziation selbst sind.
Im Metamodell ist eine AssociationClass eine Unterklasse von Class und Association. Daher kann eine assoziierte Klasse sowohl Merkmale als auch Assoziationsenden haben.
Die Namen der Assoziationsenden und die Namen der strukturellen Merkmale (Attribute) einer Assoziationsklasse dürfen sich nicht überschneiden.
3.1. FUNDAMENT
66
Generalization Eine Generalisierung ist eine Beziehung zwischen einem SuperElement (parent) und einem Sub-Element (child). Im Metamodell ist Generalization
eine Assoziation zwischen (verschiedenen) verallgemeinerbaren Elementen. Exemplare
dieser Metamodellklassen beschreiben eine Vererbungshierarchie auf der Modellebene.
Attribut
Semantik
discriminator
Gibt an, welche Eigenschaft durch die Generalisierungsbeziehung abstrahiert wird.
Stereotyp
«implementation»
Semantik
Bezeichnet eine Generalisierung, bei der das spezialisierte Element die Implementation des allgemeineren Elements erbt,
aber die Implementierung der Interfaces des allgemeineren
Elements weder öffentlich zugängig macht noch deren Unterstützung garantiert. Dies verletzt das Substitutionsprinzip der
Generalisierung. Das Stereotyp kennzeichnet eine „private“
Verererbung, die normalerweise nur in einer Implementationssicht Sinn macht.
Zusicherung
disjoint
Semantik
(disjunkt) Dies ist eine Standardzusicherung der Generalisierung. Exemplare des allgemeineren Elements dürfen maximal
einen der Nachkommen als Typ haben.
(nicht disjunkt, überschneidend) Exemplare des allgemeineren
Elements dürfen den Typ mehrerer (direkter) Nachfahren haben. Dieses wird z.B. modelliert, wenn ein Exemplar einer
Klasse Person sowohl als Kunde als auch als Lieferant in Erscheinung treten kann, d.h. ein Exemplar kann seine Klassenzugehörigkeit dynamisch ändern.
(nicht-vollständig) Dies ist eine Standardbedeutung der Generalisierung. Es sind nicht alle direkten Nachkommen spezifiziert, weitere können hinzugefügt werden.
(vollständig) Alle direkten Nachkommen sind spezifiziert, zusätzliche sind nicht erlaubt.
overlapping
incomplete
complete
Flow Ein Ablauf oder Fluß ist eine gerichtete Beziehung zwischen zwei Versionen
eines Exemplars (zu unterschiedlichen Zeitpunkten) oder zwischen einem Exemplar und
einer Kopie des Exemplars (Abb. 3.25).
Ein Fluß kann auch eine Aktivität (siehe Abb. 3.50, Seite 117) zu oder von einem
Objektflusszustand oder zwei Objektflusszuständen verbinden.
67
KAPITEL 3. METAMODELL
Müller : Person
[Mitarbeiter]
<< become >>
Müller : Person
[Manager]
Abbildung 3.25: Ablauf- oder Flußbeziehung zwischen zwei Versionen eines Exemplars
zu unterschiedlichen Zeitpunkten.
Stereotyp
«become»
«copy»
3.1.1.4
Semantik
(wird) bezeichnet eine Ablaufabhängigkeit, dessen Quelle und
Ziel dasselbe Exemplar zu unterschiedlichen Zeitpunkten darstellt. Sie verbindet zwei Versionen eines Exemplars, die sich
bzgl. Wert, Zustand, Ort oder Rolle unterscheiden können.
(kopiert) bezeichnet eine Ablaufabhängigkeit, bei der die
Quelle und das Ziel unterschiedliche Exemplare mit den gleichen Werten, Rollen und dem gleichen Zustand, aber mit einer unterschiedlichen Identität sind. Eine Kopie-Abhängigkeit
von A zu B bedeutet, daß B eine exakte Kopie von A zu einem
Zeitpunkt ist.
Abhängigkeiten
In der UML bezeichnet eine Abhängigkeitsbeziehung eine andere Beziehung als Assoziation, Generalisierung, Ablauf oder Metabeziehung (die Beziehung zwischen einem
Klassifizierer und einem Exemplar). Bei einer Abhängigkeit können sich Veränderungen unabhängiger Elemente auf abhängige Elemente auswirken. Die UML definiert vier
Abhängigkeitsbeziehungen:
• Eine Abstraktion ist eine Abhängigkeitsbeziehung zwischen zwei Elementen, die
das gleiche Konzept repräsentieren.
• Eine Erlaubnis gewährt einem Modellelement den Zugriff auf einen anderen Namensraum (z.B. ein Paket).
• Mit einer Benutzung wird dargestellt, daß ein Modellelement die Gegenwart eines
anderen Modellelements benötigt.
• Eine Bindung ist eine Beziehung zwischen einer Schablone (template) und einem
Modellelement.
Dependency Im Metamodell (Abb. 3.26) ist Dependency eine abstrakte Metaklasse
ohne eigene Semantik, die lediglich eine gerichtete Beziehung von abhängigen Modellelementen (client) zu unabhängigen Modellelementen (supplier) repräsentiert.
3.1. FUNDAMENT
68
Relationship
+client
+clientDependency
Dependency
ModelElement
name : Name
+argument
1..*
*
1..*
*
1..*
+supplier
+supplierDependency
0..1
Binding
Usage
Abstraction
Permission
mapping : MappingExpression
Abbildung 3.26: Die vier Arten der Abhängigkeit in der UML
Abstraction Eine Abstraktion ist eine Abhängigkeitsbeziehung zwischen zwei Elementen, die das gleiche Konzept auf unterschiedlichen Abstraktionsebenen oder aus unterschiedlichen Sichten repräsentieren.
Im Metamodell beinhaltet Abstraction eine Abbildung (mapping) zwischen client
(abhängig) und supplier (unabhängig). Abhängig vom Stereotyp der Abstraktion kann
die Abbildung informal oder formal und die Abhängigkeit gerichtet oder bidirektional
sein.
Die folgenden Stereotypen einer Abstraktion sind in der UML definiert:
Stereotyp
«derive»
Semantik
(ableiten) Eine abgeleitete Abstraktionsabhängigkeit besagt, daß
die abhängigen Elemente aus der Information der unabhängigen
Elemente berechnet werden können. Z.B. kann das Alter einer Person aus dem Geburtsdatum und dem aktuellen Datum berechnet
werden. Die Abbildung spezifiziert die Berechnung (meist formal).
69
Stereotyp
«derive»
(Forts.)
«realize»
«refine»
«trace»
KAPITEL 3. METAMODELL
Semantik
Bei dieser Abstraktion sind die beteiligten Elemente nicht notwendigerweise vom gleichen Typ. Das abhängige Element kann implementiert werden, obwohl die Implementation logisch redundant ist.
Effizienz ist meist der Grund für die Implementierung.
(realisiert) Eine Realisierung ist eine Beziehung zwischen einem
spezifizierenden (supplier) und einem implementierenden Modellelement (client), z.B. zwischen einem Interface und einer
Klasse. Das implementierende Element muß die Verhaltensmerkmale des spezifizierenden Elements unterstützen. Das implementierende Element muß die Deklarationen der Verhaltenselemente
entweder erben oder selbst spezifizieren. Die Abbildung beschreibt
die (nicht notwendigerweise berechenbare) Beziehung zwischen
den Modellementen. Realisierungen können zur Modellierung der
schrittweisen Verfeinerung, Optimierung, etc. benutzt werden. Eine Realisierung besitzt eine eigene graphische Notation (Kreuzung
aus Generalisierung und Abhängigkeit), die durch weitere Stereotypen ( (noch) nicht in der UML definiert) genauer beschrieben
werden kann.
(verfeinert) Eine Verfeinerung ist eine Abstraktionsbeziehung zwischen Modellelementen auf unterschiedlichen Abstraktionsebenen,
z.B. Analyse und Design. Die Abbildung beschreibt die (nicht notwendigerweise berechenbare und vollständige) Beziehung. Eine
Beschreibung der Abbildung kann als Kommentar an die Beziehung angeheftet werden. Die Abhängigkeit kann gerichtet oder bidirektional sein. Die Verfeinerung wird zur Modellierung der Übergänge zwischen Analyse und Design (u.ä. Veränderungen) eingesetzt.
(Spur) Eine Spur ist eine Abhängigkeitsbeziehung zwischen Modellelementen, die sich in unterschiedlichen Modellen befinden,
aber das gleiche Konzept repräsentieren. Spuren werden hauptsächlich zur Ermittlung von Anforderungen und Änderungen zwischen Modellen benutzt. Diese Art der Abhängigkeit sollte von
einem Tool unterstützt werden. Da die Richtung der Abhängigkeit
meist bidirektional ist, wird sie meistens ignoriert. Die Abbildung
beschreibt die Beziehung zwischen den Modellelementen meistens
informell.
Usage Benutzung ist eine Abhängigkeitsbeziehung, in der ein Element andere Elemente zur Implementation oder zur Erfüllung seiner Funktionalität benötigt. Auf welche
Weise das abhängige Element das unabhängige benutzt, wird durch das Stereotyp der
3.1. FUNDAMENT
70
Abhängigkeitsbeziehung definiert:
Stereotyp
«call»
«create»
«instantiate»
«send»
Semantik
Call ist eine Benutzt-Abhängigkeit, dessen Quelle und Ziel
Operationen sind. Diese Beziehung kann auch an eine Klasse gerichtet sein, die eine Operation enthält. In diesem Fall
bedeutet die Abhängigkeit, daß eine Operation in der Klasse existiert, die das abhängige Modellelement anwendet. Eine Call-Abhängigkeit spezifiziert, daß die Quelloperation oder
eine Operation in der Quellklasse die Zieloperation oder eine
Operation in der Zielklasse aufruft.
Bezeichnet eine Abhängigkeit, bei der das abhängige Modellelement ein Exemplar des unabhängigen Modellelements erzeugt.
Abhängigkeitsbeziehung zwischen Klassifizierern, die anzeigt,
daß Operationen des abhängigen Elements Exemplare des unabhängigen Elements erzeugen.
Quelle dieser Benutzt-Abhängigkeit ist eine Operation, Ziel ist
ein Signal. Diese Beziehung sagt aus, daß die Quelle (eine
Operation) ein Signal sendet bzw. senden kann. Signale werden im Abschnitt 3.2 Verhaltenselemente erläutert.
Permission Eine Erlaubnis garantiert einem Modellelement den Zugriff auf Elemente in einem anderen Namensraum. Das abhängige Element muß hierbei ein Namensraum, z.B. eine Klasse, sein.
Stereotyp
«access»
«import»
«friend»
Semantik
Abhängigkeit zwischen zwei Namensräumen. Der abhängige Namensraum kann auf die öffentlichen (public) Anteile des
unabhängigen Namensraum zugreifen.
Abhängigkeit zwischen zwei Namensräumen. Der abhängige
Namensraum importiert die öffentlichen Anteile des unabhängigen Namensraum.
Abhängigkeit zwischen einem Modellelement (z.B. Operation, Klasse, Paket) und einem Modellelement in einem anderen
Paket (z.B. Operation, Klasse, Paket). Das abhängige Element
erhält, ohne Berücksichtigung der Sichtbarkeit, Zugriff auf den
unabhängigen Namensraum.
71
KAPITEL 3. METAMODELL
3.1.1.5
Kommentar
In der UML kann an jedes Modellelement eine Anmerkung, eine Notiz oder ein Kommentar geheftet werden. Die Notiz selbst hat in der UML keine Semantik, enthält aber
zusätzliche Informationen für den Modellierer.
ModelElement
name : Name
*
+annotatedElement
*
Comment
Abbildung 3.27: Jedes Modellelement kann mit beliebig vielen Kommentaren versehen
werden.
Im Metamodell werden die Kommentare durch die Klasse Comment repräsentiert, die
ein direkter Nachkomme der abstrakten Metaklasse ModelElement ist (Abb. 3.27).
Zwei Stereotypen einer Notiz/eines Kommentars sind vordefiniert:
Stereotyp
«requirement»
«responsibility»
3.1.2
Semantik
Anforderung: gefordertes Merkmal, Eigenschaft oder Verhalten eines Systems.
Verantwortlichkeit: Vertrag oder Verpflichtung eines Elements.
Erweiterungsmechanismen
Die UML besitzt eingebaute Erweiterungsmechanismen, die verschiedenen Zwecken dienen:
• Hinzufügen neuer Arten von Modellelementen.
• Definieren von Standards, die als nicht interessant oder komplex genug angesehen
wurden und deshalb nicht als Meta-Modellelemente definiert wurden.
• Definieren von prozeß- oder sprachabhängigen Erweiterungen.
• Anheften beliebiger Informationen mit bestimmter Semantik an Modellelemente.
Der wichtigste Erweitungsmechanismus ist das Stereotypkonzept. Stereotypen bieten
einen Weg, Elemente der Modellebene zu klassifizieren und ermöglichen das Hinzufügen
3.1. FUNDAMENT
72
„virtueller“ Metaklassen mit neuen Metaattributen und neuer Semantik. Eigenschaftswerte (tagged values) und Zusicherungen (constraints) basieren auf Eigenschaftslisten, die
das Anheften zusätzlicher Eigenschaften und Semantik an Modellelemente ermöglichen.
+extendedElement
+taggedValue
0..1
ModelElement
*
*
1..* {ordered}
+constrainedElement
TaggedValue
tag : Name
value : String
+requiredTag
*
GeneralizableElement
Constraint
body : BooleanExpression
+stereotypeConstraint
*
+constraint
*
{xor}
+stereotype
0..1
Stereotype
icon : Geometry
baseClass : Name
0..1 +constrainedStereotype
0..1
Abbildung 3.28: Erweiterungsmechanismen
Stereotype Ein Stereotyp ist ein UML-Modellelement, welches zur Markierung
oder Klassifizierung anderer UML-Elemente benutzt wird. Die stereotypisierten Elemente können als Exemplare neuer „virtueller“ oder „Pseudo-“ Metamodellklassen angesehen werden, die auf bestehenden Metamodellklassen basieren. Stereotypen vergrößern
den Klassifikationsmechanismus, basierend auf der Metamodellklassenhierachie, deshalb
müssen sich die Namen neuer Stereotypen von den Namen der Metamodellelemente oder
anderen Stereotypen unterscheiden. Jedes Modellelement kann durch maximal ein Stereotyp markiert werden. Ein Stereotyp kann als Spezialisierung anderer Stereotypen konstruiert werden. Ein Stereotyp kann zusätzliche Eigenschaftswerte und Zusicherungen
sowie eine neue graphische Notation definieren. Die durch das Stereotyp markierten Modellelemente erhalten diese Eigenschaftswerte, Zusicherungen und Notation. Ein stereotypisiertes Modellelement erhält die Attribute, Assoziationen und Operationen seiner
Basisklasse (aus dem Metamodell) und kann zusätzliche zur Basisklasse konsistente Zusicherungen definieren, eine andere Bedeutung haben sowie eigene Eigenschaftswerte
definieren. Exemplare stereotypisierter Elemente haben die gleiche Struktur (Attribute, Assoziationen) und das gleiche Verhalten (Operationen) wie ein vergleichbares nichtstereotypisiertes Element. Ein Stereotyp kann benutzt werden, um eine unterschiedliche
Bedeutung oder Benutzung zweier Elemente mit identischer Struktur zu indizieren.
73
KAPITEL 3. METAMODELL
Im Metamodell (Abb. 3.28) ist die Metaklasse Stereotype eine Unterklasse von
GeneralizableElement. Eigenschaftswerte und Zusicherungen eines Stereotyps werden auf alle durch das Stereotyp markierte Modellelement angewandt. Ein Stereotyp
kann optional ein Icon spezifizieren, welches zur Darstellung von Elementen des Stereotyps benutzt werden kann. Falls ein Stereotyp ein Untertyp eines anderen Stereotypen ist,
erbt es alle Eigenschaftswerte und Zusicherungen des Supertyps, wobei beide Stereotypen
die gleiche Basisklasse haben müssen.
Attribut
Semantik
baseClass
Spezifiziert den Namen einer Klasse aus dem Metamodell der
UML, auf das das Stereotyp angewandt wird, z.B. Class,
Association oder Constraint.
icon
Geometrische Beschreibung des Icons, welches zur Darstellung der durch das Stereotyp markierten Elemente benutzt
wird (optional).
Pseudottribut
extendedElement
constraint
stereotypeConstraint
requiredTag
Semantik
Bezeichnet die durch das Stereotyp klassifizierten Modellelemente. Jedes dieser Modellelemente muß von der Art des
durch baseClass spezifizierten UML-Modellelements sein.
(geerbt von ModelElement) Zusicherung, die auf das Stereotyp selbst angewandt wird.
Bezeichnet die Zusicherungen, die auf die stereotypisierten
Elemente angewandt werden.
Ein Eigenschaftswert (s.u.) ist ein Tupel bestehend aus einer
Markierung und einem Wert. requiredTag gibt die Markierungen an, die ein stereotypisiertes Element haben muß. Der
Wert gibt den Defaultwert des Eigenschaftswertes an. Falls der
Wert nicht spezifiziert ist, muß ein stereotypisiertes Element
den Wert setzen.
Die Namen der Eigenschaftswerte eines Stereotypen dürfen weder mit dem MetaAttribut-Namensraum (Meta-Ebene) der Basisklasse, noch mit den Markierungen der geerbten Stereotypen kollidieren.
Modelelement Jedes Modellelement kann beliebige Eigenschaftswerte und Zusicherungen besitzen. Ein Modellelement darf maximal ein Stereotyp, dessen Basisklasse
(baseclass) mit der UML-Klasse des Modellelements (z.B. Klasse) übereinstimmen
muß, besitzen. Die Markierung durch ein Stereotyp kann das Modellelement implizit
mit Zusicherungen versehen und die Angabe von Eigenschaftswerten erfordern.
3.1. FUNDAMENT
Pseudottribut
stereotype
constraint
taggedValue
74
Semantik
Bezeichnet maximal einen Stereotyp, der die UMLBasisklasse des Modellelements erweitert bzw.
weiter
spezifiziert. Das Stereotyp verändert nicht die Struktur
der Basisklasse, kann aber zusätzliche Eigenschaftswerte
und Zusicherungen definieren, deren Semantik auf das
stereotypisierte Element übertragen wird.
Zusicherung, die für die Exemplare des Modellelements erfüllt
sein muß. Ein Modellelement kann mehrere Zusicherungen
besitzen. Die Zusicherung wird ausgewertet, wenn das System
in einem stabilen Zustand ist (z.B. nicht innerhalb einer atomaren Operation).
Ein Eigenschaftswert, der an das Modellelement geheftet wird.
Die Markierung (tag) ist der Name12 der Eigenschaft, der
Wert ist beliebig. Die Interpretation des Eigenschaftswertes liegt außerhalb des Bereichs der UML. Ein Modellelement kann mehrere Eigenschaftswerte besitzen, die Markierung muß dabei eindeutig sein.
Die mit einem Modellelement assoziierten Markierungen (der Eigenschaftswerte) (direkt oder indirekt durch ein Stereotyp) müssen sich von den mit dem Modellelement assoziierten Metaattributen unterscheiden (man kann Eigenschaftswerte als Pseudo-Metaattribute interpretieren). Falls ein Stereotyp einen Eigenschaftswert erfordert, aber nicht
spezifiziert, muß das stereotypisierte Modellelement den Wert festlegen.
Constraint Das Konzept der Zusicherungen (engl. constraints) erlaubt die Spezifizierung neuer Semantiken für ein Modellelement. Die Spezifizierung kann durch eine
speziell entworfene Sprache für Zusicherungen (z.B. OCL, Object Constraint Language),
eine Programmiersprache, mathematische Notation oder eine natürliche Sprache formuliert werden. Wenn Zusicherungen durch ein Werkzeug weitergehend unterstützt werden
sollen, muß das Werkzeug die Syntax und Semantik der Sprache verstehen.
Im Metamodell kann eine Zusicherung direkt an Modellelemente geheftet werden
(constrainedElement), d.h. die Zusicherung wird auf die Exemplare der Modellelemente angewandt (z.B. Exemplare der Klasse Kunde). Eine Zusicherung kann ebenfalls an ein Stereotyp geheftet werden (constrainedStereotype), d.h. die Zusicherung
wird dann auf alle mit diesem Stereotyp markierten Elemente angewandt. Bezeichnet
constrainedElement ein Stereotyp, dann wird die Zusicherung auf das Stereotyp selbst
angewandt.
12 taggedValue
ist nicht als Unterklasse von ModelElement definiert, d.h. es kann weder den Namen von
ModelElement erben, noch Zusicherungen besitzen.
75
KAPITEL 3. METAMODELL
Attribut
body
Semantik
Ein boolescher Ausdruck, der die Zusicherung definiert. Damit das Modell wohldefiniert ist, muß der Ausdruck den Wert
„wahr“ ergeben, wenn er für ein Exemplar des zugesicherten
Elements (constrainedElement) ausgewertet wird. Der Ausdruck wird nur ausgewertet, wenn sich das System in einem
stabilen Zustand befindet.
TaggedValue Ein Eigenschaftswert (tagged value) ist ein (Markierung, Wert)-Paar,
welches als zusätzliche Information an ein Modellelement geheftet werden kann. Ein Modellelement kann mehrere Eigenschaftswerte besitzen, zu einem Namen einer Markierung
darf es aber nur einen Wert geben. Die Interpretation einer Markierung liegt außerhalb
des Bereichs der UML, sie muß durch Benutzer- oder Werkzeugkonventionen festgelegt
werden. Beispiele für Eigenschaftswerte sind Autor und Versionnummer, die durch ein
Werkzeug automatisiert werden könnten.
Attribut
Semantik
tag
(Marke, Markierung) Name, der die angeheftete Eigenschaft
beschreibt. Eine Markierung ist ein Pseudoattribut eines Modellelements. Ein Modellelement darf maximal einen markierten Wert pro Namen besitzen.
value
Ein (beliebiger) Wert. Aus Gründen der einheitlichen Manipulation durch Tools muß der Wert als String ausgedrückt werden. Der Wertebereich hängt von der Interpretation der Markierung ab.
3.1.3
Datentypen
Im Metamodell werden die Datentypen zur Deklarierung der Typen der Attribute der
Metaklassen benutzt. Die Datentypen, die von den Anwendern der UML benutzt werden,
sind die Exemplare der Datentyp-Metaklasse (Abb. 3.29 und 3.30).
Primitive
terstruktur.
Ein primitiver Datentyp ist ein einfacher Datentyp ohne relevante Un-
primitiver Datentyp Semantik
Integer
Im Metamodell ist ein Integer ein Element der (unendlichen)
Menge der ganzen Zahlen.
UnlimitedInteger Datentyp, dessen Wertebereich die natürlichen Zahlen inklusive des Wertes „unbegrenzt“ (unlimited) umfaßt.
3.1. FUNDAMENT
76
primitiver Datentyp Semantik
String
Im Metamodell definiert String eine beliebig lange Zeichenkette.
Time
Im Metamodell definiert Time einen Wert, der einen absoluten
oder relativen Moment in Raum und Zeit repräsentiert. Der
Wert hat eine entsprechende Darstellung als String.
DataType
Primitive
Structure
Enumeration
ProgrammingLanguageType
type : TypeExpression
1
{ordered}
1..*
+literal
EnumerationLiteral
name : Name
Abbildung 3.29: Datentypen (1)
Structure Eine Struktur ist ein spezieller Datentyp, der eine feste Anzahl von benannten Teilen hat (vergleichbar einem „Record“).
Enumeration Eine Aufzählung (enumeration) ist ein Datentyp, dessen Wertebereich
eine Liste von definierbaren Werten (EnumerationLiteral) ist. Diese Liste definiert
Atome (d.h. Elemente ohne Unterstruktur), die auf Gleichheit untersucht werden können.
Aufzählung
AggregationKind
Boolean
Semantik
Werte sind none, aggregate und composite. Diese
Werte bezeichnen die Art der Aggregation einer
Assoziation.
Werte sind true und false.
77
Aufzählung
CallConcurrencyKind
ChangeableKind
MessageDirectionKind
OperationDirectionKind
OrderingKind
ParameterDirectionKind
PseudostateKind
VisibilityKind
KAPITEL 3. METAMODELL
Semantik
Werte sind sequential, guarded und concurrent.
Sie indizieren die Semantik der Nebenläufigkeit
einer Operation.
Werte sind changeable, frozen und addOnly. Sie
spezifizieren, ob ein AssociationEnd, LinkEnd
oder AttributLink (Verweis auf ein Exemplar)
verändert werden kann.
Werte sind activation und return. Sie spezifizieren die Richtung einer Botschaft. (wird in UML
Version 1.3 final nicht mehr benutzt)
Werte sind provide und require. Sie geben an,
ob eine Operation von einem Klassifizierer unterstützt oder seine Gegenwart verlangt wird. (wird
in UML Version 1.3 final nicht mehr benutzt)
Gibt die Art der Ordnung der Exemplare an einem Assoziationsende an.
Werte sind in, out, inout und return. Sie geben
an, ob ein Parameter als Eingabe- und/oder Ausgabeparameter benutzt wird.
Werte sind initial, deepHistory, shallowHistory,
join, fork, branch, junction und final. Beschreibt
die möglichen Pseudo-Zustände eines Zustandsautomaten.
Werte sind public, protected und private. Sie geben an, ob die Elemente eines Namensraums von
außen sichtbar sind.
ProgrammingLanguageType Ein Programmiersprachentyp beschreibt einen Typ
in der Syntax einer bestimmten Programmiersprache. Dieser Typ kann zur programmiersprachenspezifischen Deklarierung von Attributen, Parametern und lokalen Variablen benutzt werden TypeExpression ist ein String, der diesen Typ definiert.
Mapping Eine Abbildung ist ein Ausdruck, der zur Abbildung von Modellelementen
benutzt wird (siehe 3.1.1.4 Abhängigkeiten, 67). Aus Gründen der Austauschbarkeit sollte dieser als String repräsentiert werden.
Name Im Metamodell definiert Name ein Token, welches zur Benennung von Modellelementen benutzt wird. Jeder Name hat eine entsprechende Darstellung als String.
3.1. FUNDAMENT
78
Expression
<<primitive>>
Integer
<<enumeration>>
AggregationKind
<<primitive>>
UnlimitedInteger
<<enumeration>>
Boolean
<<primitive>>
String
<<enumeration>>
CallConcurrencyKind
<<primitive>>
Time
<<enumeration>>
ChangeableKind
LocationReference
<<enumeration>>
MessageDirectionKind
Multiplicity
language : Name
body : String
Mapping
body : String
Name
body : String
+range
1
<<enumeration>>
OperationDirectionKind
<<enumeration>>
OrderingKind
<<enumeration>>
ParameterDirectionKind
<<enumeration>>
ScopeKind
<<enumeration>>
PseudostateKind
<<enumeration>>
VisibilityKind
Abbildung 3.30: Datentypen (2)
1..*
MultiplicityRange
lower : Integer
upper : UnlimitedInteger
79
KAPITEL 3. METAMODELL
LocationReference Ein Ortsverweis (LocationReference) bezeichnet eine Position innerhalb einer Verhaltenssequenz für die Einfügung eines erweiterten Anwendungsfalls. Dies kann z.B. eine Code-Zeile oder ein Zustand eines Zustandsautomaten
sein.
Multiplicity Im Metamodell definiert eine Kardinalität eine Menge von nichtnegativen ganzen Zahlen (Integer). Eine Menge, die nur die Null enthält ({0}), ist keine
gültige Kardinalität. Jede Kardinalität hat (mindestens) eine entsprechende Darstellung
als String. Ein Kardinalitätsbereich (MultiplicityRange) definiert einen Bereich ganzer
Zahlen (Integer). Dabei darf die obere Grenze nicht unter der unteren Grenze liegen. Die
untere Grenze muß ein nicht-negativer Integer sein, die obere Grenze kann den speziellen
Wert „unlimited“ annehmen.
Expression
language : Name
body : String
ActionExpression
BooleanExpression
ArgListsExpression
MappingExpression
IterationExpression
ProcedureExpression
ObjectSetExpression
TypeExpression
TimeExpression
Abbildung 3.31: Ausdrücke
Expression Ein Ausdruck (Abb. 3.31) wird zu einer eventuell leeren Menge von
Exemplaren ausgewertet, wenn er in einem Kontext ausgeführt wird. Ein Ausdruck verändert nicht die Umgebung, in der er ausgewertet wird. Ein Ausdruck besteht aus einem
Namen, der die Interpretationssprache (language) angibt, mit der der Ausdruck ausgewertet wird, und einem String, der den eigentlichen Ausdruck enthält (body).
Ausdruck
ActionExpression
ArgListsExpression
BooleanExpression
IterationExpression
Semantik
Die Auswertung führt zur Ausführung einer Aktion.
Die Auswertung ergibt eine eine Menge von Listen, die aus Objekten bestehen.
Boolescher Ausdruck, dessen Auswertung true
oder false ergibt.
Die Auswertung ergibt ein Iterationskonstrukt in
der durch language spezifizierten Sprache.
3.2. VERHALTENSELEMENTE
Ausdruck
MappingExpression
ObjectSetExpression
ProcedureExpression
TimeExpression
TypeExpression
3.2
80
Semantik
Die Auswertung ergibt eine Abbildung.
Die Auswertung ergibt eine Menge von Exemplaren. ObjectSetExpressions werden zur Bezeichnung der Zielexemplare einer Aktion benutzt. Der Ausdruck kann aus dem reservierten Wort „all“ bestehen, wenn er als Ziel einer
Sende-Aktion (siehe 3.2.1.2) benutzt wird. Die
Auswertung enthält dann alle Exemplare, die das
Signal empfangen können.
Die Auswertung ergibt ein Exemplar einer Prozedur.
Die Auswertung ergibt ein Exemplar von Time.
Ein String, der einen Typ in einer Programmiersprache darstellt.
Verhaltenselemente
Die UML enthält Verhaltenselemente, mit denen funktionale und dynamische Aspekte
eines Systems dargestellt werden können (Abb. 3.32).
Eine Kollaboration (Paket Collaborations) bezeichnet eine Gruppe von Objekten,
die spezielle Rollen ausüben und zusammenarbeiten, um ein Verhalten zu zeigen, das
mehr ist als die Summe seiner Einzelteile. Eine Kollaboration definiert einen Kontext,
in dem Objekte Botschaften austauschen, um eine bestimmte Aufgabe zu erfüllen. Der
Botschaftenaustausch zwischen den Objekten kann in der UML durch zwei verschiedene Interaktionsdiagramme dargestellt werden: Kollaborationsdiagramm und Sequenzdiagramm.
Ein Kollaborationsdiagramm zeigt die strukturellen Beziehungen zwischen den Objekten (Kollaboration), auf deren Basis der Botschaftenaustausch (die Interaktion) stattfindet. Die Botschaften werden zwischen den beteiligten Objekten gruppiert, d.h. die
Beziehungen und die Kommunikation zwischen den Objekten wird in den Vordergrund
gestellt. Der zeitliche Ablauf der Interaktion rückt in den Hintergrund, kann aber durch
Nummerierung der Botschaften gekennzeichnet werden
Sequenzdiagramme beschreiben ein Szenario, in dem die Interaktion von Objekten
zeitlich geordnet dargestellt wird. Im Gegensatz zum Kollaborationsdiagramm stellt ein
Sequenzdiagramm den zeitlichen Ablauf in den Vordergrund, ohne die strukturellen Beziehungen zu zeigen.
Beide Arten der Interaktionsdiagramme heben den Kontrollfluß zwischen Objekten
hervor.
Ein Zustandsdiagramm (statechart) ist die graphische Darstellung eines endlichen Au-
81
KAPITEL 3. METAMODELL
Activity Graphs
Collaborations
Use Cases
State Machines
Common
Behavior
Abbildung 3.32: Paketübersicht der Verhaltenselemente
tomaten (Paket StateMaschines). Mit endlichen Automaten kann das Verhalten von
Objekten (oder Systemen) modelliert werden, bei denen das Verhalten von ihrer Vergangenheit abhängt. Objekte können auf Ereignisse wie z.B. Signalereignisse, die asynchron
auftreten, oder Operationsaufrufe (meist synchron) reagieren. Wenn ein Ereignis eintritt,
kann findet eine Reaktion statt, die vom aktuellen Zustand des Objekts abhängt. Endliche
Automaten werden z.B. benutzt, um die Aufrufreihenfolge von Operationen auf einem
Objekt einzuschränken. Mit ihnen wird modelliert, wann eine Operation angewandt wird
(dynamisches Modell). Zustandsdiagramme zeigen den Kontrollfluß von Zustand zu Zustand, d.h. den Kontrollfluß innerhalb eines Objekts oder auch eines Systems.
Ein Aktivitätsdiagramm (Paket ActivityGraphs) zeigt den Kontrollfluß von Aktivität zu Aktivität. Aktivitätsdiagramme sind spezielle Zustandsdiagramme, deren Zustände größtenteils Aktivitätszustände sind. Ein Aktivitätsdiagramm ist im wesentlichen ein
Flußdiagramm (flowchart), welches auch nebenläufige Flüsse enthalten kann. Aktivitätsdiagramme werden zur Beschreibung komplexer Operationen oder zur Verfeinerung von
Anwendungsfällen eingesetzt.
Das Paket CommonBehavior enhält die Infrastruktur für die abhängigen Pakete aus
Abb. 3.32. Das Paket definiert Objekte, Links und andere Exemplare zur Modellierung
struktureller Beziehungen, und Signale und Aktionen (z.B. Operationsaufrufe), die von
den abhängigen Paketen benötigt werden.
3.2. VERHALTENSELEMENTE
3.2.1
82
Allgemeines Verhalten
Im Inneren des Systems kommunizieren Objekte miteinander durch das Versenden von
Botschaften. Das sendende Objekt (sender) verschickt eine Botschaft, das empfangende
Objekt (receiver) empfängt eine Botschaft. Eine Botschaft benutzt einen Link als Kommunikationskanal, über den die Botschaft zwischen den Objekten ausgetauscht wird. Eine
Botschaft kann durch Argumente näher spezifiziert werden. Eine konkrete Botschaft (ein
Exemplar einer Botschaft) wird in der UML Stimulus genannt.
Es gibt zwei grundsätzliche Arten von Botschaften:
1. Ein Signal ist eine Botschaft zwischen einem auslösenden Objekt und allen Objekten, die dieses Signal zu diesem Zeitpunkt empfangen können. Bei den Empfängern
führt der Empfang des Signals zu einer Zustandsveränderung.
2. Ein Operationsaufruf ist eine Botschaft zwischen einem Sender (dem Aufrufer)
und einem festgelegten Empfänger, der die gewünschte Operation ausführt.
Bei einem synchronen Botschaftenaustausch wartet der Sender bis der Empfänger die
Nachricht verarbeitet hat, bei asynchroner Kommunikation wartet der Sender nicht und
kann parallel weiter arbeiten. Bei sequentieller Verarbeitung ist nur ein Objekt zu einem
Zeitpunkt aktiv, während bei einer parallelen Verarbeitung mehrere Objekte zu einem
Zeitpunkt aktiv (nebenläufig) sind. Eine parallele Verarbeitung kann vorliegen, wenn das
System auf mehrere Knoten (Prozessoren) verteilt ist. Eine pseudoparallele Verarbeitung
mit Hilfe von Prozessen oder Threads auf einem Prozessor wird ebenfalls als parallel
angesehen.
Zwischen Exemplaren können verschiedene Arten von Requests (Bitten oder Aufforderungen) existieren. Die Metadarstellung der Signale, die eine Reaktion bei den Empfängern asynchron „triggern“, wird in Abschnitt 3.2.1.1 erläutert. Die Definition von
Operationsaufrufen und anderen Requests, z.B. das Erzeugen (create) oder Zerstören (destroy) von Exemplaren wird in Abschnitt 3.2.1.2 erläutert. Abschnitt 3.2.1.3 beschreibt
die Exemplare von Klassifizierern, Attributen, Assoziationen, Botschaften, Komponenten
und Knoten.
3.2.1.1 Signale
Signal Ein Signal ist die Spezifikation eines Stimulus (Anreiz) zur asynchronen Kommunikation zwischen Exemplaren.
Signale werden als Klassen mit dem Stereotyp «signal» modelliert. Die Attribute
dieser Klasse sind die Parameter des modellierten Signals.
Im Metamodell (Abb. 3.33) ist Signal eine Unterklasse von Klassifizierer (also auch
generalisierbar), die Parameter werden als Attribute (geerbt von Classifier) dargestellt.
Die Instantiierung eines Signals ergibt dann eine konkrete Botschaft (Stimulus), die zu
83
KAPITEL 3. METAMODELL
Classifier
+signal
Signal
+raisedSignal
+context
*
*
1
BehavioralFeature
Exception
0..*
+reception
Reception
isPolymorphic : Boolean
specification : String
Abbildung 3.33: Signal, Ausnahme und Empfang
einem (Signal-) Ereignis beim Empfänger führt. Ein Signal kann mit einem Verhaltensmerkmal des Senders (context) und mit einem Verhaltensmerkmal des Empfängers
(reception) assoziiert sein.
Exception Eine Ausnahme ist ein Signal, welches von Klassifizierern typischerweise
zur Behandlung von Fehlern abgesandt wird.
Im Metamodell ist Exception eine Unterklasse von Signal und kann mit den Verhaltensmerkmalen (context), und damit mit den Klassifizierern, die dieses Signal absetzen
können, assoziiert sein.
Reception Ein Empfang ist eine Deklaration eines Klassifizierers, auf den Empfang
eines Signals (signal) vorbereitet zu sein und entsprechend zu reagieren. Die Reaktion
auf den Empfang wird durch einen String (specification) zusammenfassend beschrieben. Detailliert beschrieben wird die Reaktion auf den Empfang des Signals, die zu einer
Zustandsveränderung (des Exemplars) des Klassifizierers führen muß, durch einen Zustandsautomaten.
Im Metamodell ist Reception eine Unterklasse von Verhaltensmerkmal (BehavioralFeature), d.h. es erbt die Attribute isAbstract, isLeaf und isRoot. Falls das
Attribut isPolymorphic den Wert false besitzt, ist die Reaktion auf den Empfang immer
3.2. VERHALTENSELEMENTE
84
gleich, z.B. wenn das empfangende Exemplar nur in einem Zustand das Signal empfangen kann, also so gesehen keine Vergangenheit hat). Ansonsten kann das Verhalten vom
Zustand des empfangenden Exemplars abhängen.
3.2.1.2
Aktion
Eine Aktion ist eine ausführbare, atomare Verarbeitung, die zu einer Zustandsveränderung des Systems führt. Die verschiedenen Arten einer Aktion (Abb. 3.34) sind das
Senden eines Signals (SendAction), der Aufruf einer Operation (CallAction), das Erzeugen (CreateAction), die Selbstzerstörung (TerminateAciton) und das Zerstören
(DestroyAction) eines Exemplars, die Zuweisung eines Wertes (AssignmentAction)
und die Rückgabe (ReturnAction) eines Wertes.
Action Eine Aktion kann den oder die Empfänger einer Botschaft (targetSetExpression), deren Argumente (actual) und die Art der Kommunikation (isAsynchronous)
spezifizieren. Das Attribut recurrence ist ein Iterationsausdruck, der angibt, wie die
Empfänger abgearbeitet werden bzw. wie oft die Botschaft abgeschickt wird. Action ist
eine abstrakte Metaklasse.
Das Ausführen einer Aktion bedeutet die Auswertung der Metaattribute und führt
meistens zum Versenden eines Stimulus oder mehrerer Stimuli.
Attribut
isAsynchronous
recurrence
target
script
Pseudoattribut
actual
Semantik
Gibt an, ob die Botschaft (bzw. der Stimulus) asynchron ist
oder nicht.
Iterationsausdruck, der angibt, wie oft die Aktion ausgeführt
wird.
Ein TargetSetExpression, der zu einer eventuell leeren Menge
von Exemplaren, die die Empfänger der Botschaft (der Stimuli) sind, ausgewertet wird. In der UML ist nicht definiert, ob
die Aktion sequentiell oder parallel auf ihre Ziele angewandt
wird.
Ein Ausdruck, der die Auswirkungen der Aktion beschreibt.
Semantik
Eine Argumentliste, die Ausdrücke zur Bestimmung der zur
Ausführungszeit der Aktion zu benutzenden Argumente (Exemplare) enthält.
Classifier
1
+instantiation
0..*
Abbildung 3.34: Aktionen
AssignmentAction
+action
+operation
Operation
1
*
CallAction
0..1
CreateAction
ActionSequence
{ordered}
ModelElement
ReturnAction
Action
Argument
Signal
1
*
+signal
TerminateAction
+actual
{ordered}
SendAction
0..1
*
value : Expression
UninterpretedAction
DestroyAction
85
KAPITEL 3. METAMODELL
3.2. VERHALTENSELEMENTE
86
ActionSequence Eine Aktionssequenz ist eine geordnete Folge von Aktionen, die
sequentiell als atomare Einheit ausgeführt wird. Sie wird benutzt, um eine Aktion eines
Zustands oder einer Transition in einem Zustandsautomaten zu beschreiben.
CreateAction Eine Erzeuge-Aktion ist eine Aktion, die ein Exemplar eines Klassifizierers erzeugt. Im Metamodell ist CreateAction eine Unterklasse von Action, die
mit genau einem Klassifizierer assoziiert ist. Eine Erzeuge-Aktion hat kein durch target
angegebenes Ziel bzw. Empfänger. Der zu instantiierende Klassifizierer wird durch das
Pseudoattribut instantiation angegeben.
DestroyAction Eine Zerstöre-Aktion führt zur Zerstörung eines Exemplars. Das betreffende Exemplar wird durch das target-Attribut der Aktion spezifiziert. Eine ZerstöreAktion hat keine Argumente.
TerminateAction Eine Terminiere-Aktion führt zur Selbstzerstörung eines Exemplars. Das Ziel dieser Anweisung ist implizit das Exemplar, welches die Aktion ausführt,
d.h. es gibt kein explizites Ziel.
CallAction Eine Aufruf-Aktion ist eine Aktion, die eine Operation eines Exemplars
aufruft. Der Aufruf kann synchron oder asynchron sein. Das Exemplar oder die Menge
von Exemplaren wird durch das Attribut target, die Argumente werden durch das (geerbte) Pseudoattribut actual und die aufzurufende Operation wird durch das Pseudoattribut operation spezifiziert. Die Anzahl der Argumente muß mit der Anzahl der Parameter der Operation übereinstimmen. Die Übereinstimmung der Typen der Argumente mit
den Typen der Parameter wird nicht gefordert! Dies ermöglicht die Argumentübergabe
an eine Operation auf verschiedene Arten (siehe Seite 174) .
ReturnAction Eine Rückgabe-Aktion ist eine Aktion, die dem Aufrufer einen Wert
zurückliefert. Im Metamodell werden die Werte durch die von Action geerbten Argumente repräsentiert. Eine Rückgabe-Aktion hat kein explizites Ziel, das implizite Ziel
dieser Aktion ist das aktivierende Exemplar, welches, z.B. durch einen Operationsaufruf, eine Folge von Aktionen aktiviert hat, die durch die Rückgabe-Aktion abgeschlossen
wird.
AssignmentAction Eine Zuweisungs-Aktion ist eine Aktion, die einem Link oder
einem Attributlink (Exemplar eines Attributs) einen Wert zuweist. Im Metamodell wird
das zugewiesene Exemplar (der Wert) durch das Argument der Aktion spezifiziert.
87
KAPITEL 3. METAMODELL
Eine Zuweisungs-Aktion besitzt die (nicht explizit dargestellten) Pseudoattribute association und attribute (siehe Abb. 3.36)13 . Sie bezeichnen die Assoziation, welcher
ein Link bzw. das Attribut, welchem ein Attributlink zugewiesen wird.
SendAction Eine Sende-Aktion sendet ein Signal. Ein Signal ist immer asynchron.
Das Signal kann an bestimmte Empfänger oder an eine Menge unbestimmter Empfänger gesandt werden (via target). Hat target den Wert all, wird das Signal an alle
Objekte, die das Signal empfangen können, gesandt. Ist das Signal z.B. eine Ausnahme (exception), wird der Empfänger durch den Mechanismus des Laufzeitsystems bestimmt14 .
+signal
SendAction
*
Signal
1
Abbildung 3.35: Sende-Aktion
Im Metamodell (Abb. 3.35) ist SendAction mit dem zu sendenen Signal assoziiert,
die Argumente werden durch das von Action geerbte Pseudoattribut actual spezifiziert.
Die Ausführung einer Sende-Aktion instantiiert ein Signal mit den angegebenen Parametern (Stimulus).
Die Anzahl der Argumente muß mit der Anzahl der Parameter (Attribute) des Signals
übereinstimmen. Auch hier wird wieder nur die Übereinstimmung der Anzahl der Argumente und Parameter gefordert.
UninterpretedAction Eine nichtinterpretierte Aktion ist eine Aktion, die nicht
explizit in der UML definiert ist. Sie ist vorgesehen für sprachspezifische Anweisungen,
die nicht den anderen Aktionen zugeordnet werden können.
3.2.1.3
Exemplare und Links
Dieser Abschnitt beschreibt Modellelemente (Abb. 3.36), die für eine exemplarische Darstellung von Struktur- und Verhaltensaspekten benötigt werden.
Instance Ein Exemplar (Instanz) definiert ein „Ding“, auf welches Operationen angewendet werden können und einen Zustand hat, der die Auswirkungen der Operation
speichert.
Im Metamodell ist Instance mit mindestens einem Klassifizierer (classifier) verbunden, welcher Struktur und Verhalten des Exemplars deklariert. Ein Exemplar kann
13 Vermutlich
sind hier die Pseudoattribute des Arguments der Zuweisungsaktion gemeint. Dies geht aus
der Dokumentation nicht hervor ([OMG99], Seite 2-86)
14 Siehe [OMG99], Seite 2.91
Classifier
Attribute
DataValue
1..*
+classifier
1
+attribute
*
*
+slot
0..1
*
1
*
*
0..1
+argument
{ordered}
Instance
+resident
+resident
+value
ComponentInstance
1
0..*
AttributeLink
*
*
*
1
1 +sender
NodeInstance
+receiver
*
Stimulus
+dispatchAction
Action
recurrence : IterationExpression
target : ObjectSetExpression
isAsynchronous : Boolean
script : ActionExpression
1
*
0..1
+communication
LinkObject
Object
+instance
1
*
ModelElement
1
1
+association
Association
1
*
Link
2..*
+connection
*
AssociationEnd
1
*
LinkEnd
+associationEnd
{ordered} 2 .. *
+connection
+linkEnd
3.2. VERHALTENSELEMENTE
88
Abbildung 3.36: Metamodell: Exemplare und Links
89
KAPITEL 3. METAMODELL
eine Menge von Attributen und Attributwerten besitzen. Im Metamodell besitzt ein Exemplar Attributlinks (slot, Fach), die auf die Attribute und Attributwerte verweisen.
Ähnlich wie Klassifizierer mit Assoziationsenden zur Darstellung einer Assoziation
verbunden sein können, werden ihre Exemplare mit den entsprechenden Link-Enden (Exemplar eines Assoziationsendes) zur Darstellung eines Links verbunden. Ein Exemplar
kann auch als Sender und Empfänger von Stimuli, d.h. konkreter Botschaften, dargestellt
werden. Instance ist eine abstrakte Metaklasse, für die ein Eigenschaftswert vordefiniert
ist:
Eigenschaftswert
Semantik
persistent
Wird der Wert der Eigenschaft mit „persistent“ gekennzeichnet, dann wird der Zustand des Exemplars nicht zerstört wenn
das Exemplar zerstört wird, d.h. der Zustand wird gespeichert.
Wird der Wert mit „transitory“ gekennzeichnet, dann wird der
Zustand mit dem Exemplar zerstört.
DataValue Ein Datenwert ist ein Exemplar ohne Identität. Im Metamodell ist DataValue ein Nachkomme von Instance, welches seinen Zustand nicht ändern kann, d.h.
alle auf einen Datenwert anwendbare Operationen sind reine Funktionen (keine Seiteneffekte) oder Abfragen (Query). Datenwerte werden als Attributwerte (value) benutzt.
Ein Datenwert wird von genau einem Klassifizierer (ein DataType) erzeugt und hat keine
Attributlinks, d.h. keine Attribute.
Object Ein Objekt ist ein Exemplar einer Klasse. Im Metamodell ist Object eine
Unterklasse von Instance. Ein Objekt ist das Exemplar mindestens einer Klasse. Die
Klassenzugehörigkeit eines Objekts kann dynamisch modifiziert werden, d.h. die Merkmale eines Objekts können sich währernd seiner Lebensdauer ändern. Jeder Klassifizierer
(classifier) eines Objekts muß ein Exemplar der Metaklasse Class sein.
ComponentInstance Ein Komponentenexemplar ist ein Exemplar einer Komponente und kann mehrere Zustände haben. Im Metamodell kann eine Komponenteninstanz mit Exemplaren assoziiert sein (resident), die Exemplare innerhalb einer Komponente repräsentieren. Ein Komponentenexemplar kann von genau einer Komponente
(classifier) erzeugt werden.
NodeInstance Ein Knotenexemplar ist ein Exemplar eines Knotens und kann Komponentenexemplare enthalten (resident). Jedes Komponentenexemplar, das sich auf
einem Knotenexemplar befindet, muß ein Exemplar einer Komponente sein, die sich auf
dem entsprechenden Knoten befindet. Der Klassifizierer eines Knotenexemplars muß ein
3.2. VERHALTENSELEMENTE
90
Exemplar der Metaklasse Node sein15 .
Linkobject Ein Linkobjekt ist ein Exemplar einer Assoziationsklasse. Im Metamodell ist ein Linkobjekt eine Verbindung zwischen Exemplaren, wobei die Verbindung
selbst Attributwerte besitzen kann und auf die Verbindung Operationen angewendet werden können. LinkObject ist ein Nachkomme von Object und Link. Ein Klassifizierer
des Linkobjekts muß mit der entsprechenden Assoziation übereinstimmen, die Assoziation muß ein Exemplar der Metaklasse AssociationClass sein16 .
Stimulus Ein Stimulus (Abb. 3.37) beschreibt eine Kommunikation zwischen zwei
Exemplaren.
Pseudoattribut
receiver
sender
argument
Semantik
Ein Exemplar, welches den Stimulus empfängt.
Ein Exemplar, welches den Stimulus sendet.
Eine Folge von Exemplaren, die die Argumente der konkreten
Nachricht sind.
communicationLink Ein Link, der zur Kommunikation genutzt wird.
dispatchAction
Eine Aktion, die bei ihrer Ausführung den Stimulus abschickt.
Die Anzahl der Argumente muß mit der Anzahl der Argumente der Aktion übereinstimmen. Die Aktion muß eine Sende-Aktion, eine Aufruf-Aktion, eine Erzeuge-Aktion
oder eine Zerstöre-Aktion sein.
Link Ein Link (Abb. 3.37) bezeichnet eine Verbindung zwischen Exemplaren. Im
Metamodell ist ein Link ein Exemplar einer Assoziation (association). Ein Link besitzt
eine (geordnete) Menge von Link-Enden (connection), die den Assoziationsenden der
Assoziation entsprechen müssen. Es darf keine Links einer Assoziation geben, die die
gleichen Instanzen auf die gleiche Art verbinden, d.h. jedes Tupel (als Exemplar einer
Assoziation) ist eindeutig.
LinkEnd Ein Link-Ende (Abb. 3.37) ist ein Exemplar eines Assoziationsendes, d.h.
ein Endpunkt eines Links. Im Metamodell ist LinkEnd der Teil des Links, der den Link
mit einem Exemplar (instance) verbindet. Ein Link-Ende entspricht genau einem Assoziationsende (associationEnd) der Assoziation des Links. Der Typ des Exemplars des
Link-Endes muß mit dem Typ des Assoziationsendes übereinstimmen.
15 Weitere Unterklassen von Node im Metamodell können so in weiteren Versionen der UML hinzugefügt
werden.
16 In weiteren Versionen werden eventuell Unterklassen von AssociationClass eingeführt.
91
KAPITEL 3. METAMODELL
Action
ModelElement
recurrence : IterationExpression
target : ObjectSetExpression
isAsynchronous : Boolean
script : ActionExpression
+dispatchAction
name : Name
1
*
*
*
*
2 .. *
{ordered}
1
0..1
*
+association
1
Association
* +sender 1
Instance
LinkEnd
+linkEnd
*
*
*
{ordered}
+argument
+connection
Link
+communicationLink
Stimulus
+receiver 1
1
+associationEnd 1
+connection
AssociationEnd
2..*
+instance
1
Abbildung 3.37: Link und Stimulus
Links bilden eine Verbindung zwischen Exemplaren, über die in Kollaborationsdiagrammen Stimuli verschickt werden (communicationLink). Es sind mehrere Zusicherungen für Link-Enden definiert, die in Kollaborationsdiagrammen verwendet werden:
Zusicherung
association
destroyed
new
transient
global
local
parameter
self
Semantik
Das mit dem Link-Ende assoziierte Exemplar ist durch eine
Assoziation sichtbar.
Das Exemplar wird während der Ausführung (in dem modellierten Kontext) zerstört.
Das Exemplar wird während der Ausführung erzeugt.
Das Exemplar wird während der Ausführung erzeugt und zerstört.
Das Exemplar ist sichtbar, da es in einem globalen Bereich
(scope) relativ zum Link liegt (globale Variable).
Das Exemplar ist sichtbar, da es in einem lokalen Bereich (scope) relativ zum Link liegt (lokale Variable).
Das Exemplar ist sichtbar, da es ein Parameter relativ zum Link
ist.
Das Exemplar ist sichtbar, da es der Absender eines Requests
an sich selbst ist.
3.2. VERHALTENSELEMENTE
3.2.2
92
Kollaborationen
Eine Kollaboration bezeichnet „[...] Gruppen von Objekten, die spezielle Rollen ausüben
und zusammenarbeiten, um ein Verhalten zu zeigen, das mehr ist als die Summe seiner
Einzelteile. Diese Rollen repräsentieren prototypische Instanzen von Klassen, Schnittstellen, Komponenten, Knoten und Anwendungsfällen“17 . Eine Kollaboration definiert einen
strukturellen Kontext als Basis für eine Interaktion zwischen den beteiligten Objekten.
Eine Interaktion von Modellelementen wird in der UML durch Interaktionsdiagramme dargestellt, von denen es zwei Versionen gibt: Sequenzdiagramme und Kollaborationsdiagramme. Ein Sequenzdiagramm hebt den zeitlichen Ablauf von Kommunikationen
zwischen Objekten hervor, ohne die strukturellen Beziehungen zwischen den Objekten zu
zeigen (Abb. 3.38) . Ein Kollaborationsdiagramm enthält die strukturellen Beziehungen
zwischen den beteiligten Modellelementen (die Kollaboration) und darauf aufbauend die
Interaktion zwischen den Modellelementen, wobei der zeitliche Ablauf durch sogenannte
Sequenznummern notiert wird.
Ein Kollaborationsdiagramm kann auf zwei verschiedenen Ebenen bzw. durch zwei
verschiedene Sichten auf die Zusammenarbeit der Modellelemente dargestellt werden.
Ein Kollaborationsdiagramm der Spezifikationsebene (Abb. 3.39) enthält Klassifiziererund Assoziationsrollen zur Darstellung des Strukturaspekts sowie Botschaften (messages)
zwischen den Klassifiziererrollen zur Spezifikation der Kommunikation. Die Rollen sind
Einschränkungen der Eigenschaften der Klassifizierer und Assoziationen, so daß nur die
für die Zusammenarbeit benötigten Merkmale gezeigt werden.
Eine Kollaboration auf einer exemplarischen Ebene kann als Instantiierung der Spezifikationsebene aufgefaßt werden. Ein Diagramm dieser Ebene enthält Exemplare von
Klassifizierern (meist Objekte), Links und Stimuli. Ein Kollaborationsdiagramm der (exemplarischen Ebene) ist semantisch äquivalent zu einem Sequenzdiagramm, da beide aus
den gleichen Informationen im Metamodell abgeleitet werden. Das bedeutet aber nicht,
daß beide Diagramme explizit die gleiche Information darstellen18 . Auf der exemplarischen Ebene kann die Erzeugung, Benutzung oder Zerstörung von Objekten bzw. Links
explizit gezeigt werden (Abb. 3.38).
Notation der Rollen in einer Kollaboration Eine Klassifiziererrolle dient zur Einschränkung der in der Kollaboration benötigten Merkmale einer Klasse und wird in einem
Klassenrechteck dargestellt. Das Klassenrechteck enthält, neben optionalen Attributen
und Operationen, eine Zeichenkette nach dem folgenden Muster:
/ Klassifiziererrolle : Klassifizierername
Eine Assoziationsrolle wird mit der normalen Assoziationslinie gezeigt. Die optionale
Benennung der Assoziationsrolle folgt der Syntax für die Klassifiziererrolle. Die Notation
für die Assoziationsendrollen entspricht der Notation für die Assoziationsenden.
17 [BRJ99a],
18 vgl.
Seite 231
[BRJ99a], Seite 282
93
KAPITEL 3. METAMODELL
3 UML Notation
ob3:C3
ob4:C4
op()
ob1:C1
[x>0] foo(x)
ob2:C2
[x<0] bar(x)
doit(z)
doit(w)
more()
Abbildung 3.38: Visualisierung einer Interaktion durch ein Sequenzdiagramm. Die vertiFigure 3-48 Sequence Diagram with Focus of Control, Conditional, Recursion,
kal gestricheltenCreation,
Linien
die Lebenslinien der Objekte. Die diese Liandsind
Destruction.
nien überlagernden Rechtecke kennzeichnen den Kontroll- oder Steuerungsfokus der Objekte. Sie geben an, wann ein Objekt innerhalb des
Programmablaufs die Kontrolle erhält. Eine Botschaft bzw. ein Stimulus an ein Objektrechteck stellt die Erzeugung eines Objekts, ein Kreuz
am Ende der UML
Lebenslinie
eines Objekts innerhalb der Se3-98
V1.3 beta R1 die Zerstörung
April 1999
quenz dar. Alternative Abläufe werden durch Botschaften dargestellt,
die eine Bedingung enthalten und deren Pfeile den gleichen Startpunkt
besitzen. (entnommen aus [OMG99], Seite 3-98)
3.2. VERHALTENSELEMENTE
94
Assoziationsendrolle
Klassifiziererrolle
/Leiter:Person
Projektleiter
Gruppenleiter
leitet
1
Mitarbeiter
*
/Mitarbeiter:Person
Teilnehmer
1
verantwortlich für +Projekt
*
Projekt
*
Projekt
*
Kardinalität
Assoziationsrolle
Abbildung 3.39: Kollaboration auf der Spezifikationsebene ohne Interaktion. Hinweise
auf Kollaborationsdiagramme auf der Spezifikationsebene fanden sich
nur in der offiziellen UML-Dokumentation ([OMG99], Seite 3-111).
Ein Beispiel einer Interaktion im Kontext einer solchen Kollaboration
ist selbst dort nicht vorhanden.
...
UML-Tool : Projekt
1: NamenBeteiligter()
/Mitarbeiter : Person
1.1* [i=1..n]: name := name()
1.2: name := name()
Multiobjekt
/Leiter : Person
Abbildung 3.40: Kollaboration auf der exemplarischen Ebene. Der Stern „*“ der Botschaft/des Stimulus 1.1 kennzeichnet eine Iteration. Es ist leider nicht
visuell erkennbar, welche Botschaften innerhalb der Iteration bearbeitet werden. Erweiterte Modellierungsmöglichkeiten wie Verzweigungen und Iterationen lassen Interaktionsdiagramme unübersichtlich (siehe auch Abb. 3.38) werden.
Chart Nam
Chart File
Chart Typ
95
KAPITEL 3. METAMODELL
Ein Objekt, welches die durch eine Klassifiziererrolle definierte Rolle spielt, wird
durch eine Objektbox (siehe Abb. 3.40), meistens ohne Attributanteile, dargestellt. Der
Namensanteil der Objektbox wird nach dem folgenden Muster dargestellt:
Objektname / Klassifiziererrolle : Klassifizierername
Der Objektname ist optional, d.h. eine Objektbox ohne Objektnamen wird als anonymes Objekt der Klasse angesehen. Die Klassifiziererrolle kann weggelassen werden,
falls von den Objekten der Basisklasse nur eine Rolle innerhalb der Kollaboration gespielt
wird.
Interaktion Eine Interaktion ist eine Spezifikation des Verhaltens von Objekten in einem Kontext (Kollaboration), um eine bestimmte Aufgabe zu erfüllen. Hierauf aufbauend können mögliche Interaktionsfolgen spezifiziert werden. Die Interaktionsfolge kann
durch eine einzelne Beschreibung, die Bedingungen und Verzweigungen enthält, oder
durch mehrere Beschreibungen, die jeweils einen bestimmten Pfad enthalten, spezifiziert
werden.
Eine Kommunikation wird durch eine Botschaft (message) spezifiziert, die Senderund Empfängerrollen sowie eine Aktion enthält, welche die Kommunikation initiiert. Die
Aktion gibt die Art der Kommunikation (z.B. Operationsaufruf) zusammen mit Argumentausdrücken an, welche die zu sendenden Parameter bestimmen. Als Folge der Ausführung der Aktion werden ein oder mehrere Stimuli entsprechend der Botschaft abgesetzt. Ein Stimulus enthält Referenzen auf die Sender- und Empfängerobjekte sowie eine
Folge von Objektreferenzen als Resultat der Auswertung der Argumentausdrücke.
Interaktionen werden durch Sequenz- oder Kollaborationsdiagramme dargestellt. Sequenzdiagramme (Abb. 3.38) zeigen den Verhaltensaspekt einer Kollaboration inklusive
der zeitlichen Folge der Botschaften/Stimuli. Kollaborationsdiagramme zeigen den vollständigen Kontext einer Interaktion, der zeitliche Ablauf ist aber in einem Sequenzdiagramm visuell leichter zu erfassen.
Botschaften und Stimuli in einem Kollaborationsdiagramm Ein Stimulus ist die
Kommunikation von einem Objekt zu einem anderen, während eine Botschaft die Spezifikation der Kommunikation ist.
Die Darstellungsart eines Pfeils entlang einer Assoziationslinie oder eines Links gibt
die Art der Kommunikation, z.B. synchron oder asynchron, an. Die Pfeile in Abb. 3.40
bezeichnen (verschachtelte) Operationsaufrufe. Dabei muß die verschachtelte Sequenz
(angegeben durch Sequenznummern) vollständig beendet werden, bevor die äußere Sequenz fortgesetzt werden kann.
In der Nähe des Pfeils wird die Botschaft (bzw. der Stimulus) angegeben. Die Botschaft hat die folgende Syntax ([OMG99], Seite 3-123):
Vorgänger Bedingung Sequenzausdruck Rückgabewert :=
Botschaftsname Argumentliste
3.2. VERHALTENSELEMENTE
96
Vorgänger ist eine durch Kommata getrennte Liste von Sequenznummern (siehe Sequenzausdruck) ohne Verzweigungsbedingung oder Iterationsausdruck, gefolgt von einem Slash (/). Dies bedeutet, daß die durch die Sequenznummern bezeichneten Botschaften vor dem Absetzen dieser Botschaft bearbeitet worden sein müssen. Die implizit durch
die Sequenznummer gegebenen Vorgänger (1.2.3 ist Vorgänger von 1.2.4) müssen hierbei
nicht explizit angegeben werden. Vorgänger werden benutzt, um nebenläufige Threads zu
synchronisieren.
Die Bedingung ist in [OMG99] nicht definiert. Nach [Alh98], Seite 183, ist die Bedingung eine in eckige Klammern gefaßte boolesche Bedingung, deren Erfüllung den
Versand der Botschaft ermöglicht.
Der Sequenzausdruck besteht aus einer durch Punkte getrennten Liste von Sequenztermen gefolgt von einem Doppelpunkt:
Sequenzterm . ... :
Jeder Term stellt eine Verschachtelungsebene innerhalb der gesamten Interaktion dar.
Jeder Sequenzterm hat die folgende Syntax:
[integer | name ] [recurrence]
integer ist eine positive Zahl, die die sequentielle Ordnung der Botschaft innerhalb
der nächst höheren Ebene repräsentiert (Botschaft 1.2.4 folgt Botschaft 1.2.3).
name ist ein String und repräsentiert einen nebenläufigen Thread. Botschaften, die
sich in dem Namen auf dieser Ebene unterscheiden (z.B. 1.2.3.a und 1.2.3.b) sind nebenläufig innerhalb dieser Verschachtelungsebene.
recurrence ist eine Bedingungsklausel ([ Bedingungsklausel ] ) oder eine Iterationsklausel (* [ Iterationsklausel ]). Die Form der Bedingungsklausel und der Iterationsklausel ist nicht von der UML vorgegeben. Eine Iteration gibt die Wiederholungshäufigkeit
der Botschaft an, z.B. [i = 1..n]. Die Botschaften werden sequentiell ausgeführt. Mit
„∗k“ kann die nebenläufige Ausführung spezifiziert werden. recurrence wird auf das
recurrence-Attribut der mit der Botschaft assoziierten Aktion (Action), z.B. ein Operationsaufruf, abgebildet.
Eine Bedingungsklausel gibt an, daß die Ausführung der Botschaft vom Wahrheitswert der Bedingungsklausel abhängt. Beispiel: [x < y]. Bedingungsklauseln werden benutzt, um bedingte Verzweigungen zu realisieren.
Der Rückgabewert besteht aus einer Liste von Bezeichnern, die die Rückgabewerte
am Ende der Kommunikation repräsentieren. Diese Bezeichner können als Argumente in
nachfolgenden Botschaften benutzt werden.
Der Botschaftsname ist der Name des Ereignisses, welches im Zielobjekt passiert.
Dies ist meist das Ereignis eines Requests, eine Operation auszuführen. Falls diese Botschaft als Operationsaufruf implementiert wird, ist der Botschaftenname der Name der
Operation und die Klasse des Empfängers der Botschaft muß diese Operation deklarieren
oder erben.
Die Argumentliste besteht aus einer geklammerten und durch Kommata getrennten
Liste von Argumenten (Aktualparameter). Jedes Argument ist entweder eine Objektreferenz oder ein Pseudocodeausdruck. Die Ausdrücke können Rückgabewerte vorheriger
97
KAPITEL 3. METAMODELL
Botschaften und Navigationsausdrücke ausgehend vom Quellobjekt benutzen. Navigationsausdrücke bestehen aus Attributen und Links des Quellobjekts und aus Attributen und
Links anderer Objekte, die durch die Links des Quellobjekts erreichbar sind. Auch hier
wird die Syntax der Ausdrücke nicht in der UML definiert.
Sequenzdiagramm Ein Sequenzdiagramm hat zwei Dimensionen. Die vertikale Dimension repräsentiert den zeitlichen Ablauf, die horizontale Dimension die beteiligten
Objekte. Syntax und Semantik der Botschaften entsprechen den Botschaften in den Kollaborationsdiagrammen. Verschiedene zusätzliche Informationen, z.B. Zeitmarken und
...
UML-Tool : Projekt
1: NamenBeteiligter()
/Mitarbeiter : Person
/Leiter : Person
1.1* [i=1..n]:
name := name()
1.2: name := name()
Beteiligte
Abbildung 3.41: Interaktion aus Abb. 3.40 in einem Sequenzdiagramm. Die Sequenznummern werden üblicherweise nicht dargestellt, da die Folge der Botschaften implizit gegeben ist.
Aktionsbeschreibungen, können am Rand des Diagramms oder in der Nähe der Pfeile
dargestellt werden.
Die Interaktionen der Kollaborations- und Sequenzdiagramme werden auf die gleichen Klassen des Metamodells abgebildet. Deshalb werden die beiden Interaktionsdiagramme als semantisch äquivalent angesehen, obwohl jede Diagrammart Modellelemente
darstellen kann, die die andere Diagrammart nicht darstellen kann.
Das Metamodellpaket Collaborations (Abb. 3.42) besteht u.a. aus der Klasse Collaboration, die aus einer Komposition von Rollen (AssociationRole, ClassifierRole) und Interaktionen (Interaction) besteht. Interaction beinhaltet eine Menge
von halbgeordneten Botschaften (Message), die jeweils mit einer Aktion assoziiert sind.
Klassen, die auf eine Kollaboration der exemplarischen Ebene schließen lassen, sind
in diesem Paket nicht vorhanden.
Abbildung 3.42: Kollaboration
AssociationEnd
+base
0..1
*
+/connection
0..1
+availableQualifier
Attribute
*
*
AssociationEndRole
collaborationMultiplicity : Multiplicity
2..*
+connection
2..*
*
1
+base
0..1
+/ownedElement
AssociationRole
multiplicity : Multiplicity
1
Association
*
1
*
Feature
+communication
Connection
+constrainingElement
*
+/type
*
*
1
*
1
*
+message
+sender
1
*
+interaction
+context
Message
1..*
1
Interaction
*
1
ClassifierRole
multiplicity : Multiplicity
+receiver
+availableContents
+availableFeature
*
ModelElement
*
*
Collaboration
Namespace
*
1..*
*
*
0..1
1
{xor}
Action
+/ownedElement
1
+action
*
+activator
*
+predecessor
*
*
+represented
Classifier
0..1
0..1
+represented
Operation
1
Classifier
Operation
+base
3.2. VERHALTENSELEMENTE
98
99
KAPITEL 3. METAMODELL
Collaboration Eine Kollaboration beschreibt, wie eine Operation (representedOperation) oder ein Klassifizierer (representedClassifier) (z.B. ein Anwendungsfall) durch die Benutzung von Klassifizierern und Assoziationen auf eine bestimmte Weise realisiert wird. Die Kollaboration definiert Rollen, die von Exemplaren und Links
gespielt werden, und Interaktionen, die die Kommunikationen zwischen den Exemplaren
definieren, während sie ihre Rollen spielen.
Eine Kollaboration spezifiert eine Sicht auf eine Gruppe von Klassifizierern. Diese
Sicht beschreibt die benötigten Beziehungen zwischen den Exemplaren der entsprechenden Rollen der Klassifizierern sowie die benötigten Merkmale und enthaltenen Modellelemente dieser Klassifizierer.
Verschiedene Kollaborationen können verschiedene Sichten auf die gleichen Klassifizierer beschreiben. Eine Kollaboration kann Modellelemente beinhalten, meistens Klassifizierer und Generalisierungen, die zur Darstellung der strukturellen Anforderungen zur
Erfüllung der Aufgabe der Kollaboration benutzt werden.
Eine Kollaboration ist ein verallgemeinerbares Element, d.h. sie kann eine Aufgabe
spezifizieren, die eine Spezialisierung der Aufgabe einer anderen Kollaboration ist.
Pseudoattribut
ownedElement
interaction
constrainingElement
Semantik
(geerbt von Namespace) Rollen, die durch die Kollaboration definiert sind. Dies sind ClassifierRoles und
AssociationRoles.
Bezeichnet die Interaktionen, die innerhalb der Kollaboration
definiert sind.
Modellelemente, die den Modellelementen der Kollaboration
weitere Bedingungen hinzufügen (z.B. Generalisierungen, Zusicherungen).
Die Klassifizierer der Klassifiziererrollen, die Assoziationen der Assoziationsrollen
und die zugesicherten Modellelemente (constrainingElement) müssen zum Namensraum der Kollaboration gehören. Falls eine Klassifizierer- oder Assoziationsrolle keinen
Namen hat, sollte sie die einzige ihres Basisklassifizierers bzw. ihrer Basisassoziation
sein. Eine Kollaboration (im strukturellen Sinne) kann nur Klassifiziererrollen, Assoziationsrollen sowie die Generalisierungen und Zusicherungen zwischen ihnen enthalten.
Interaction Eine Interaktion spezifiziert die Kommunikation zwischen Modellelementen zur Erfüllung einer bestimmten Aufgabe. Jede Interaktion ist im Kontext
(context) einer Kollaboration definiert, d.h. auch für ein Sequenzdiagramm muß zumindest implizit ein Kontext existieren.
Im Metamodell enthält eine Interaktion Botschaften (Message), die die Kommunikation zwischen Exemplaren, entsprechend der Rollen ihrer Klassifizierer, spezifiziert.
3.2. VERHALTENSELEMENTE
100
Alle zu sendenen Signale müssen im Namensraum der Kollaboration, zu dem die
Interaktion gehört, enthalten sein.
Message Eine Botschaft (Nachricht) spezifiziert eine bestimmte Kommunikation zwischen Rollen von Exemplaren in einer Interaktion.
Pseudoattribut
sender
receiver
action
activator
communicationConnection
predecessor
Semantik
Die Rolle des Exemplars, welches die Kommunikation initiiert
und möglicherweise eine Antwort erhält.
Die Rolle des Exemplars, welches die Botschaft empfängt und
auf sie reagiert.
Die Aktion, welche einen Stimulus entsprechend der Botschaft zum Senden veranlaßt.
Auf diese Aktion werden der Botschaftsname, Argumente, Iterationsausdrücke und
(Verzweigungs-)Bedingungen des Pfeils in einem Interaktionsdiagramm abgebildet.
Eine Botschaft, deren Empfang das Verhalten, welches zum
Abschicken dieser Botschaft führt, aktiviert. Dies ist die Botschaft, die eine Kommunikationssequenz innerhalb eines Objekts initiiert. Diese Botschaft muß in der gleichen Interaktion
enthalten sein.
Die Assoziationsrolle bzw. der Link, der zur Kommunikation
benutzt wird.
Eine Menge von Botschaften, deren vollständige Ausführung
die Ausführung dieser Botschaft ermöglicht. Diese Botschaften müssen in der gleichen Interaktion enthalten sein und den
gleichen Aktivierer (activator) besitzen.
Der Sender und der Empfänger müssen an der Kollaboration, welche den Kontext
definiert, teilnehmen. Ihre Rollen müssen durch die Kommunikationsverbindung (communicationConnection) verbunden sein.
ClassifierRole Eine Klassifiziererrolle ist eine bestimmte Rolle, die von einem
Teilnehmer einer Kollaboration gespielt wird. Sie spezifiziert eine eingeschränkte Sicht
auf die Merkmale eines Klassifizierers, die dazu dient, nicht benötigte Merkmale auszublenden bzw. einem Kommunikationspartner nicht zur Verfügung zu stellen. Die Klassifiziererrolle und ihre Merkmale werden in einem Klassenrechteck dargestellt.
Im Metamodell ist ClassifierRole Teil einer Kollaboration. availableFeature
spezifiziert die, in der Kollaboration zur Verfügung stehenden, Merkmale des Basisklassifizierers (base). availableContents spezifiziert eine Teilmenge des Inhalts des Mo-
101
KAPITEL 3. METAMODELL
dellelements des Basisklassifizierers. Das Attribut multiplicity gibt die Anzahl der
Exemplare an, die diese Rolle in der Kollaboration spielen.
AssociationRole Eine Assoziationsrolle ist eine bestimmte Benutzung einer Assoziation in einer Kollaboration.
Im Metamodell ist eine Assoziationsrolle eine eingeschränkte Sicht auf eine Assoziation (base) in einer Kollaboration. AssociationRole ist eine Komposition von Assoziationsendrollen (connection) entsprechend den Assoziationsenden der Assoziation.
Auch hier gibt das Attribut multiplicity die Anzahl der Exemplare an, die diese Rolle
in der Kollaboration spielen.
AssociationEndRole Eine Assoziationsendrolle ist der Endpunkt einer Assoziation in einer Kollaboration.
Das Attribut collaborationMultiplicity19 gibt die Anzahl der Link-Enden an,
die diese Rolle in der Kollaboration spielen, base bezeichnet die zugehörige Assoziation
und availableQualifier gibt die in der Kollaboration benutzten Qualifizierer an.
3.2.3 Zustandsautomaten
Zustandsautomaten (endliche Automaten) bzw. Zustandsdiagramme (statecharts) werden zur Modellierung des dynamischen Verhaltens von Modellelementen eingesetzt. Bei
diesen Elementen handelt es sich meist um Klassen bzw. deren Objekte, bei denen die
Reaktion auf ein Ereignis, z.B. ein Operationsaufruf, von der Vergangenheit des Objekts
abhängt.
Ein Zustandsautomat ist eine hypothetische Maschine, die sich in jedem Zeitpunkt in
einer Menge endlicher Zustände, auch Konfiguration genannt, befindet. Abhängig von
der Konfiguration, welche die relevante Vergangenheit eines modellierten Elements darstellt, können Ereignisse spezifiziert werden, auf die der Zustandsautomat (und damit das
Element) reagiert oder nicht reagiert. Die Reaktion des Automaten kann aus einer Aktion
und einer Zustandsveränderung (Transition) bestehen.
Abbildung 3.43 zeigt beispielsweise einen Zustandsautomaten einer Klimaanlage.
Durch diese Art der Modellierung kann die Aufrufreihenfolge der Operationen auf einem Objekt eingeschränkt werden, die ein Objekt während seiner Lebensdauer ausführen
kann.
In den beiden folgenden Abschnitten werden die Metamodellklassen der Ereignisse
und Zustandsautomaten erläutert. Aktionen und ihre Metamodellklassen sind bereits behandelt worden (siehe Seite 84).
19 Ein
Attribut mit dem Namen multiplicity ist bereits in AssociationEnd deklariert.
3.2. VERHALTENSELEMENTE
102
Transitionen ohne Ereignis
werden "triggerless"
genannt
Startzustand
Endzustand
Zeitereignis/
Aktion
after( 1 hour ) / selfTest()
shutDown
Ereignis (Parameter)
tooCold( desiredTemp )
Idle
atTemp
Transition
tooHot( desiredTemp )
atTemp
Heating
Cooling
tooHot( desiredTemp )
Activating
ready / turnOn()
TooCold( desiredTemp )
Ereignis/Aktion
Zustand
Abbildung 3.43: Zustandsautomat einer Klimaanlage
Active
103
3.2.3.1
KAPITEL 3. METAMODELL
Ereignisse
Es gibt vier Arten von Ereignissen, auf die ein Zustandsautomat reagieren kann: Signal-,
Aufruf-, Änderungs- und Zeitereignisse (Abb. 3.44).
ModelElement
Parameter
{ordered}
+parameters
*
SignalEvent
Event
0..1
CallEvent
TimeEvent
when : TimeExpression
+occurrence
*
1
Signal
+occurrence
ChangeEvent
changeExpression : BooleanExpression
*
1
Operation
Abbildung 3.44: Metamodell der Ereignisse
Event Ein Ereignis ist eine Spezifikation eines wahrnehmbaren Vorkommens. Ein
Ereignis besitzt einen Namen (geerbt von ModelElement) und kann durch Parameter
(parameter) spezifiziert werden. Event ist eine abstrakte Metaklasse.
SignalEvent Ein Signal-Ereignis bezeichnet den (asynchronen) Empfang eines Signals und ist im Metamodell mit diesem Signal assoziiert.
CallEvent Ein Aufruf-Ereignis repräsentiert den Empfang (reception) eines Requests,
eine Operation (operation) auszuführen.
Zwei Stereotypen eines Aufruf-Ereignisses sind definiert:
3.2. VERHALTENSELEMENTE
Stereotyp
«destroy»
«create»
104
Semantik
Eine Aufforderung an das empfangende Exemplar, sich zu zerstören.
Das empfangende Exemplar wurde gerade erzeugt. Dies ist das
einzige Ereignis, das an eine initiale Transition auf der obersten Ebene eines Zustandsautomaten geheftet werden kann.
TimeEvent Ein Zeit-Ereignis modelliert das Erreichen eines bestimmten Zeitpunkts
(deadline), der durch einen Zeitausdruck (timeExpression) spezifiziert wird.
Bei der Interpretation des Laufzeitverhaltens des Zustandsautomaten stimmt der Zeitpunkt des Auftretens des Ereignisses mit dem Empfang des Ereignisses überein. Ein Ereignis hat sogesehen keine zeitliche Dimension. Der modellierte Zeitpunkt (when) kann
absolut oder relativ (ein Timer) sein. Bei einem relativen Zeitpunkt ohne eine explizite
Startzeit beginnt der Timer mit der Aktivierung des Ausgangszustands der entsprechenden Transition. Das Zeitereignis findet nur statt, wenn beim Erreichen der Deadline der
Ausgangszustand noch aktiviert ist.
Zeitereignisse werden durch das Schlüsselwort after dargestellt, z.B. after (2 seconds) und after (10 seconds since exit from State A). Andere „Zeitereignisse“, wie z.B.
when (date = 1. Jan. 2000) sind Änderungsereignisse (s.u., [OMG99], Seite 2-134 und
Seite 3-136). Die Wahl des Attributnamens when der Metamodellklasse TimeEvent ist
verwirrend.
ChangeEvent Ein Änderungs-Ereignis (change event) ist ein Ereignis, welches durch
eine Veränderung des Systemszustands, d.h. eine Änderung von Attributwerten oder
Links, ausgelöst werden kann.
Ein Änderungsereignis wird durch das Schlüsselwort when, gefolgt von einem booleschen Ausdruck (changeExpression), modelliert. Bei der Interpretation des Laufzeitverhaltens wird dieser boolesche Ausdruck fortlaufend ausgewertet. Falls die Auswertung
den Wert wahr ergibt, findet das Änderungsereignis statt.
Ein Änderungsereignis unterscheidet sich von einer Bedingung (guard) einer Transition (s.u.), die nur ausgewertet wird, wenn ein Ereignis stattfindet. Der boolesche Ausdruck
eines Änderungs-Ereignisses wird solange fortlaufend ausgewertet, bis er wahr wird. Das
Ereignis bleibt bis zu seiner Bearbeitung bestehen, d.h. die Bearbeitung des Ereignisses wird unabhängig vom Wert des booleschen Ausdrucks zum Bearbeitungszeitpunkt
durchgeführt.
Mit when formulierte „Zeitereignisse“ sind formal Änderungsereignisse. Läßt sich
der Modellierer vom üblichen Sprachgebrauch leiten, kann dieses leicht zu Änderungsereignissen der Art when (23:49PM) führen (Beispiel: [BRJ99a], Seite 317, Abb. 20-4),
welches semantisch eher als Zeitereignis und nicht als Änderungsereignis (23:49PM ist
kein boolescher Ausdruck) interpretiert wird.
105
3.2.3.2
KAPITEL 3. METAMODELL
Zustandsautomat
Aktionen sind ausführbare, atomare Verarbeitungen, die den Zustand des Systems verändern. Die Dauer einer Aktion, z.B. ein Operationsaufruf, wird als vernachlässigbar
interpretiert. Eine Aktivität ist eine Folge von Aktionen und bezeichnet eine nicht-atomare
Ausführung innerhalb eines Zustands eines Zustandsautomaten. Eine Aktivität kann durch
ein Ereignis unterbrochen werden. Dies ist meistens eine Art Interrupt auf einer höheren
Ebene des Zustandsautomaten.
Ein Zustand ist eine Bedingung oder eine Situation während der Existenz eines Objekts. Während sich das Objekt in einem Zustand befindet, dem sogenannten aktiven
Zustand, kann das Objekt Aktionen und Aktivitäten ausführen oder auf ein bestimmtes
Ereignis warten.
Ein Transition ist eine gerichtete Beziehung zwischen Zuständen. Tritt ein bestimmtes
Ereignis ein und ist eine optionale Bedingung erfüllt, „feuert“ die Transition, d.h. ein
Zustandsübergang wird ausgeführt. Eine Transition besteht aus fünf Teilen:
1. Der Ereignis-Trigger bezeichnet ein Ereignis, dessen Empfang es dem Zustandsautomaten ermöglicht, eine Transition durchzuführen.
2. Eine optionale Bedingung (engl. guard condition, auch Wächterbedingung genannt) ist ein boolescher Ausdruck, der beim Empfang des Ereignis-Triggers ausgewertet wird. Falls der Ausdruck zum Wert wahr ausgewertet wird, wird die Transition durchgeführt. Wird keine Transition des Zustandsautomaten durch das Ereignis
„getriggert“, gilt das Ereignis als bearbeitet.
3. Der Quell-Zustand (Ausgangszustand) bezeichnet den Zustand, der vor dem Feuern
der Transition aktiv sein muß.
4. Der Ziel-Zustand (Folgezustand) bezeichnet den Zustand, der nach dem Feuern der
Transition aktiviert wird.
5. Eine Aktion, die beim Feuern der Transition, d.h. vor der Aktivierung des Folgezustands, ausgeführt wird.
Ein Zustand kann mehrere Bestandteile besitzen:
1. Ein Zustand kann einen Namen besitzen. Zustände ohne Namen sind anonyme
Zustände.
2. Entry- und Exit-Aktionen, die beim Eintritt in den Zustand (der Aktivierung des
Zustands) bzw. beim Verlassen des Zustands (seiner Deaktivierung) ausgeführt
werden.
3. Eine interne Transition ist eine Transition, bei der der Zustand nicht verlassen wird.
Insbesondere werden bei internen Transitionen die Entry- und Exit-Aktionen nicht
ausgeführt.
3.2. VERHALTENSELEMENTE
106
4. Ein Zustand kann Unterzustände besitzen. Dies sind Zustände, die einen Zustandsautomaten oder mehrere nebenläufige Zustandstandsautomaten innerhalb eines Zustandsautomaten repräsentieren. Der Zustand „Heating“ in Abb. 3.43 ist ein Beispiel eines Zustands, der Unterzustände besitzt. Abb. 3.46 zeigt einen Zustand, der
nebenläufige Zustandsautomaten besitzt.
5. Normalerweise ignoriert ein Zustandsautomat Ereignisse, auf die er nicht durch eine Transition reagieren kann. Die ignorierten Ereignisse gelten dann als verarbeitet.
In der UML können zu einem Zustand Ereignisse spezifiziert werden, auf die in diesem Zustand nicht reagiert wird, die aber in anderen Zuständen verarbeitet werden
sollen. Diese Ereignisse werden verzögerte Ereignisse (deferred events) genannt
(siehe [BRJ99a], Seite 337). Die Verzögerung eines Ereignisses bedeutet, daß das
Ereignis nicht stattgefunden hat. Ein verzögertes Ereignis ereignet sich erst bei der
Aktivierung eines Zustands, der dieses Ereignis nicht verzögert.
Falls nicht anders festgelegt, beginnt der Zustandsautomat eines Unterzustands in seinem Anfangszustand. In manchen Situationen (z.B. bei einem Interrupt auf einer höheren
Ebene) ist es wünschenswert, die Konfiguration eines komplexen Zustands (Kompositionszustand) zu speichern, damit dieser bei der nächsten Aktivierung wiederhergestellt
werden kann. Dazu bietet die UML das Konzept der Erinnerungszustände (history-states)
an. Ein Erinnerungszustand ist ein Pseudozustand, der es einem Zustand ermöglicht, sich
seinen letzten aktiven Unterzustand zu merken (siehe Abb. 3.45).
Ist eine Reaktivierung eines Kompositionszustands in seiner vorherigen Konfiguration
erwünscht, wird dies durch eine Transition zum Erinnerungszustand modelliert. Bei der
erstmaligen Aktivierung besitzt der Kompositionszustand keine Vergangenheit und die
vom Erinnerungszustand ausgehende Transition wird ausgeführt (siehe Abb. 3.45).
Durch die Verschachtelung von Zuständen ergibt sich ein Baum von Zuständen. Die
Knoten des Baums sind Kompositionszustände, die Blätter sind einfache Zustände oder
Pseudozustände. In der UML sind zwei Arten von Erinnerungszuständen definiert: flache
und tiefe Erinnerungszustände. Ein flacher Erinnerungszustand (shallow history) speichert den letzen direkten aktiven Unterzustand eines Kompositionszustands (den aktiven
Zustand der nächsten Ebene des Baum). Flache Erinnerungszustände werden, wie in
Abb. 3.45, durch H dargestellt. Ein tiefer Erinnerungszustand (deep history) speichert
die aktiven Zustände des gesamten Teilbaums des Kompositionszustands. Tiefe Erinnerungszustände werden durch „H ∗ “ dargestellt.
Kompositionszustände können nebenläufige Bereiche enthalten, die jeweils einen Zustandsautomaten enthalten, die nebenläufig ausgeführt werden (siehe Abb. 3.46 und 4.62,
Seite 189).
Im folgenden werden die Metamodellklassen der Zustandsautomaten der UML (Abb.
3.47) erläutert.
StateMachine Ein Zustandsautomat ist ein Modellelement, welches die mögliche
Dynamik eines Modellelements (context) beschreibt. Dieses Modellelement ist entwe-
107
KAPITEL 3. METAMODELL
BackingUp
Command
H
query
Collecting
flacher Erinnerungszustand
(shallow history):
speichert den letzten
aktiven Zustand von
"BackingUp"
Startzustand der
ersten Aktivierung von
"BackingUp"
Copying
CleaningUp
Abbildung 3.45: Erinnerungszustände speichern den letzen aktiven Zustand eines Kompositionszustands (hier: BackingUp), der bei erneuter Aktivierung zur
Wiederherstellung der letzten Konfiguration des Kompositionszustands
genutzt wird. Das Beispiel zeigt den Zustandsautomaten eines BackupProgramms ohne Endzustand, welches z.B. für die Datensicherung eines
Netzwerks eingesetzt wird. Ein Systemoperator kann das Programm zu
Informationszwecken unterbrechen. Danach setzt das Programm seine
Tätigkeit, ausgehend von der letzten Konfiguration, fort.
3.2. VERHALTENSELEMENTE
108
Vorbereitung
RadioAn
RadioAus
ComputerAus
RadioAn
ComputerAn
ComputerAn
Arbeit
when(istGenug)
Abbildung 3.46: Der Zustand „Vorbereitung“ besteht aus zwei nebenläufigen Bereichen.
Der Zustand „Arbeit“ wird aktiviert, wenn beide Zustandsautomaten der
nebenläufigen Bereiche ihren Endzustand erreicht haben.
StateVertex
Pseudostate
kind : PseudostateKind
1
0..1
+container
*
SubmachineState
CompositeState
isConcurent : Boolean
1
SimpleState
State
+top
*
*
0..1
*
+incoming
1
+target
*
0..1
StateMachine
+outgoing
0..1
*
0..1
+source
StubState
referenceState : Name
SynchState
bound : UnlimitedInteger
1..*
+subvertex
+submachine
1
+behavior
+context
ModelElement
FinalState
0..1
0..*
0..1
0..1
+internal
+transition
+doActivity
0..1
+exit
0..1
+entry
0..1
Transition
0..*
+deferrableEvent
+effect
*
+guard
Action
0..1
0..1
1
0..1
Guard
expression : BooleanExpression
Event
0..1
+trigger
109
KAPITEL 3. METAMODELL
Abbildung 3.47: Metamodell des Zustandsautomaten
3.2. VERHALTENSELEMENTE
110
der ein Klassifizierer oder ein Verhaltenselement. Ein Modellelement kann durch mehrere
Zustandsautomaten beschrieben werden.
Ein Zustandsautomat setzt sich aus Zuständen zusammen, die Aktionen, Transitionen
und Bedingungen enthalten können. Ein Zustandsautomat kann neben Kompositionszuständen auch Zustände enthalten, die andere Zustandsautomaten repräsentieren (siehe
SubmachineState, Seite 113), die irgendwo im Modell spezifiziert sind.
top bezeichnet die Wurzel (Top-Level-Zustand) im Baum der Zustände eines Zustandsautomaten. Ein Zustandsautomat besitzt genau einen Top-Level-Zustand, der ein
Kompositionszustand (siehe CompositeState) sein muß. Der Top-Level-Zustand kann
keine Quelle einer Transition sein und kann in keinem anderen (Kompositions-) Zustand
enthalten sein. Wenn ein Zustandsautomat ein Verhaltensmerkmal beschreibt, kann er,
mit Ausnahme der initialen Transition, keinen Trigger vom Typ CallEvent enthalten.
CompositeState Ein Kompositionszustand ist ein Zustand, der einen oder mehrere
Unterknoten (Unterzustände) enthält. Ein Zustand (StateVertex) kann zu maximal einem Kompositionszustand gehören (Semantik einer Komposition). Jeder in einem Kompositionszustand enthaltende Zustand heißt Unterzustand des Kompositionszustands. Er
heißt direkter Unterzustand, wenn er in keinem weiteren Zustand enthalten ist. Ansonsten wird er transitiv verschachtelter Unterzustand genannt. Ein Kompositionszustand
kann maximal einen Anfangszustand, einen flachen und einen tiefen Erinnerungszustand
besitzen.
Falls das boolesche Attribut isConcurrent wahr ist, besteht der Kompositionszustand aus zwei oder mehreren direkten nebenläufigen Bereichen (auch Regionen genannt).
StateVertex Ein Zustandsknoten ist eine abstrakte Metaklasse, die einen Zustand
eines Zustandsautomaten bzw. einen Knoten eines Zustandsdiagramms darstellt. Diese
Knoten können Quelle und Ziel einer Transition sowie Teil eines Kompositionszustands
(container) sein.
Transition Eine Transition ist eine gerichtete Beziehung zwischen einem Quellzustandsknoten (source) und einem Zielzustandsknoten (target). trigger bezeichnet ein
Ereignis (optional), das zum „Feuern“ der Transition führen kann, wenn eine optional
gegebene boolesche Bedingung (guard) erfüllt ist.
Transitionen ohne Ereignisse werden „triggerless“ genannt. effect ist eine optionale
Aktion, die während der Transition ausgeführt wird.
Guard Eine Bedingung (Wächterbedingung) ist ein boolescher Ausdruck, der an eine
Transition geheftet ist und das Feuern der Transition kontrolliert. Der Ausdruck wird ausgewertet, wenn das mit der Transition assoziierte Ereignis (trigger) eintritt. Wenn die
Auswertung den Wert wahr ergibt, wird die Aktion (effect) ausgeführt und der Folge-
111
KAPITEL 3. METAMODELL
zustand aktiviert. Die booleschen Ausdrücke der Transitionen sollten reine Funktionen,
d.h. ohne Seiteneffekte, sein.
State Ein Zustand ist eine abstrakte Metaklasse, die eine Situation repräsentiert, in
der eine (meist implizite) Bedingung gilt (z.B. Warten auf ein Ereignis, Ausführen einer
Aktivität).
Pseudoattribut
stateMachine
internal
entry
exit
doActivity
deferrableEvent
SimpleState
Semantik
Zustandsautomat, zu dem der Zustand gehören kann.
Bezeichnet eine Transition, die zum Zustand selbst gehört (interne Transition). Die Ausführung dieser Transition führt nicht
zur Anwendung der Entry- und Exitaktionen, d.h. diese Transition führt nicht zu einer Zustandsveränderung des Zustandsautomaten.
Bezeichnet eine Aktion, die bei der Aktivierung des Zustands
ausgeführt wird (Eintrittsaktion).
Bezeichnet eine Aktion, die bei der Deaktivierung des Zustands ausgeführt wird (Austrittsaktion).
Bezeichnet eine Aktivität (Action kann eine Sequenz von Aktionen sein), die ausgeführt wird, wenn der Zustand aktiviert
ist.
Bezeichnet Ereignisse, die verzögert werden, wenn dieser Zustand aktiv ist.
Ein einfacher Zustand bezeichnet einen Zustand ohne Unterzustände.
FinalState Ein End-Zustand ist ein spezieller Zustand, der angibt, daß sein Container (ein Kompositionszustand) verarbeitet ist. Ist dieser Kompositionszustand der TopZustand des Zustandsautomaten, dann ist der Zustandsautomat vollständig verarbeitet.
Ein End-Zustand besitzt keine ausgehenden Transitionen.
PseudoState Ein Pseudozustand ist ein Hilfszustand, der aus technischen Gründen
benötigt wird. Die folgenden sieben Arten eines Pseudozustands (Attribut: kind) sind
definiert:
• initial: Ein Initialpseudozustand ist der Anfangszustand eines Zustandsautomaten bzw. eines Kompositionszustands. Ein Kompositionszustand hat maximal einen
Anfangszustand.
3.2. VERHALTENSELEMENTE
112
• deepHistory: (tiefer Erinnerungszustand) Eine Notation, die die letzte aktive Konfiguration des Kompositionszustands repräsentiert, der diesen Pseudozustand enthält (H ∗ ). Ein Kompositionszustand hat maximal einen solchen Knoten. Eine Transition kann diesen Knoten als Quelle mit einem Initialzustand als Ziel verbinden.
Diese Transition wird ausgeführt, wenn der Kompositionszustand erstmalig aktiviert wird.
• shallowHistory: (flacher Erinnerungszustand) Repräsentiert den letzten aktiven
direkten Unterzustand des umschließenden Kompositionszustands, jedoch nicht die
verschachtelten Unterzustände (H). Ein Kompositionszustand kann maximal einen
solchen Knoten haben.
• join: Dient der Zusammenfassung (Synchronisation) mehrerer Transitionen aus
nebenläufigen Bereichen. Diese Transitionen dürfen keine Bedingungen (guards)
haben. In Abb. 4.63 auf Seite 190 ist ein Beispiel angegeben.
• fork: Dient der Aufspaltung einer Transition in mehrere Transitionen, die verschiedene Ziele haben (Nebenläufigkeit). Transitionen, die von diesem Knoten wegführen dürfen keine Bedingungen (guards) haben. In Abb. 4.63 auf Seite 190 ist ein
Beispiel angegeben.
• junction: Knoten, die der Verknüpfung mehrerer Transitionen dienen. Sie werden
zur Konstruktion komplexer Transitionspfade zwischen Zuständen benutzt. Dieser
Knoten kann benutzt werden, um mehrere eingehende Transitionen in eine einzige
ausgehende Transition zu vereinen. Dies wird „mischen“ (merge) genannt. Andererseits kann der Knoten zur Aufspaltung einer eingehenden Transition in mehrere ausgehende Transitionen mit verschiedenen Bedingungen (guards) benutzt werden. Dies wird statisch bedingte Verzweigung (static conditional branch) genannt.
Ausgehende Transitionen, deren Bedingungen als falsch bewertet werden, werden
deaktiviert. Die vordefinierte Bedingung else kann für maximal eine Transition
benutzt werden. Sie wird als wahr bewertet, wenn alle anderen Bedingungen nicht
zutreffen. In Abb. 4.66 auf Seite 193 ist ein Beispiel angegeben.
• choice: Auswahlknoten, mit dem eine dynamisch bedingte Verzweigung realisiert
werden kann. Beim Erreichen des Knotens werden die Bedingungen der ausgehenden Transitionen ausgewertet. Wenn mehrere Bedingungen gültig sind, wird eine
der gültigen Transitionen durch eine Funktion ausgewählt. Falls keine Bedingung
gilt, ist das Modell nicht wohldefiniert. In Abb. 4.67 auf Seite 193 ist ein Beispiel
angegeben.
SyncState Ein Synchronisationszustand ist ein Knoten, der zur Synchronisation nebenläufiger Regionen eines Zustandsautomaten benutzt wird. In Abb. 4.64, auf Seite
191 ist ein Beispiel angegeben. Ein Synchronisationszustand wird nicht wie ein Zustand
113
KAPITEL 3. METAMODELL
(State) auf einen booleschen Wert (aktiv, nicht aktiv), sondern auf einen Integer (bound)
abgebildet. Ein Synchronisationszustand wird zusammen mit fork und join benutzt, um
sicherzustellen, daß eine Region einen bestimmten Zustand oder bestimmte Zustände verläßt, bevor ein anderer Bereicht einen oder mehrere bestimmte Zustände aktivieren kann.
bound ist ein positiver Integer oder der Wert „unlimited“, der den Unterschied zwischen
der Anzahl der „gefeuerten“ eingehenden und ausgehenden Transitionen spezifiziert. Alle
eingehenden Transitionen müssen aus dem gleichen Bereich kommen und alle ausgehenden Transitionen müssen ihr Ziel ebenfalls in einem Bereich haben.
SubmachineState Ein Unterautomatenzustand ist eine syntaktische Annehmlichkeit, die Wiederbenutzung und Modularität ermöglicht. Er stellt eine notationelle Abkürzung eines Zustandsautomaten (submaschine) dar, die eine makroähnliche Expansion
der Abkürzung durch den Zustandsautomaten ermöglicht. Der eingesetzte Zustandsautomat heißt referenzierter Zustandsautomat. Der Zustandsautomat, der den Unterautomaten
enthält heißt Containerzustandsautomat. Effektiv repräsentiert ein Unterautomatenzustand einen Aufruf des assoziierten Zustandsautomaten.
In einem Zustandsdiagramm wird der referenzierte Zustandsautomat nicht vollständig
dargestellt. Transitionen in einen Unterautomatenzustand hinein oder aus ihm heraus,
werden durch Stummelzustände (StubState) dargestellt (Beispiel: Abb. 4.68, Seite 194).
StubState Ein Stummelzustand kann innerhalb eines Unterzustandsautomaten auftreten und repräsentiert einen Unterknoten eines referenzierten Zustandsautomaten (referenceState). Er kann als Quelle oder Ziel einer Transition dienen, die einen Zustandsknoten eines Zustandsautomaten mit einem Unterzustandsknoten des referenzierten
Zustandsautomanten verbindet.
3.2.4 Aktivitätsgraphen
Mit Aktivitätsgraphen bzw. Aktivitätsdiagrammen kann funktionales Verhalten von Modellelementen beschrieben werden. Sie werden zur Ablaufbeschreibung komplexer Operationen (flowchart) und zur Verfeinerung (von Operationen) von Anwendungsfällen (workflow) eingesetzt.
Aktivitätsdiagramme sind spezielle Zustandsdiagramme. Ein Aktivitätsdiagramm stellt
nicht den Klassifizierer, der Aktionen ausführt, sondern die Reihenfolge und die Bedingungen der Aktionen in den Vordergrund. Die meisten Zustände eines Aktivitätsgraphen
sind Aktivitätszustände, die sich dadurch auszeichnen, daß sie eine Aktivität ausführen
und die Vervollständigung dieser Aktivität einen Zustandsübergang (Transition) auslöst.
Eine Aktivität hat mindestens eine ausgehende Transition. Mehrere ausgehende Transitionen werden zur Fallunterscheidung benutzt. Aktivitätsdiagramme können nebenläufige Aktivitäten beschreiben. Für parallele Aktivitäten gilt, daß ihre Reihenfolge irrelevant
ist. Abbildung 3.48 zeigt ein Aktivitätsdiagramm mit den wichtigsten Modellelementen.
3.2. VERHALTENSELEMENTE
114
Entscheidung
[keine Cola]
[kein Kaffee]
Bestimme Getränk
Bedingung
[Kaffee gefunden]
[Cola gefunden]
Kaffeepulver in
Filter einfüllen
Behälter mit
Wasser auffüllen
Tassen
holen
Coladosen
holen
Filter in Maschine
einsetzen
Maschine anschalten
Kaffee filtern
Synchronisationsbalken
Aktivität
Kaffee
einschenken
Getränk
trinken
Abbildung 3.48: Nebenbeschäftigung der (Java) Programmierer
Ch
Ch
Ch
Abbildung 3.49: Metamodell: Aktivitätsgraph
1
+inState
*
ActionState
State
CallState
ObjectFlowState
*
*
Parameter
+parameter
+state
*
0..*
+partition
0..1
+context
isSynch : Boolean
1
*
+behavior
SimpleState
ActivityGraph
isDynamic : Boolean
dynamicArguments : ArgListsExpression
dynamicMultiplicity : Multiplicity
isDynamic : Boolean
dynamicArguments : ArgListsExpression
dynamicMultiplicity : Multiplicity
SubactivityState
SubmachineState
isConcurent : Boolean
CompositeState
+top
0..1
StateMachine
+type
1
Partition
*
*
Classifier
*
1
+contents
ClassifierInState
ModelElement
+type
0..*
115
KAPITEL 3. METAMODELL
3.2. VERHALTENSELEMENTE
116
Die Metamodellklassen eines Aktivitätsdiagramms sind überwiegend Spezialisierungen der Metamodellklassen eines Zustandsautomaten (Abb. 3.49).
ActivityGraph Ein Aktivitätsgraph spezifiziert das Verhalten eines Pakets, eines
Klassifizierers oder eines Verhaltensmerkmals (context) (Abb. 3.49).
Eine Partition (partition) teilt die Zustände (contents) eines Aktivitätsgraphen in
Gruppen auf. Diese Gruppen werden auch Schwimmbahnen (swimlanes) genannt. Die
Partitionierung entspricht häufig den organisatorischen Einheiten in einem Geschäftsmodell (z.B. Einkauf, Verkauf, usw.). Partitionen haben keinen Einfluß auf die dynamische
Semantik eines Modells, sie sind ein Hilfsmittel zum besseren Verständnis.
SubactivityState Ein Unteraktivitätszustand repräsentiert die Ausführung einer
nicht-atomaren Folge von Schritten, die „einige“ Zeit in Anspruch nimmt. Ein Unteraktivitätszustand ist ein Unterautomatenzustand, der einen verschachtelten Aktivitätsgraphen
ausführt.
Attribut
isDynamic
dynamicArguments
dynamicMultiplicity
Pseudoattribut
submaschine
Semantik
Boolescher Ausdruck, der angibt, ob die Aktivität nebenläufig
ausgeführt werden kann.
Bestimmt die Anzahl der parallelen Ausführungen der Untermaschinen des Zustands. Der Wert muß eine Menge von
Listen von Objekten sein, die jeweils Argumente für eine
Ausführung enthält. Dieser Ausdruck wird ignoriert, wenn
isDynamic den Wert „false“ hat.
Eine Kardinalität, die die Anzahl der parallelen Ausführungen
der Aktionen des Zustands beschränkt. Wird ignoriert, wenn
isDynamic den Wert „false“ hat.
Semantik
Geerbt von SubmaschineState. Bezeichnet den referenzierten Aktivitätsgraphen innerhalb des Unteraktivitätszustand.
Der Aktivitätsgraph muß einen Anfangszustand und einen
Endzustand haben.
ActionState Ein Aktionszustand bezeichnet die Ausführung einer atomaren Aktion,
typischerweise den Aufruf einer Operation.
Ein Aktionszustand ist ein einfacher Zustand mit einer Eintrittsaktion (Entry),dessen
einzige ausgehende Transition durch die Vervollständigung der Eintrittsaktion getriggert
wird. Ein Aktionszustand kann mehrere Aktionen als Teil seiner Eintrittsaktion, aber
117
KAPITEL 3. METAMODELL
keine Exit-Aktionen, interne Transitionen oder do-Aktivitäten haben.
Attribut
Semantik
isDynamic
Boolescher Ausdruck, der angibt, ob die (Eintritts-) Aktionen
nebenläufig ausgeführt werden können.
dynamicArguments Bestimmt zur Laufzeit die Anzahl der parallelen Ausführungen
der Aktionen des Zustands. Der Wert muß eine Menge von
Listen von Objekten ergeben. Jede Liste dient als Argument
für eine parallele Ausführung. Dieser Ausdruck wird ignoriert,
wenn isDynamic den Wert „false“ hat.
dynamicEine Kardinalität, die die Anzahl der parallelen Ausführungen
Multiplicity
der Aktionen des Zustands beschränkt. Wird ignoriert, wenn
isDynamic den Wert „false“ hat.
Pseudoattribut
Entry
Semantik
Geerbt von State. Bezeichnet die Eintrittsaktionen.
CallState Ein Aufrufzustand ist ein Aktionszustand mit genau einer Aufrufaktion
als Eintrittsaktion. Aufrufzustände dienen der notationellen Vereinfachung.
ObjectFlowState Ein Objektflußzustand definiert einen Objektfluß zwischen Aktionen in einem Aktivitätsgraph (siehe Abb. 3.50). Er bezeichnet die Verfügbarkeit eines
Exemplars eines Klassifizierers, möglicherweise in einem bestimmten Zustand. Die Verfügbarkeit ist meistens das Resultat einer Operation.
Aktivität1
Aktivität2
Objekt
[Zustand]
Abbildung 3.50: Als Resultat der Aktivität1 befindet sich das Objekt in dem angegebenen
Zustand. Aktivität2 setzt den Zustand des Objekts voraus.
Die Generierung eines Objekts durch eine Aktion eines Aktionszustands kann als Objektfluß modelliert werden, der durch die Vervollständigung des Aktionszustands getriggert wird. Die Benutzung des Objekts in einem nachgeordneten Aktionszustand kann als
ausgehende Transition des Objektflußzustands, die eine eingehende Transition des Aktionszustands ist, modelliert werden.
3.2. VERHALTENSELEMENTE
118
Attribut
isSynch
Semantik
Boolescher Ausdruck, der angibt, ob ein Objektflußzustand als
Synchronisationszustand benutzt wird.
Pseudoattribut
type
Semantik
Bezeichnet den Klassifizierer des Objekts. Der Klassifizierer
kann vom Typ ClassifierInState sein (s.u.), d.h. der Zustand kann spezifiziert werden.
Ein- oder Ausgabeparameter des Objekts. Die Parameter müssen einen Typ und eine Richtung (direction) haben, die kompatibel mit dem Klassifizierer (type) sind.
parameter
Stereotyp
«signalflow»
Semantik
Wird zur Hervorhebung benutzt, wenn der Typ des Objektflußzustands ein Signal ist.
ClassifierInState Ein ClassifierInState bezeichnet einen Klassifizierer (type),
der sich in einem bestimmten Zustand (inState) befindet. Diese Art eines Klassifizierers
kann auch in statischen strukturellen Diagrammen und Kollaborationen benutzt werden,
um z.B. Objekte zu zeigen, die nur dann von Bedeutung sind, wenn sich die Objekte in
bestimmten Zuständen befinden.
PseudoState (siehe auch Seite 111.) In Aktivitätsgraphen können ein- und ausgehende Transitionen der Pseudozustände fork und join jeden Zustandsknoten (StateVertex) als Quelle bzw. Ziel haben. Anders als in Zustandsautomaten ist die Benutzung
von fork und join in Kombination mit Kompositionszuständen nicht beschränkt.
Kapitel 4
Werkzeugunterstützung und Konsistenz
Dieses Kapitel beschreibt neben allgemeinen Anforderungen an ein UML-Werkzeug die
Möglichkeiten, in welchem Rahmen ein Werkzeug Konsistenz (Widerspruchsfreiheit) sicherstellen bzw. Konsistenzprüfungen ermöglichen kann, um sowohl Widersprüche als
auch Unvollständigkeiten in einer Systemspezifikation in UML zu verhindern oder zu
entdecken.
Als Beispiel für ein existierendes Werkzeug wird Rational Rose 98 vorgestellt. Rational Rose enthält selbst nur wenige Möglichkeiten zur Konsistenzprüfung, bietet aber die
Möglichkeit, Konsistenzprüfungen und Vervollständigungen von Modellen durch Skripte
zu realisieren.
Es wird erläutert, wie Ausschnitte von UML-Diagrammen (Klassen-, Interaktionsund Zustandsdiagramme) auf die Metamodellklassen der UML abgebildet werden und
welche Konsistenzbedingungen zwischen den Modellelementen existieren (ohne Anspruch
auf Vollständigkeit).
Die Skriptsprache von Rational Rose 98 (kurz: Rose) läßt auf ein eigenes realisiertes „Metamodell“ der UML schließen, welches von Rose benutzt wird. Die Abbildung
von Ausschnitten aus Diagrammen auf die Rose-Metamodellklassen zeigt, welche Konsistenzprüfungen sich durch Skripte in Rose realisieren lassen.
4.1
Anforderungen an ein UML-Werkzeug
Die Benutzung der UML zur Modellierung eines Softwaresystems benötigt die Unterstützung durch ein Werkzeug. In realen Entwicklungsprojekten führen bereits wenige Anwendungsfälle zu vielen verschiedenen Diagrammen, die teilweise selbst relativ komplex
sind. Veränderungen in einem Diagramm führen zu weiteren Veränderungen in abhängigen Diagrammen. So führt z.B. ein Operationsaufruf einer nichtvorhandenen Operation in
einem Interaktionsdiagramm zu einer Inkonsistenz, wenn die Klasse des Empfangsobjekts
diese Operation nicht deklariert. Wird der Name einer Klasse in einem Diagramm geändert, muß der Name auch in anderen Diagrammen geändert werden. Kosten werden also
119
4.1. ANFORDERUNGEN AN EIN UML-WERKZEUG
120
nicht nur durch das zeitaufwendige Neuzeichnen von Diagrammen, sondern auch durch
die „Synchronisation“ der Diagramme untereinander zur Sicherstellung eines konsistenten Systementwurfs verursacht, die ohne Werkzeugunterstützung jeden wirtschaftlichen
Rahmen sprengen würden.
Ein UML-Werkzeug sollte die folgenden Merkmale unterstützen:
• Zeichnen von Diagrammen: Ein Werkzeug sollte nicht nur das reine Zeichnen
aller Diagramme in ihrer gesamten Komplexität ermöglichen, sondern die Notation der Diagrammelemente verstehen und unterstützen, ohne die Freiheit des Modellierers einzuschränken. So sollte z.B. im Falle zweier assoziierter Klassen das
Verschieben einer Klasse nicht dazu führen, daß die Verbindungslinie zwischen den
Klassen mitten durch eine andere Klasse verläuft.
Das Werkzeug sollte die Semantik der UML zumindest soweit verstehen, daß eine
grundsätzlich falsche Benutzung von Modellelementen nicht möglich ist und vor
einer inkonsistenten Benutzung gewarnt wird.
Das Werkzeug sollte Änderungen an der Spezifikation eines Modellelements in einem Diagramm automatisch für das gesamte Modell durchführen.
• Fachlexikon: Das Werkzeug sollte die zentrale Speicherung von Fachbegriffen
des Anwendungsbereichs unterstützen, damit Kommunikationsstörungen zwischen
Entwicklern und Anwendern bzw. Fachbereichsexperten minimiert werden.
• Navigation: Das Werkzeug sollte die Navigation durch das Modell erleichtern, z.B.
sollte man ein Modellelement durch verschiedene Diagramme verfolgen können.
• Mehrbenutzerunterstützung: Das Programm sollte mehreren Benutzern die Arbeit an einem Modell ermöglichen, ohne daß sie sich gegenseitig behindern.
• Konsistenzprüfung: Da ein UML-Modell nicht zu jedem Zeitpunkt der Modellierung konsistent sein kann, sollte das Werkzeug eine dem Entwicklungsstand angepaßte Konsistenzprüfung auf Wunsch des Benutzers ermöglichen. Je früher Inkonsistenzen aufgedeckt werden, desto geringer sind die Fehlerbeseitigungskosten.
• Codeerzeugung: Das Werkzeug sollte aus den (mühsam gesammelten) Informationen des Modells Codefragmente in der gewünschten Implementationssprache
erzeugen können. Auch hier ist eine Konsistenzprüfung vor der Codeerzeugung
sinnvoll.
• Reverse-Engineering: Da die UML auch zur Dokumentation bestehender Systeme
genutzt werden kann, sollte das Werkzeug aus vorhandenem Code Modelle erzeugen können. Dies ermöglicht zusammen mit der Codeerzeugung das sogenannte
Round-Trip-Engineering, d.h. Veränderungen in der tatsächlichen Realisierung
des Systems können in dem UML-Modell des Systems erfaßt werden.
121
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Dokumentation: Das Werkzeug sollte die Dokumentation von Modellelementen,
auch durch externe Dokumente, ermöglichen und auf Wunsch alle zu einem Modellelement gehörenden Informationen generieren, d.h. z.B. in welchen Diagrammen
und mit welchen anderen Modellelementen ein Modellelement benutzt wird.
• Wiederverwendbarkeit: Ein Vorteil des objektorientierten Ansatzes, sei es nun
der Entwurf oder die Implementierung in einer objektorientierten Sprache, ist die
Wiederverwendbarkeit von bestehenden objektorientierten Systemen. Deshalb sollte das Werkzeug nicht nur in der Lage sein, Teile von Modellen aus früheren Projekten zu importieren, sondern im Falle des Imports von Komponenten auch deren
Realisierung.
Zur Unterstützung der Wiederverwendbarkeit ist eine Datenbank vorhandener (und
bewährter) Modelle sinnvoll. In diesem Zusammenhang ist auch eine Analyseund Entwurfsmusterdatenbank wünschenswert. Diese Muster (patterns) stellen (abstrakte) Lösungen für häufig auftretene Probleme dar, die bereits verifiziert sind und
sich in der Praxis bewährt haben.
• Anpassungsfähigkeit und Erweiterbarkeit: Das Werkzeug sollte an die Anforderungen spezieller Einsatzgebiete, z.B. Geschäftsprozeßmodellierung oder Modellierung von Echtzeitsystemen angepaßt oder erweitert werden können.
• Schnittstellen zu anderen Werkzeugen: Das Werkzeug sollte Schnittstellen zu
anderen in einer Systementwicklung eingesetzten Werkzeugen, z.B. Programmierumgebung (Editor, Compiler, Debugger), Projektmanagement, Konfigurations- und
Versionsmanagement, besitzen.
• Interoperabilität mit anderen UML-Werkzeugen: Das Werkzeug sollte UMLModelle exportieren und von anderen Werkzeugen importieren können.
4.2
Konsistenz
Das UML-Metamodell definiert Modellelemente in Form von abstrakten und konkreten
Metamodellklassen, Regeln zur Verwendung der Modellelemente und die daraus resultierende Semantik und Bedingungen, welche die Verwendungsmöglichkeiten auf Grund der
Spezifikation der Modellelemente einschränken. So sind z.B. Klassen generalisierbare
Modellelemente, die durch Attribute und Operationen spezifiziert und durch Generalisierungen miteinander verbunden werden können, falls bestimmte Bedingungen, z.B. die
mehrfache Deklaration eines Attributs in einer Klasse und einer Oberklasse, nicht verletzt
werden. Es gibt Modellelemente, deren Existenz die Existenz anderer Modellelemente
voraussetzt. So setzt z.B. eine Botschaft, die eine Operation auf einem Objekt aufruft,
voraus, daß das Objekt auf einer existierenden Klasse basiert, welche die aufzurufende
Operation deklariert hat.
4.2. KONSISTENZ
122
Bei der Modellierung eines Systems mit der UML wird das System üblicherweise
durch mehrere ineinandergreifende Sichten (Anwendungsfallsicht, logische Sicht, usw.)
beschrieben. Jede Sicht besteht meist aus mehreren Diagrammen und Diagrammarten,
die wiederum selbst aus Modellelementen bestehen.
Semantik
Graphische Darstellung und Systemspezifikation
UML-Metamodell
UML Notation
Guide der OMG
Modellebene
Metamodellebene
(in UML-Notation dargestellt)
Besteht aus:
• abstrakten Metaklassen (ModelElement, Classifier, Relationship usw.),
• konkreten Metaklassen (Class, Attribute, Association usw.), deren Exemplare (Modellelemente) eine
graphische Darstellung besitzen und/oder zur Spezifikation
eines Modells benutzt werden
• Generalisierungen und Assoziationen zwischen den Metaklassen.
•
•
Erläutert die graphische Darstellung der semantischen Konzepte (forward mapping to notation).
Beschreibt verschiedene Optionen zur Darstellung von Modellinformationen (Auslassung
von Informationen bis hin zu
alternativen Darstellungen, läßt
Freiraum für Werkzeuge)
Das Metamodell definiert die Semantik der Metaklassen, mögliche und notwendige Beziehungen zwischen Modellelementen
sowie Bedingungen an die Spezifikation der Modellelemente,
die auch von der Beziehung zu anderen Modellelementen abSemantik und
hängen können.
Bedingungen
Exemplar von
Metamodellexemplar
•
•
beschreibt
Notation
UML-Modell
(formales, i.a. nicht sichtbares UML-Modell)
(graphische Darstellung)
Besteht aus Exemplaren der konkreten Metaklassen (z.B.
der Klasse „Person“ und dem Attribut „name“).
Kann als Objektdiagramm dargestellt werden, deren Objekte und Links auf den Klassen bzw. Assoziationen des
Metamodells basieren.
Besteht aus verschiedenen, ineinandergreifenden Sichten auf ein System.
Die Sichten bestehen aus Diagrammen, die Elemente eines Systems und ihre gegenseitigen Beziehungen spezifizieren und darstellen.
Abbildung 4.1: Metamodell, Metamodellexemplar und die Sicht des Benutzers auf das
Modell.
Formal kann ein solches UML-Modell auch durch ein Metamodellexemplar (Modell)
beschrieben werden (siehe Abb. 4.1), bei der die Modellelemente des UML-Modells
Instantiierungen der Metamodellklassen sind. In UML-Notation wäre dies ein einziges
Objektdiagramm, dessen Objekte und Links auf den Klassen und Assoziationen des Metamodells basieren (siehe Abb. 4.2). Ein solches Metamodellexemplar wird bereits durch
die Verwendung weniger Modellelemente so unübersichtlich, daß niemand ernsthaft versuchen wird, ein Metamodellexemplar eines UML-Modells mit mehreren Diagrammen
darzustellen.
123
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Abbildung 4.2: Die Klasse „Person“ als Metamodellexemplar.
4.2. KONSISTENZ
124
Diagramme und Sichten eines UML-Modells, die die Zusammenhänge zwischen Modellelementen darstellen, zeigen eine Sicht auf einen Ausschnitt des Metamodellexemplars.
Ein UML-Modell ist konsistent bzw. widerspruchsfrei zum UML-Metamodell, wenn
ein durch die Diagramme und Sichten beschriebenes Metamodellexemplar existiert. In
diesem Fall sind die Bedingungen des Metamodells erfüllt, d.h. die Sichten auf das Metamodellexemplar bzw. auf das System widersprechen sich nicht.
Da ein UML-Modell aus ineinandergreifenden Sichten und Diagrammen besteht, reicht
es nicht aus, jedes einzelne Diagramm auf Einhaltung der Bedingungen des Metamodells
zu überprüfen, d.h. eine Überprüfung eines UML-Modells auf Einhaltung der Bedingungen des Metamodells muß notwendigerweise auf einem äquivalenten diagrammübergreifenden Metamodellexemplar basieren.
4.2.1
Sinn einer Konsistenzprüfung
Wie jedes Projekt steht ein Softwareentwicklungsprojekt unter Kostendruck. Betrachtet
man die Fehlererkennungs- und -beseitigungskosten ([Bal98], Seite 286) einer Softwareentwicklung, so ist offensichtlich, daß Wert auf Fehlervermeidung und, da sich Fehler nie
ganz ausschließen lassen, auf eine frühzeitige Fehlererkennung gelegt werden muß. Hier
kann ein Werkzeug helfen, indem es eine inkonsistente Verwendung von Modellelementen nicht erlaubt oder auf eine inkonsistente Verwendung hinweist. Eine werkzeugunterstützte Konsistenzprüfung zu einem vom Benutzer bestimmten Zeitpunkt hilft, Fehler
zu entdecken, die selbst von einem aufmerksamen Leser bzw. Kritiker des Modells aufgrund der Komplexität des Modells leicht übersehen werden können. Daher ist auch die
Überprüfung „einfacher“ Konsistenzbedingungen nicht zu unterschätzen.
4.2.2
Probleme der (werkzeuggestützten) Konsistenzprüfung
Eine vollständige und werkzeuggestützte Sicherstellung oder Prüfung der Konsistenz von
UML-Modellen ist aus mehreren Gründen nicht möglich:
1. In der praktischen Anwendung der UML ist es üblich, daß ein Modellierer nicht nur
wohlgeformte Modelle entwickelt, sondern zur Vereinfachung bestimmte Elemente
ausläßt, die eventuell zu einer Konsistenzprüfung notwendig sind (Modellunvollständigkeit).
2. Während der gesamten Lebensdauer eines Modells unterliegt das Modell fortlaufenden Veränderungen, so daß Konsistenz nicht zu jedem Zeitpunkt möglich ist.
Deshalb muß ein Werkzeug Inkonsistenzen zulassen und eine Konsistenzprüfung
zu einem vom Benutzer bestimmten Zeitpunkt unterstützen.
3. Eine werkzeuggestützte Konsistenzprüfung setzt voraus, daß das Werkzeug Syntax
und Semantik der UML versteht. Die Definition der UML überläßt dem Model-
125
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
lierer in vielen Situationen die Wahl, in welcher Form (natürliche Sprache, Pseudocode, OCL) er Informationen in einem Modell hinterlegt. Dies erhöht die Ausdrucksstärke der Sprache auf Kosten der Möglichkeiten einer werkzeuggestützten
Konsistenzprüfung.
4. Das UML-Metamodell beschreibt die Semantik der UML, aus denen sich weitere,
nicht explizit im Metamodell formulierte, Konsistenzbedingungen ableiten lassen.
Bevor diese geprüft werden können, müssen sie jedoch erst identifiziert werden
(Vollständigkeitsproblem).
5. Die Rückabbildung eines UML-Modells auf ein Metamodellexemplar bzw. auf die
Metamodellklassen ist nicht durchgängig hinreichend formal definiert. Für Interaktionsdiagramme der exemplarischen Ebene existieren keine entsprechenden Metamodellklassen im Kontext einer Kollaboration, während für die, in der verwendeten Literatur mit Ausnahme von [OMG99] nicht erwähnten, Interaktionsdiagramme der Spezifikationsebene Metamodellklassen existieren (Unvollständigkeit des
UML-Metamodells).
6. Die Umsetzung eines UML-Modells in eine Programmiersprache impliziert weitere
Konsistenzbedingungen, z.B. unterstützt Java keine Mehrfachvererbung, die zwar
außerhalb der hier benutzten Definition von konsistenten UML-Modellen liegen,
aber dennoch von einem Werkzeug unterstützt werden sollten.
4.2.3
Ein hypothetisches Werkzeug zur Konstruktion konsistenter
Modelle
Das UML-Metamodell ist ein logisches Modell, anhand dessen die Semantik der UML
erläutert wird, aber kein physisches Modell, welches die Implementation eines Werkzeugs
beschreibt. Ein Werkzeug, welches die Konsistenz von UML-Modellen unterstützen und
prüfen soll, muß das logische UML-Metamodell auf irgendeine Weise implementieren.
Das UML-Metamodell kann als konzeptionelle Basis für ein Metamodell eines Werkzeugs dienen (Abb. 4.3). Dabei muß das UML-Metamodell an implementationsspezifische Details angepaßt und u.a. um Metamodellklassen, die der Darstellung der Modellelemente dienen (die Metamodellklasse PresentationElement ist bereits im Metamodell
vorhanden), erweitert werden. Die Darstellungsmöglichkeiten eines Werkzeugs wird i.a.
eine Teilmenge der in [OMG99] angegebenen Möglichkeiten sein.
Ein Werkzeug kann die Konstruktion von konsistenten Modellen auf mehrere Arten
unterstützen:
• Inkonsistenzvermeidung: Das Werkzeug vermeidet die Verletzung von Konsistenzbedingungen, indem es eine Verletzung bestimmter Bedingungen nicht zuläßt (z.B.
die inkonsistente Modellierung einer Generalisierung zwischen einer Klasse und
einem Interface).
Metamodellebene
Modellebene
•
•
•
beschreibt
Besteht aus Exemplaren der konkreten Metaklassen (z.B.
der Klasse „Person“ und dem Attribut „name“).
Kann als Objektdiagramm dargestellt werden, deren Objekte und Links auf den Klassen bzw. Assoziationen des
Metamodells basieren.
(formales, i.a. nicht sichtbares UML-Modell)
Metamodellexemplar
Werkzeug
Ein UML-Modell wird intern auf eine
Datenbank abgebildet, die auf die Einhaltung von Konsistenzbedingungen geprüft
werden kann.
(Datenbank)
werkzeuginternes
Modell
Ausprägung
von
beinhaltet das konzeptionelle UMLMetamodell auf eine Weise, so daß
das Werkzeug die Semantik der
UML versteht.
Erweitert das UML-Metamodell um
Metaklassen, die zur Visualisierung
der Modellelemente benutzt werden
(siehe Kapitel 3, PresentationElement)
die Metaklassen repräsentieren ein
physisches Datenbankschema
i.a. wird die Notation durch das
Werkzeug beschränkt
•
•
•
Werkzeug-Metamodell
beschreibt
Besteht aus verschiedenen, ineinandergreifenden Sichten auf ein System.
Die Sichten bestehen aus Diagrammen, die Elemente eines Systems und ihre gegenseitigen Beziehungen spezifizieren und darstellen
(graphische Darstellung)
UML-Modell
Notation
Erläutert die graphische Darstellung der semantischen Konzepte (forward mapping to notation).
Beschreibt verschiedene Optionen zur Darstellung von Modellinformationen (Auslassung
von Informationen bis hin zu
alternativen Darstellungen, läßt
Freiraum für Werkzeuge)
Das Metamodell definiert die Semantik der Metaklassen, mögliche und notwendige Beziehungen zwischen Modellelementen
sowie Bedingungen an die Spezifikation der Modellelemente,
die auch von der Beziehung zu anderen Modellelementen abSemantik und
hängen können.
Bedingungen
Exemplar von
Besteht aus:
• abstrakten Metaklassen (ModelElement, Classifier, Relationship usw.),
• konkreten Metaklassen (Class, Attribute, Association usw.), deren Exemplare (Modellelemente) eine
graphische Darstellung besitzen und/oder zur Spezifikation
eines Modells benutzt werden
• Generalisierungen und Assoziationen zwischen den Metaklassen.
•
UML Notation
Guide der OMG
UML-Metamodell
(in UML-Notation dargestellt)
Graphische Darstellung und Systemspezifikation
Semantik
4.2. KONSISTENZ
126
Abbildung 4.3: Ein hypothetisches Werkzeug (Erweiterung von Abb. 4.1)
127
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Konsistenzunterstützung: Das Werkzeug unterstützt die Modellierung konsistenter
Modelle, indem es in Situationen, in denen die Spezifikation eines Modellelementes
auf anderen Modellelementen basiert (z.B. basiert ein Objekt auf einer Klasse), eine
konsistente Auswahl der Möglichkeiten anbietet.
• Konsistenzprüfung auf Anforderung: Das Werkzeug bietet die Möglichkeit, das
konstruierte Modell, zu einem vom Benutzter bestimmten Zeitpunkt, auf die Verletzung von Konsistenzbedingungen zu prüfen.
Da ein Werkzeug auch das Erstellen inkonsistenter Modelle zulassen muß, sollten
die Konsistenzbedingungen, deren Verletzung in jedem Fall vermieden werden sollte,
sorgfältig ausgewählt werden. Zu der Kategorie der vermeidbaren Inkonsistenzen gehört die falsche Verwendung von Modellelementen, z.B. die Modellierung einer Generalisierungsbeziehung zwischen einer Klasse und einem Interface. Betrachtet man das
Werkzeug-Metamodell als physisches Datenbankschema, so könnte die Einhaltung bestimmter Konsistenzbedingungen durch die Realisierung als Integritätsbedingungen einer
Datenbank gesichert werden (z.B. darf ein Attribut nur einmal in einer Klasse deklariert
werden).
Diese Art der Realisierung kann zu Problemen führen, wenn das Werkzeug inkonsistente Modelle anderer Werkzeuge importieren können soll. Ein weiteres Problem ergibt
sich, wenn ein Modellelement aus dem Modell entfernt werden soll, von dem andere
Modellelemente abhängen. Z.B. basiert ein Operationsaufruf in einem Interaktionsdiagramm auf einem Objekt, dessen Klasse die entsprechende Operation deklariert. Bei
einem Werkzeug, welches eine Verletzung dieser Konsistenzbedingung vermeidet, würde
das Entfernen der Operation aus der Klasse entweder nicht möglich sein oder zu einem
kaskadierenden Löschen von Modellelementen führen. Beide Möglichkeiten sind im Sinne der Benutzerfreundlichkeit nicht akzeptabel.
Ein Werkzeug, welches in bestimmten Situationen eine konsistente Auswahl von Möglichkeiten anbietet, sollte in dieser Situation auch die konsistente Erweiterung der Möglichkeiten anbieten, d.h. die Erzeugung weiterer Modellelemente, auf denen die Spezifikation basiert, ermöglichen. Beispielsweise, wenn in einem Interaktionsdiagramm eine
Operation auf einem Objekt aufgerufen werden soll, werden die Operationen der Klasse
des Objekts zur Auswahl angeboten. Hat die Klasse die gewünschte Operation jedoch
noch nicht deklariert, sollte aus diesem Kontext heraus die Deklaration der gewünschten
Operation möglich sein.
Ein mit dem Werkzeug erstelltes UML-Modell beschreibt immer ein werkzeuginternes Modell, während nur ein konsistentes UML-Modell ein existierendes Metamodellexemplar beschreibt. Genügt das werkzeuginterne Modell den Konsistenzbedingungen, so
beschreibt das mit dem Werkzeug erstellte UML-Modell ein existierendes Metamodellexemplar und ist in diesem Sinne konsistent. Dazu müssen die Konsistenzbedingungen
überprüft werden, deren Verletzung nicht vom Werkzeug vermieden wird.
4.3. RATIONAL ROSE 98
4.2.4
128
Konsistenzprüfung als Informationsproduzent
Wird das Modell auf die Einhaltung von Konsistenzbedingungen geprüft und eine Inkonsistenz festgestellt, sollte das Werkzeug die folgenden Informationen liefern:
• die verletzte Konsistenzbedingung,
• Modellelemente, die für die Inkonsistenz verantwortlich sind und
• Maßnahmen zur Behebung der Inkonsistenz vorschlagen.
Bei einer Systemspezifikation mit der UML werden Modelle mit unterschiedlichen
Spezifikationsgraden erstellt. Bei einem konzeptionellen Modell ist das Modell noch
unvollständig, z.B. sind Attribute und Operationen noch nicht vollständig spezifiziert,
während dies bei implementationsspezifischen Modellen nicht mehr der Fall sein sollte. Anhand der überprüften Konsistenzbedingung sollte der Benutzer feststellen können,
ob es sich um eine inkonsistente Verwendung von Modellelementen, eine inkonsistente
Spezifikation von Modellelementen oder um eine Inkonsistenz auf Grund einer Modellunvollständigkeit handelt.
4.3
Rational Rose 98
Rational Rose 98 ist ein kommerzielles UML-Werkzeug der Rational Software Cooperation (siehe www.rational.com), also der Firma, bei der Booch, Rumbaugh und Jacobson die
ersten UML-Versionen entwickelt haben. Rational Rose 98 (im folgenden Rose genannt)
basiert auf der UML-Version 1.11 und ist verfügbar für MS-Windows und kommerzielle
Unix-Systeme. Die Unix-Version scheint eine Portierung der Windows-Version zu sein,
die über einen geringeren Leistungsumfang verfügt (4.3.2) und merkbar längere Antwortzeiten besitzt.
4.3.1
UML-Modelle in Rational Rose 98
In Rose können Anwendungsfall-, Sequenz-, Kollaborations-, Klassen-, Zustands-, Komponenten- und Einsatzdiagramme modelliert werden. Rose unterstützt keine Objekt- und
Aktivitätsdiagramme. Für die Windowsversion existiert zwar eine Erweiterung, mit der
auch Aktivitätsdiagramme modelliert werden können, aber Rose erkennt nicht die Semantik des Diagramms und die mit dieser Erweitung erstellten Aktivitätsdiagramme können
nicht in Nachfolgeversionen von Rose übernommen werden, falls diese (echte) Aktivitätsdiagramme unterstützen sollten.
Ein UML-Modell wird in Rose durch Sichten (siehe auch Abschnitt 2.4) und Pakete
strukturiert (Abb. 4.4).
1 Version
1.1 ist der direkte Vorgänger von Version 1.3
129
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Abbildung 4.4: Rational Rose 98: Im linken Bereich wird der strukturelle Aufbau des
Modells durch Pakete dargestellt. Im rechten Bereich werden Diagramme
in größenveränderbaren Fenstern dargestellt. Modellelemente können per
„Drag and Drop“ aus dem rechten Bereich in ein Diagramm übernommen
werden.
4.3. RATIONAL ROSE 98
130
Die Anwendungsfallsicht (use case view) besteht aus Akteuren und Anwendungsfälle, die in Anwendungsfalldiagrammen dargestellt und durch Pakete weiter strukturiert
werden können. Anwendungsfälle können durch Sequenz-, Kollaborations- und Klassendiagramme weiter spezifiziert werden, d.h. sie befinden sich in der Baumstruktur (linker
Bereich in Abb. 4.4) unterhalb eines Anwendungsfalls. Akteure, die in Rose ähnlich wie
Klassen behandelt werden, können durch Attribute und Operationen sowie durch maximal
ein Zustandsdiagramm spezifiziert werden.
Die logische Sicht (logical view) kann ebenfalls durch Pakete strukturiert werden. Die
logische Sicht besteht aus Klassendiagrammen, in denen neben Klassen, Interfaces, Akteuren und Beziehungen auch Pakete und Paketabhängigkeiten dargestellt werden können.
Jede Klasse kann durch maximal ein Zustandsdiagramm spezifiziert werden. In Rose können in der logischen Sicht auch Anwendungfall-, Sequenz- und Kollaborationsdiagramme
modelliert werden. Dabei kann aus einem Sequenzdiagramm ein entsprechendes Kollaborationsdiagramm erzeugt werden (sowie umgekehrt), bei denen sich Veränderungen in
einem Diagramm auch auf das entsprechende andere Diagramm übertragen.
Die Komponentensicht (component view) in Rose besteht aus Komponentendiagrammen und kann durch Pakete weiter struktriert werden. Für die Komponenten existieren
eine Reihe vordefinierter Stereotypen, deren graphische Darstellung durch ein eigenes
Icon unterstützt wird. Den Komponenten können Klassen und Interfaces zugeordnet werden. Diese Information wird z.B. bei der Codeerzeugung für Java genutzt. Die dynamischen Diagramme der Komponentensicht (Interaktionsdiagramme, Zustandsdiagramme
und Aktivitätsdiagramme) fehlen in der Komponentensicht von Rose.
Die Einsatzsicht (deployment view) in Rose besteht aus genau einem Einsatz- bzw.
Verteilungsdiagramm. Eine Verbindung zu den Komponenten kann nicht spezifiziert werden.
In Rose kann jedes Diagramm mit einer Notiz, entweder als reiner Text oder in Form
eines Rechtecks mit einem Eselsohr (siehe Abb. 2.12, Seite 20) versehen werden, wobei
die letztere Möglichkeit mit einem Modellelement verknüpft werden kann. Die meisten
Modellelemente können in Rose durch einen beliebigen Text dokumentiert werden (der
in dem kleinen Fenster links unten in Abb. 4.4 angezeigt wird, wenn das Modellelement
selektiert ist). Für ausführlichere Dokumentationen können in der Baumstruktur vorhandene Modellelemente2 mit Dateien und Internetadressen verknüpft werden.
Klassifizierer (Klassen, Interfaces, usw.), teilweise auch andere Modellelemente, werden nur einmal im Modell angelegt, können aber in mehreren Diagrammen verwendet
werden. Daher kann die Änderung der Spezifikation eines Modellelements auch zur Änderung der Darstellung in anderen Diagrammen führen. Bei einigen Modellelementen
kann die im Diagramm dargestellte Information diagrammabhängig selektiert werden.
Dabei kann z.B. bei Klassen sowohl der Detailliertheitsgrad von Operationen (nur der
Operationsname oder die ganze Operationssignatur) als auch der Umfang der darzustellenden Informationen (Attribute und Operationen können einzelnd ausgeblendet werden)
2 Beziehungen
zwischen Modellelementen werden nicht angezeigt.
131
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
eingestellt werden.
Weitere Editionsmerkmale:
• Akteure und Interfaces können wahlweise durch ihr Icon oder durch ihre Standarddarstellung visualisiert werden.
• Die Größenanpassung von zweidimensionalen Modellelementen (Klassen, Komponenten, usw.) kann wahlweise von Rose automatisch oder manuell vom Benutzer
vorgenommen werden.
• Die Diagramme sind in der Größe veränderbar (Zoom).
• Rose kann die Anordnung von Modellelementen in einem Diagramm „optimieren“
(Menü Tools, Layout Diagram). Diese Funktion ist allerding mit Bedacht anzuwenden, da die „Optimierung“ nicht rückgängig gemacht werden kann.
• Werden Modellelemente aus der Modellübersicht (linker Bereich in Abb. 4.4) in ein
Diagramm übernommen und existiert eine Beziehung zwischen diesen Elementen,
so wird diese im Diagramm dargestellt.
• Modellelemente können auf zwei Arten aus dem Diagramm entfernt werden. Wird
das Modellelement nur aus dem Diagramm entfernt, dann existiert es noch im Modell und wird, mit Ausnahme von Beziehungen, in der Modellübersicht angezeigt.
Die zweite Möglichkeit besteht aus dem Entfernen des Modellelements aus dem
Modell. Das Löschen von Beziehungen (Assoziationen, Generalisierungen, usw.)
aus einem Diagramm kann zu Problemen führen, wenn die Beziehung in keinem
Diagramm dargestellt wird. Da die Beziehung auch nicht in der Übersicht angezeigt wird, ist sie für den Modellierer visuell nicht mehr zu erfassen, obwohl sie
weiterhin im Modell vorhanden ist.
• Ausgehend von einem Modellelement kann zu den Diagrammen gewechselt werden, in denen das Modellelement vorhanden ist oder zur Spezifikation anderer Modellelemente gewechselt werden, die mit diesem Element verbunden sind. Auf diese Weise kann die Verwendung eines Modellelements im Modell verfolgt und eine
nicht mehr sichtbare Beziehung entdeckt werden.
• Teilweise können die Diagramme auch in Booch- oder OMT-Notation (re-) transformiert werden.
4.3.2 Weitere Merkmale von Rational Rose 98
Rose unterstützt mehrere Programmiersprachen, d.h. die UML-Modelle können sprachspezifisch erweitert werden und aus den UML-Modellen kann Code erzeugt werden. Teilweise ist sogar ein Round-Trip-Engineering möglich. Bei der Modellierung können meh-
4.3. RATIONAL ROSE 98
132
rere Sprachen gleichzeitig unterstützt werden. Rose unterstützt u.a. C++, Java, Smalltalk, Ada, Visual Basic, Oracle 8 und kann auch IDL (Interface Definition Language) für
CORBA-Anwendungen (Common Object Request Broker Architecture) und DDL (Data
Description Language) für Datenbankanwendungen erzeugen.
In der Unix-Version fehlt u.a. die Unterstützung für Visual Basic, Smalltalk und
Oracle 8, während die Windows-Version weitergehende Visual C++ (Microsoft) Unterstützung bietet und andere Produkte von Microsoft integriert (z.B. MS Repository, MS
Visual Source Safe).
Rose unterstützt mehrere Benutzer nebenläufig, indem jedem Benutzer ein privater
Arbeitsbereich zugestanden wird und sich Modellveränderungen in diesem Bereich nicht
global auswirken. Erst der Umweg über ein Konfigurations-Management und KontrollSystem (CMVS, z.B. Rational ClearCase oder Microsoft SourceSafe) machen die Änderungen für andere sichtbar. Ein Werkzeug zur graphischen Darstellung von Unterschieden
zwischen zwei Modellen ist im Lieferumfang enthalten (Visual Differencing Tool).
Rose besitzt ein Interface (Rose Extensibility Interface , REI), welches den Zugriff
auf die Anwendung Rose selbst, die Diagramme und die Modellelemente eines RoseUML-Modells ermöglicht (Abb. 4.5). Dieses Interface kann von Rose Script3 zur Automatisierung manueller Rose-Funktionen genutzt werden. Sogenannte „Rose Automation
objects“ können das Interface ebenfalls nutzen und eröffnen die Möglichkeit per OLE
(Object Linking And Embedding) Funktionen anderer Anwendungen aus Rose heraus
auszuführen oder umgekehrt Rose-Funktionen aus anderen Anwendungen heraus auszuführen. Dabei dient Rose entweder als Controller oder als Server.
Rose
Application
Rose
Script
Rose
Diagrams
Extensibility
Interface
Model
Elements
Rose
Automation
Abbildung 4.5: Rose Extensibility Interface (REI)
3 Die
Rose Scripting Language ist eine erweiterte Version der Summit BasicScriptlanguage
(www.summsoft.com) und hat Ähnlichkeiten zu MS Visual Basic.
133
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
4.3.3 Konsistente UML-Modelle und Rational Rose 98
Rose unterstützt die Konstruktion von konsistenten UML-Modellen auf alle in Abschnitt
4.2.3, Seite 125 genannten Arten: Inkonsistenzvermeidung, Konsistenzunterstützung und
Konsistenzprüfung auf Anforderung.
Einige Inkonsistenzen, die auf Grund der Modellierung falscher Beziehungen entstehen würden, werden von Rose zurückgewiesen. Inkonsistenzen, die sich durch die Spezifikation der Modellelemente ergeben, werden nicht verhindert. So ist es z.B. möglich, in
einer Klasse einen Attributnamen mehrfach zu verwenden.
An Stellen, an denen die Spezifikation eines Modellelements auf einem anderen Modellelement basiert, bietet Rose eine (meist!) konsistente Auswahl an, ermöglicht teilweise eine konsistente Erweiterung der Möglichkeiten, indem das gewünschte Basiselement
aus diesem Kontext heraus erstellt werden kann, und ermöglicht teilweise eine Spezifikation von Modellelementen durch beliebigen Text, ohne einen Bezug zu einem Basiselement herzustellen. Zu einer Komponente kann angegeben werden, welche Klassen
und Interfaces sie realisiert. Hier stellt Rose eine Liste von Klassen bzw. Interfaces zur
Verfügung, die aber nicht aus diesem Kontext (Spezifikation einer Komponente) heraus
erweitert werden kann. Soll in einem Interaktionsdiagramm eine Operation auf einem
Objekt aufgerufen werden, bietet Rose als Auswahl die Operationen der Klasse des Objekts an (inklusive geerbter öffentlicher Operationen. Alternativ kann aus diesem Kontext
heraus die Klasse um die gewünschte Operation erweitert werden oder ein beliebiger Text
als Repräsentant für eine nicht existierende Operation angegeben werden.
Rose besitzt nur wenige Konsistenzprüfungen, die auf Anforderung durchgeführt werden können. Der Menüpunkt „Check Model“ aus dem Menü „Tools“ untersucht das Modell auf nicht auflösbare Referenzen. Es ist möglich, daß ein Modellelement (z.B. ein
Objekt) ein anderes Element (z.B. eine Klasse) referenziert, welches jedoch nicht existiert. In diesem Fall kann die Referenz nicht aufgelöst werden. Dieser Befehl überprüft
mehrere Konsistenzbedingungen, deren Überprüfung auch einzelnd (diagrammabhängig)
ausgeführt werden kann.
Teilweise kann vor der Codeerzeugung ein sprachabhängiger Syntaxcheck durchgeführt werden, der weitere, aber leider nicht alle, Fehler bzw. Inkonsistenzen entdeckt.
Z.B. wird die mehrfache Deklaration eines Attributs weder von Rose als Inkonsistenz der
UML, noch als syntaktischer Fehler von Java entdeckt. Der Fehler wird erst entdeckt,
wenn der Java-Compiler den Code übersetzt.
Mit Hilfe von Rose Script können weitere Konsistenzprüfungen auf Anforderung realisiert werden (siehe Kapitel 5). Da die Konsistenzprüfungen auf der Basis des werkzeuginternen Modells durchgeführt werden, wird im nächsten Abschnitt das Werkzeugmetamodell von Rose kurz vorgestellt. Anhand dieses Modells ist erkennbar, welche Informationen ein Modellierer in einem Rose-UML-Modell spezifzieren kann und welche
Informationen Rose semantisch erkennt.
4.4. DAS WERKZEUGMETAMODELL VON RATIONAL ROSE 98
4.4
134
Das Werkzeugmetamodell von Rational Rose 98
Aus der Dokumentation von Rose Script kann auf eine Klassenhierarchie geschlossen
werden, deren Klassen von Rose Script genutzt werden können, um Informationen der
UML-Modelle in Rose zu überprüfen und die Modelle zu verändern. In diesem Abschnitt
werden die wichtigsten zu diesem Zweck notwendigen Klassen mit einer Auswahl ihrer
Attribute und Operationen vorgestellt. Aus den Namen der Attribute und Operationen
kann teilweise auf Assoziationen zwischen den Klassen geschlossen werden, die nicht
dokumentiert sind und hier auch nicht explizit dargestellt werden. Modellelemente, die
in Anwendungsfall-, Komponenten- und Verteilungsdiagramme benutzt werden, werden
nicht erläutert, da sie im Rahmen dieser Arbeit nicht behandelt werden.
Da diese Klassen ebenfalls von Rose genutzt werden, geben die folgenden Abschnitte
auch einen Einblick auf die Spezifikationsmöglichkeiten von UML-Modellen in Rose.
4.4.1
Die Spitze der Klassenhierarchie
Die Klasse RoseObject ist die allgemeinste Klasse in der Klassenhierachie (Abb. 4.6).
Sie stellt Operationen zur Verfügung, mit denen z.B. überprüft werden kann, ob ein Objekt zu einer bestimmten Klasse gehört oder auch als Objekt einer bestimmten anderen
Klasse angesehen werden kann. Die Klasse Element ist mit der UML-Metamodellklasse
ModelElement vergleichbar. Das Attribut name kennzeichnet den Namen eines Elements,
Model und Application bezeichnen das Modell bzw. die Anwendung (Rose), zu der das
Element gehört.
Die Klasse RoseItem (und deren Unterklassen) stellen die Datensicht auf die Spezifikation eines Modellelements dar, während die Klasse RoseItemView (und deren Unterklassen) für die graphische Darstellung eines Modellelements und dessen Spezifikation
zuständig sind. Ein RoseItem kann ein Stereotyp besitzen, intern in Rose dokumentiert und mit einer externen Datei oder Internetadresse verknüpft werden. Die Operation
OpenSpecification öffnet ein Dialogfenster in Rose zur Spezifikation des Modellelements.
Die Datensicht auf ein Modellelement wird in den Diagrammen jeweils durch eine
Sicht (RoseItemView) dargestellt. Dadurch ist es möglich, die darzustellende Information in einem Diagramm dem Zweck des Diagramms anzupassen. Jedes Diagramm
(Diagram) kann in Rose durch beliebigen Text dokumentiert und mit graphisch dargestellten Notizen versehen werden.
4.4.2
Diagrammarten
In Rose können die graphisch dargestellten Modellelemente z.B. mit der Maus selektiert werden. Diese Information kann durch ein Roseskript abgefragt werden (Operation
GetSelectedItems, siehe Abb. 4.7) und wird später bei der Realisierung von Konsistenzprüfungen benutzt, um die Prüfungen auf einen Teilbereich des Modells einzu-
135
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
RoseObject
CanTypeCast()
IdentifyClass()
IsClass()
TypeCast()
Element
Name
Application
Model
RoseItemView
Item
ParentDiagram
ParentView
SubViews
XPosition
YPosition
IsSelected()
HasItem()
HasParentView()
RoseItem
Documentation
Stereotype
ExternalDocuments
LocalizedStereotype
AddExternalDocument()
DeleteExternalDocument()
GetRoseItem()
OpenSpecification()
Diagram
Documentation
Items
ItemViews
Activate()
AddNoteView()
IsActive()
Exists()
RemoveNoteView()
Abbildung 4.6: Die Spitze der Klassenhierarchie von Rose
4.4. DAS WERKZEUGMETAMODELL VON RATIONAL ROSE 98
136
schränken. Die Operation Activate der Klasse Diagram stellt das entsprechende Diagramm in einem Fenster von Rose dar. Diese Operation wird später benutzt, um Modellelemente sichtbar darzustellen, die eventuell für eine Verletzung einer Konsistenzbedingung verantwortlich sind.
Diagram
Activate()
GetSelectedItems()
ClassDiagram
ScenarioDiagram
StateDiagram
ParentCategory
Parent
InstanceViews
AddInstance()
AddInstanceView()
CreateMessage()
DeleteInstance()
GetDiagramType()
GetMessages()
GetSelectedLinks()
GetSelectedMessages()
GetSelectedObjects()
RemoveInstanceView()
DeploymentDiagram
AddDevice()
AddProcessor()
GetDevices()
GetProcessors()
RemoveDevice()
RemoveProcessor()
AddAssociation()
AddCategory()
AddClass()
AddUseCase()
GetAssociations()
GetCategories()
GetClasses()
GetClassView()
GetSelectedCategories()
GetSelectedClasses()
GetUseCases()
IsUseCaseDiagram()
RemoveAssociation()
RemoveCategory()
RemoveClass()
RemoveUseCase()
AddStateView()
GetSelectedStates()
GetSelectedStateViews()
GetSelectedTransitions()
GetStateView()
GetStateViews()
RemoveStateView()
ModuleDiagram
ParentSubsystem
AddModule()
AddSubsystem()
GetModules()
GetSelectedModules()
GetSelectedSubsystems()
GetSubsystems()
Abbildung 4.7: Die Diagrammklassen von Rose
Die fünf Unterklassen von Diagram dienen der internen Darstellung der sieben möglichen Diagrammarten in Rose. Die Klasse ClassDiagram ist für Klassen- und Anwendungsfalldiagramme verantwortlich. Sequenz- und Kollaborationsdiagramme, die als
(weitgehend) äquivalent angesehen werden können, werden intern durch die Klasse ScenarioDiagram dargestellt. Zustands-, Komponenten- und Verteilungsdiagramme werden
durch die Klassen StateDiagram, ModuleDiagram und DeploymentDiagram repräsentiert.
Die meisten Diagrammklassen besitzen Operationen, mit denen auf selektierte Modellelemente differenzierter zugegriffen werden kann, als dies mit der Operation GetSelectedItems möglich ist.
137
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Das Attribut Parent der Klasse StateDiagram bezeichnet die Klasse, zu der das
Zustandsdiagramm gehört. Wie bereits oben erwähnt, wird in Rose ein UML-Modell
mittels Sichten (use case view, logical view, usw.) und Paketen strukturiert. Das Attribut
ParentCategory gibt die Sicht bzw. das Paket an, zu der das Klassen- bzw. Anwendungsfalldiagramm gehört. In Klassen- und Anwendungsfalldiagrammen können Paketabhängigkeiten modelliert werden. Ein Diagramm, welches nur Pakete enthält wird auch
Paketdiagramm genannt.
4.4.3 Modellelemente in Klassendiagrammen
Die Darstellung von Klassen, Interfaces und anderen in Klassendiagrammen von Rose
verwendbaren Modellelementen werden durch Unterklassen von RoseItemView (Abb.
4.6) repräsentiert. Die Klassen, die für die Spezifikation dieser Modellelemente verantwortlich sind, sind Unterklassen von RoseItem und werden in diesem Abschnitt erläutert
(siehe Abb. 4.8).
Die Klasse Class repräsentiert nicht nur Klassen, sondern auch Modellelemente, die
als Klassen mit einem bestimmten Stereotyp, z.B. «Interface», dargestellt werden können.
Rose erkennt die beiden Klassifizierer Interface und Akteur anhand ihrer Stereotypen und
kann sie auch mit ihrem Icon darstellen. Während die Spezifikation von Akteuren gegenüber Klassen eingeschränkt ist, wird ein Interface semantisch nicht als solches erfaßt,
d.h. für Rose gibt es, bis auf die Darstellung, keinen Unterschied zwischen einer beliebigen stereotypisierten Klasse und einem Interface. Mit Hilfe der Funktionen der Klasse
Class können mit Rose Script u.a. Beziehungen zu anderen Klassen hinzugefügt, entfernt und ermittelt werden. Die Attribute und Operationen der Klasse werden durch die
Attribute Attributes und Operations gespeichert. Diese Attribute repräsentieren sogenannte Collections (Sammlungen), über die auf die Attribute und Operationen einer
Klasse zugegriffen werden kann. Damit sind alle Informationen, die der Benutzer im
Modell spezifiziert, prinzipiell auch in Rose Script verfügbar und veränderbar. Klassen
können als abstrakt markiert werden, ihre Sichtbarkeit (public, protected, private), Kardinalität und Nebenläufigkeit kann angegeben werden. StateMaschine bezeichnet das
einzige, falls vorhandene, Zustandsdiagramm der Klasse, welches auch von Rose Script
erzeugt werden kann (Operation CreateStateMaschine).
Umgekehrt „kennen“ auch Attribute und Operationen ihre Klasse (Attribut ParentClass). Die Parameter einer Operation (Attribut Parameters vom Typ collection) werden durch die Klasse Parameters repräsentiert.
Assoziations-, Realisierungs-, Abhängigkeits- und Generalisierungsbeziehungen werden durch die Klassen Association, RealizeRelation, ClassDependency und InheritRelation repräsentiert. Die Klasse Role ist vergleichbar mit der Klasse AssociationEnd des UML-Metamodells. Sie repräsentiert die Informationen, die an den Enden
einer Assoziation spezifiziert wird. Die Rollen bzw. Assoziationsenden einer Assoziation können über die Attribute Role1 bzw. Role2 erreicht werden. Ob es sich bei einem
Assoziationsende um die erste oder zweite Rolle der Assoziation handelt, ist irrelevant.
Class
AddAssociation()
AddAttribute()
AddClassDependency()
AddInheritRel()
AddOperation()
AddRealizeRel()
CreateStateMaschine()
DeleteAssociation()
DeleteAttribute()
DeleteClassDependency()
DeleteInheritRel()
DeleteNestedClass()
DeleteOperation()
DeleteRealize()
DeleteStateMaschine()
GetAssociateRoles()
GetAssociations()
GetClassDependencies()
GetInheritRelations()
GetLinkAssociation()
GetRealizeRelations()
GetRoles()
GetSubclasses()
GetSuperclasses()
IsALinkClass()
Abstract
Attributes
Operations
ExportControl
Cardinality
Concurrency
StateMaschine
RoseItem
Role
AddKey()
DeleteKey()
GetClassName()
Class
Constraints
Association
ExportControl
Friend
Containment
Cardinality
Aggregate
Static
Navigable
Keys
Association
AddParameter()
DeleteParameter()
RemoveAllParameters()
InheritRelation
ExportControl
FriendshipRequired
Virtual
ClassDependency
ClientCardinality
SupplierCardinality
ExportControl
RealizeRelation
GetContextClass()
GetSupplierClass()
Const
InitValue
Type
Operation
Concurrency
Exceptions
ExportControlProperty
Parameters
ParentClass
Postconditions
Proconditions
ReturnType
Semantics
Parameter
GetCorrespondingRole()
GetOtherRole()
SetLinkClassName()
Derived
LinkClass
Role1
Role2
Roles
GetContextClass()
GetSupplierClass()
ClassRelation
HasClient()
HasSupplier()
GetClient()
GetSupplier()
Relation
SupplierName
Attribute
ContainmentProperty
Derived
ExportControlProperty
InitValue
ParentClass
Static
Type
OpenSpecification()
Stereotype
4.4. DAS WERKZEUGMETAMODELL VON RATIONAL ROSE 98
138
Abbildung 4.8: Die Rose-Metaklassen für die in einem Klassendiagramm vorkommenden Modellelemente.
139
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
4.4.4 Modellelemente in Interaktionsdiagrammen
In Rose können Kollaborationsdiagramme nur auf der exemplarischen Ebene modelliert
werden. Sequenz- und Kollaborationsdiagramme der exemplarischen Ebene bestehen aus
Objekten (Exemplaren), Links und Botschaften (bzw. Stimuli). Diese Modellelemente
werden in Rose für beide Diagrammarten durch die gleichen Klassen repräsentiert (Abb.
4.9).
RoseItem
Stereotype
OpenSpecification()
ObjectInstance
ClassName
Links
MultipleInstances
Persistence
Link
LinkRole1
LinkRole2
LinkRole1Visibility
LinkRole2Visibility
AddLink()
DeleteLink()
GetClass()
IsClass()
AddMessageTo()
AssignAssociation()
DeleteMessage()
GetMessages()
UnAssignAssociation()
Message
Frequency
Synchronization
GetSenderObject()
GetReceiverObject()
IsMessageToSelf()
IsOperation()
GetOperation()
GetLink()
Abbildung 4.9: Die Rose-Metaklassen für die in den Sequenz- und Kollaborationsdiagrammen vorkommenden Modellelemente.
Die Klasse eines Objekts (ObjectInstance) wird als String gespeichert (Attribut
ClassName). Falls der Benutzer in Rose eine Klasse für das Objekt ausgewählt hat, kann
diese Klasse mit der Operation GetClass ermittelt werden. Das Attribut Links enthält
eine Sammlung (Collection) der mit dem Objekt verbundenen Links.
Die durch einen Link verbundenen Objekte in einem Kollaborationsdiagramm werden
durch die Attribute LinkRole1 bzw. LinkRole2 repräsentiert. Im Gegenstatz zu den
Rollen-Attributen einer Assoziation verweisen diese Attribute nicht auf die Link-Enden
eines Links. Zu einem Link-Ende kann jedoch die Sichtbarkeit spezifiziert und durch
Rose Script abgefragt werden. Ein Link kann einer bestehenden Assoziation zugeordnet
sein und kennt die Botschaften, die über diese Verbindung verschickt werden.
Eine Botschaft (Message) kann mit einer Operation verknüpft sein (IsOperation,
GetOperation), kennt das Sender- und das Empfängerobjekt, sowie den zugehörigen
Link. Die Reihenfolge der Botschaften kann von Rose Script nicht ermittelt werden. Die
4.4. DAS WERKZEUGMETAMODELL VON RATIONAL ROSE 98
140
Reihenfolge kann in Rose nicht explizit spezifiziert werden. In einem Interaktionsdiagramm ergibt sich die Reihenfolge der Botschaften implizit durch die Anordnung entlang
der vertikalen Achse des Diagramms. In einem Kollaborationsdiagramm wird die Reihenfolge durch die Reihenfolge der Erstellung der Botschaften vorgegeben.
4.4.5
Modellelemente in Zustandsdiagrammen
Zustandsdiagramme (Statecharts) enthalten einen Zustandsautomaten, der aus Zuständen,
Ereignissen, Transitionen und Aktionen als mögliche Reaktionen auf Ereignisse besteht.
Für diese Modellelemente enthält das Werkzeugmetamodell von Rose die entsprechenden
Klassen (Abb. 4.10).
Die Klasse StateMaschine verweist auf das Zustandsdiagramm (StateDiagram),
die zugehörige Klasse (ParentClass) sowie auf die, im Zustandsautomaten vorhandenen, Zustände und Transistionen. Zustandsautomaten (Statecharts) können weitere verschachtelte Zustände enthalten. Die Operationen der Klasse StateMaschine ermöglichen wahlweise den Zugriff auf die Zustände und Transitionen der obersten Ebene oder
aller Zustände und Transistionen des Zustandsautomaten.
Diese Auswahlmöglichkeit besteht auch bei den Zuständen (State). Z.B. kennzeichnet das Attribut Substates die unmittelbaren Unterzustände eines Zustands, während
die Operation GetAllSubstates alle Unterzustände des Zustands liefert. Ein Zustand
„kennt“ die mit ihm verbundenen Transitionen und kann einen Erinnerungs-Zustand enthalten. Ein Zustand kann Entry- und Exit-Aktionen enthalten, sowie anhaltende Aktionen,
die solange ausgeführt werden, wie der Zustand aktiv ist (GetDoActions). Die Zustände
in Rose können auch interne Transitionen, die auf Grund benutzerdefinierter Ereignisse
„feuern“ können, enthalten. Verzögerte Ereignisse können spezifiziert werden, indem die
Aktion auf das zu verzögernde (benutzerdefinierte) Ereignis als „defer“ spezifiziert wird.
In Rose besteht eine Aktion (Action) aus drei Teilen:
1. Der Name (Attribut Name der Klasse Element) ist ein String, der die Aktion beschreibt. Dies sollte der Name einer Operation, eines Signals oder einer Ausnahme
sein. Rose bietet dem Modellierer jedoch keine Auswahl von Möglichkeiten an,
daher fehlt auch eine Beziehung zu einer entsprechenden Operation o.ä.
2. Das Attribut Argument ist ein String, der die Argumente der Aktion speichert.
3. Das Attribut Target ist ebenfalls ein String, der nur zur Verfügung steht wenn es
sich um eine Sende-Aktion handelt. Es sollte eine Klasse bzw. ein Objekt bezeichnen, die dieses Signal empfängt. Auch hier bietet Rose keine Auswahlmöglichkeit
bzw. eine Verbindung zum entsprechenden Element an.
Sende-Aktionen werden von Rose anders als Aufruf-Aktionen dargestellt. Dies ist
in UML Version 1.3 nicht mehr der Fall.
141
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Element
Name
RoseItem
Stereotype
Statemaschine
Diagram
ParentClass
States
Event
Arguments
GuardCondition
OpenSpecification()
GetAction()
AddState()
DeleteState()
GetAllStates()
GetAllTransitions()
GetTransitions()
RelocateState()
State
History
ParentState
ParentStateMaschine
StateKind
SubStates
Transitions
AddDoAction()
AddEntryAction()
AddExitAction()
AddState()
AddTransition()
AddUserDefinedEvent()
DeleteAction()
DeleteState()
DeleteTransition()
DeleteUserDefinedEvent()
GetAllSubstates()
GetDoActions()
GetEntryActions()
GetExitActions()
GetUserDefinedEvents()
RelocateState()
Relation
SupplierName
Action
Arguments
Target
HasClient()
HasSupplier()
GetClient()
GetSupplier()
Transition
GetSendAction()
GetSourceState()
GetTargetState()
GetTriggerAction()
GetTriggerEvent()
RedirectTo()
Abbildung 4.10: Die Rose-Metaklassen für die in einem Zustandsdiagramm vorkommenden Modellelemente.
4.5. KLASSENDIAGRAMM
142
Transitionen (Klasse Transition) „kennen“ ihren Ausgangs- und Folgezustand, sowie das dazugehörige Ereignis und die Aktion auf das Ereignis.
Das Attribut GuardCondition der Klasse Event kennzeichnet eine Bedingung, die
das „Feuern“ ihrer Transition überwacht. Von einem benutzerdefiniertem Ereignis, welches zu einem Zustand gehört, kann auf die zugehörige Aktion geschlossen werden (GetAction).
4.5
Klassendiagramm
Klassendiagramme gehören zu den wichtigsten und am meisten verwendeten Diagrammen einer objektorientierten Systementwicklung. Sie spezifizieren die strukturelle und
logische Basis für die Realisierung des Systems, auf der die Spezifikation und die Realisierung des Systemverhaltens aufbaut.
In diesem Abschnitt wird erläutert, wie die graphische Darstellung der Modellelemente eines Klassendiagramms ein Metamodellexemplar der UML bzw. ein Rose-Metamodellexemplar beschreibt. Der Vergleich der Metamodellexemplare zeigt, in welchem
Ausmaß Rose die Semantik der UML erkennt und welche Konsistenzbedingungen, die
im Metamodell der UML definiert sind bzw. sich aus dem Metamodell ableiten lassen,
mit Hilfe der Skript-Sprache von Rose überprüft werden können.
4.5.1
Klassen
Eine Klasse wird in einem Rechteck dargestellt, welches üblicherweise horizontal in drei
Bestandteile zerlegt wird. Der obere Teil ist für den Klassennamen, Eigenschaftswerte,
Zusicherungen sowie für einen Stereotyp vorgesehen. Im mittleren Teil werden die Attribute und im unteren Teil die Operationen dargestellt. Abb. 4.11 zeigt eine abstrakte Klasse ohne Attribut- und Operationsanteile mit einem Stereotyp. Abstrakte Klassen können
durch die Zusicherung {abstract} oder durch einen kursiv geschriebenen Klassennamen
dargestellt werden.
<<Stereotyp>>
Klassenname
Abbildung 4.11: Abstrakte Klasse mit einem Stereotyp
Die Abbildung der Klasse aus Abb. 4.11 auf ein Metamodellexemplar zeigt Abb. 4.12.
Die entsprechenden Metamodellausschnitte befinden sich in Abb. 3.5, Seite 44 (Klasse)
und Abb. 3.28, Seite 72 (Erweiterungsmechanismen).
Die Abbildung der Klasse aus Abb. 4.11 auf die interne Datenstruktur von Rose zeigt
Abb. 4.13.
143
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
: Class
name = Klassenname
isRoot = false
isLeaf = false
isAbstract = true
isActive = false
: Stereotype
extendedElement
stereotype
name = Stereotyp
icon
baseClass = Class
Abbildung 4.12: Darstellung einer stereotypisierten Klasse als Metamodellexemplar
: Class
Name = Klassenname
Stereotype = Stereotyp
Abstract = true
Cardinality = n
Concurrency = Sequential
Abbildung 4.13: Eine stereotypisierte Klasse aus Sicht der Skriptsprache von Rational
Rose.
Die folgenden Informationen zu einer Klasse in den Abbildungen 4.12 und 4.13 entsprechen einander:
UML
name
isAbstract
isActive
Rose
Name
Abstract
Concurrency
stereotype
Stereotype
Bemerkung
Concurrency kann in Rose die Werte Sequential, Guarded, Active und Synchronous annehmen.
In Rose ist „Stereotype“ ein Attribut der Klasse RoseItem. Es ist möglich, einen Stereotyp
aus einer Liste auszuwählen oder einen neuen Stereotyp zu erstellen. Es ist nicht möglich, den Namen eines Stereotyps zu ändern
(nicht zu verwechseln mit der Möglichkeit,
einen anderen Stereotyp für ein Modellelement (RoseItem) auszuwählen).
Die im Metamodell angegebenen Eigenschaften isRoot und isLeaf einer Klasse
können in Rose nicht in jedem Fall angegeben werden. Die Java-Erweiterung von Rose
ermöglicht das Setzen eines booleschen Wertes für die „Final“-Eigenschaft einer Klasse
(vergleichbar mit isLeaf), die bei der Codeerzeugung berücksichtigt wird.
Konsistenzbedingungen für Klassen existieren im Zusammenhang mit anderen Modellelementen und werden in den entsprechenden Abschnitten behandelt.
4.5. KLASSENDIAGRAMM
4.5.2
144
Attribute
Attribute werden im Klassenrechteck mit der folgenden Syntax notiert:
Sichtbarkeit Attributname ’[’ Kardinalität ’]’ ’:’ Typ
’=’ Initialwert ’{’ Eigenschafts-String ’}’
• Die Sichtbarkeit der Attribute wird mit ’+’ (öffentlich), ’#’ (geschützt) und ’-’ (privat) angegeben.
• Der Eigenschafts-String dient der Notierung von Zusicherungen und Eigenschaftswerten.
• Bei Klassenattributen (Attribute, deren Wert für alle Objekte einer Klasse gelten)
wird die gesamte Deklaration unterstrichen dargestellt.
• Abgeleitete Attribute werden gekennzeichnet, indem den Attributnamen ein Slash
(’/’) vorangestellt wird.
• Attribute können mit einem Stereotyp markiert werden.
Bei der Darstellung von Attributen muß nicht immer die vollständige Deklaration der
Attribute dargestellt werden (Abb. 4.14). Es liegt in der Verantwortung des Werkzeugs,
bestimmte Eigenschaften darzustellen bzw. für Default-Werte für bestimmte Eigenschaften, z.B. die Sichtbarkeit, zu sorgen. Rose ermöglicht es, einzelne Attribute und Operationen einer Klasse in einem Klassendiagramm auszublenden und den Detailliertheitsgrad
der Darstellung von Attributen und Operationen festzulegen.
Klassenname
Attributname : Typ = Initialwert
Abbildung 4.14: Attribut ohne Darstellung der Sichtbarkeit. Zusicherungen, z.B. frozen,
können an das Attribut angeheftet werden.
Die Abbildung des Attributs aus Abb. 4.14 auf ein Metamodellexemplar ist in Abb.
4.15 angegeben. Der Ausschnitt des Metamodells befindet sich in Abb. 3.10, Seite 50.
Eine Zusicherung würde gegebenenfalls mit einem Link an das Attribut geheftet werden.
Die Abbildung des Attributs aus Abb. 4.14 auf die interne Datenstruktur von Rose ist
in Abb. 4.16 angegeben.
Die folgenden Informationen eines Attribut aus den Abbildungen 4.15 und 4.16 entsprechen einander:
145
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
: Class
name = Klassenname
isRoot = false
isLeaf = false
isAbstract = false
isActive = false
: Attribute
owner
name = AttributName
ownerScope = instance
feature
visibilityKind = public
initialValue = Initialwert
multiplicity = 1
changeability = changeable
targetScope = instance
: Class
type
name = Typ
isRoot = false
isLeaf = false
isAbstract = false
isActive = false
Abbildung 4.15: Darstellung eines Attributs als Metamodellexemplar unter Auslassung
der Zugehörigkeit zu einem Namensraum. Es wird angenommen, daß
ein Werkzeug sinnvolle Defaultwerte für nicht-spezifizierte Eigenschaften setzt.
Anstelle von Class als Typ kann auch ein DataType benutzt werden.
: Class
Name = Klassenname
Abstract = false
Attributes
: Attribute
Name = AttributName
Static = false
ExportControlProperty = PublicAccess
InitValue = Initialwert
Derived = false
Type = Typ
ParentClass
Abbildung 4.16: Klasse und Attribut aus Sicht der Skriptsprache von Rational Rose. Die
Parameter „Attributes“ und „ParentClass“ lassen auf eine Assoziation
zwischen den Metaklassen „Class“ und „Attribute“ schließen. Das Attribut „Attributes“ der Metaklasse „Class“ enthält eine Sammlung (collection) von Referenzen auf die Attribute der Klasse.
Chart Name : Attrib
Chart Filename : A
Chart Type : UML O
4.5. KLASSENDIAGRAMM
UML
name
ownerScope
visibilityKind
initialValue
type
Rose
Name
Static
ExportControlProperty
InitValue
Type
146
Bemerkung
instance entspricht Static = false
public entspricht PublicAccess
In Rose ist Typ ein Attribut der Klasse
Attribute.
Die folgenden Informationen können nicht aus Abb. 4.16 extrahiert bzw. nicht in
einem Rose-Modell hinterlegt werden:
• Die Kardinalität eines Attributs kann nicht direkt angegeben werden4 .
• targetScope kann nicht angegeben werden.
• Zusicherungen können nicht direkt angegeben werden.
Die Eigenschaft „Derived“ ist eine Zusicherung an ein Attribut, die Rose direkt unterstützt. Eine Klasse kann als „persistent“ oder „transient“ spezifiziert werden.
Es ergeben sich folgende Konsistenzbedingungen und Möglichkeiten, diese Bedingungen in Rose zu überprüfen:
• Attribut-1: Kein Attribut darf mehrfach innerhalb einer Klasse deklariert werden
([OMG99], Seite 2-47).
Rose findet keine Verletzung dieser Bedingung, eine Überprüfung kann jedoch realisiert werden.
• Attribut-2: Die Deklarations eines Attributs sollte eines Typen beinhalten.
• Attribut-3: Der Typ des Attributs sollte im Modell (genauer: im Namensraum des
Attributs) existieren (Vollständigkeitsbedingung).
Als Typen eines Attributs kommen die Klassifizierer Class und DataType in Frage. Diese gehören in Rose zur Klasse Class. Mit der Skript-Sprache von Rose
läßt sich überprüfen, ob eine Klasse mit dem Namen des Typs existiert und gegebenenfalls die fehlende Klasse im Modell erzeugen (d.h. nicht, daß es auch ein
Klassendiagramm gibt, welches die Klasse enthält).
• Attribut-4: Ein vorhandender Defaultwert sollte aus dem Wertebereich des Typs
sein.
4 Indirekt
können weitere Informationen immer als Notiz im Diagramm oder als Dokumentation zu
einem Modellelement vermerkt werden.
147
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Eine Überprüfung dieser Bedingung setzt voraus, daß das Werkzeug den Wertebereich kennt. Dies ließe sich z.B. für Basistypen realisieren, deren Semantik bzw.
Wertebereich allgemein anerkannt ist.
4.5.3 Operationen
Operationen werden im unteren Bereich des Klassenrechtecks der deklarierenden Klasse
mit der folgenden Syntax notiert:
Sichtbarkeit Operationsname (Parameterliste): Rückgabetyp { Eigenschafts-String }
• Die Sichtbarkeit entspricht der Sichtbarkeit von Attributen. Zusätzliche Arten von
Sichtbarkeiten können definiert werden. Sie sollten durch Werkzeugkonventionen
oder im Eigenschafts-String dargestellt werden.
• Der Rückgabetyp ist eine sprachabhängige Spezifikation des Typs (oder der Typen,
[OMG99], Seite 3-43) des Rückgabewertes der Operation.
• Die Parameterliste ist eine durch Kommata getrennte Liste von formalen Parametern, die durch die folgende Syntax spezifiziert wird:
Art Name : Typ-Ausdruck = Default-Wert
mit
– Art ist in, out, inout. Default ist in.
– Name bezeichnet den Namen des Parameters.
– Der Typ-Ausdruck ist die (sprachabhängige) Spezifikation eines Typen.
– Der Default-Wert ist ein optionaler Wert-Ausdruck für den Parameter.
– Der Eigenschafts-String indiziert Eigenschaftswerte und Zusicherungen. Dazu gehören die Eigenschaften isQuery und abstract sowie die Spezifikation
von Eigenschaften, die die Nebenläufigkeit der Operation betreffen.
• Klassenoperationen (class scoped) werden unterstrichen dargestellt.
• Methoden oder Algorithmen einer Operation können als Notiz an die Operation
geheftet werden.
• Operationen können mit einem Stereotypen markiert werden, der vor der Operationssignatur einschließlich der Sichtbarkeit notiert wird.
Bei der Darstellung einer Operation müssen nicht alle spezifizierten Eigenschaften
einer Operation dargestellt werden ([OMG99]). Abb. 4.17 zeigt ein Beispiel, welches im
folgenden benutzt wird.
4.5. KLASSENDIAGRAMM
148
Klassenname
Operationsname(Parametername : Parametertyp = Default-Wert) : Rückgabetyp
Abbildung 4.17: Beispielhafte Notation einer Operation
: Class
name = Klassenname
Aus Sicht der Operation
sind die Parameter geordnet.
Der Typ eines Parameters
könnte auch ein "DataTyp" sein
owner
feature
: Operation
name = Operationsname
visibilityKind = public
concurrency = sequential
ownerScope = instance
isQuery = false
isRoot = false
isLeaf = false
isAbstract = false
: Parameter
name = Parametername
kind = inout
defaultValue = Default-Wert
: Parameter
name = ?
kind = return
defaultValue = ?
type
: Class
name = Parametertyp
: Class
name = Rückgabetyp
type
Abbildung 4.18: Metamodellexemplar der Operation aus Abb. 4.17. Der Wert des Attributs „kind“ dient der Unterscheidung zwischen einem Parameter und
einem Rückgabetyp. Da Rückgabetypen wie Parameter behandelt werden, kann eine Operation mehrere Rückgabetypen besitzen.
Konzeptionell vorhanden
: Class
Name = Klassenname
Operations
: Operation
name = Operationsname
ExportControlProperty = PublicAccess
Concurrency = sequential
Stereotype
ReturnType = Rückgabetyp
Parameters
ParentClass
Konzeptionell vorhanden
: Parameter
name = Parametername
Type = Parametertyp
InitValue = Default-Wert
Const = false
Abbildung 4.19: Interne Darstellung der Operation aus Abb. 4.17. Eine Klasse kennt ihre
Operationen, eine Operation kennt ihre Klasse und ihre Parameter, aber
ein Parameter kennt seine Operation nicht.
Chart Name
Chart Filena
Chart Type :
149
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Die Abbildung der Operation aus Abb. 4.17 auf ein Metamodellexemplar der UML
ist in Abb. 4.18 dargestellt. Stereotypen und Zusicherungen einer Operation würden
gegebenfalls mit einem Link an die Operation geheftet werden.
Die Abbildung der Operation aus Abb. 4.17 auf ein Metamodellexemplar von Rose in
Abb. 4.19 dargestellt.
Die folgenden Informationen aus den Abbildungen 4.18 und 4.19 entsprechen einander:
UML
Rose
Bemerkung
name
Name
visibilityKind
ExportControlpublic (UML) entspricht PublicAccess (RoProperty
se)
concurrency
Concurrency
defaultValue
InitValue
Rückgabetyp
ReturnType
In Rose ist ein Rückgabetyp kein Parameter,
sondern ein Attribut einer Operation. Es kann
nur ein Rückgabetyp angegeben werden.
Die folgenden Informationen können nicht aus Abb. 4.19 extrahiert bzw. in einem
Rose-Modell hinterlegt werden:
• Eine dem Attribut ownerScope der Metamodellklasse Operation entsprechende
Information kann nur mit einer sprachspezifischen Erweiterung von Rose im Modell notiert werden. Z.B. enthält die Java-Erweiterung die entsprechende boolesche
Eigenschaft Static.
• Weitere einstellbare Eigenschaften der Java-Erweiterung sind Abstract und Final
(entsprechend den booleschen Attributen abstract und isLeaf des Metamodells).
• Die Eigenschaften isQuery und isRoot können nicht angegeben werden.
• Die Art des Parameters kann nicht angegeben werden.
Es ergeben sich folgende Konsistenzbedingungen für Operationen:
• Operation-1: In einer Klasse darf keine Operationssignatur mehrfach deklariert
werden. Genauer: Kein Verhaltensmerkmal der gleichen Art (Operation, Methode,
Empfangserklärung für ein Signal) darf die gleiche Signatur in einem Klassifizierer
haben ([OMG99], Seite 2-47).
• Operation-2: Die Parameternamen einer Operation müssen eindeutig sein ([OMG99],
Seite 2-45).
• Operation-3: Die Typen der Parameter sollten im Modell existieren (Vollständigkeitsbedingung). Genauer: Die Typen der Parameter sollten im Namensraum des
Klassifizierers der Operation enthalten sein ([OMG99], Seite 2-45).
4.5. KLASSENDIAGRAMM
150
• Operation-4: Die Klasse einer abstrakten Operation muß abstrakt sein ([OMG99],
Seite 2-46), da eine Klasse mit einer abstrakten Operation keine direkten Exemplare
besitzen kann.
Eine Verletzung dieser Bedingungen wird von Rose nicht entdeckt. Die Überprüfung
dieser Bedingungen läßt sich in Rose jedoch realisieren.
4.5.4
Assoziationen
Eine binäre Assoziation zwischen Klassen wird als Linie zwischen den Klassen modelliert. Die Assoziation kann optional benannt und mit einem Stereotyp und Zusicherungen
versehen werden. Die Rollennamen der Klassen (optional mit Sichtbarkeit), die Kardinalität und Zusicherungen (z.B. ordered) werden an den Enden der Linie dargestellt
(Abb. 4.20). N-äre Assoziationen werden mit Hilfe eines weiteren Symbols dargestellt
[OMG99], können jedoch in Rose nicht modelliert werden.
A
-Rollenname-A
1..1
<<Stereotyp>>
Assoziationsname
{Assoziationszusicherung}
#Rollenname-B
B
2..4
Abbildung 4.20: Beispielhafte Notation einer Assoziation mit Rollennamen und Spezifikation der Sichtbarkeit der Rollennamen.
Die Abbildung der Assoziation aus Abb. 4.20 auf ein Metamodellexemplar ist in Abb.
4.21 dargestellt. Stereotypen und Zusicherungen einer Assoziation oder eines Assoziationsendes würden gegebenenfalls mit einem Link an das entsprechende Objekt geheftet
werden.
Abb. 4.22 zeigt die Darstellung des Metamodellexemplars von Rose der Abb. 4.20.
Die folgenden Informationen aus den Abbildungen 4.21 und 4.22 entsprechen einander:
UML
Rose
Bemerkung
name
Name
isNavigable
Navigable
aggregation
Aggregate
In Rose ist Aggregate ein boolescher Wert,
der zwischen normaler Assoziation und Aggregation unterscheidet.
targetScope
Static
targetScope = instance entspricht Static = false.
multiplicity
Cardinality
visibility
ExportControl
151
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Chart Name :
Chart Filenam
Chart Type : U
: AssociationEnd
: Class
name = A
type
name = Rollenname-A
isNavigable = true
aggregation = none
targetScope = instance
multiplicity = 1..1
visibility = private
ordering = unordered
changeability = changeable
connection
: Association
name = Assoziationsname
: AssociationEnd
: Class
name = B
type
name = Rollenname-B
isNavigable = true
aggregation = none
targetScope = instance
multiplicity = 2..4
visibility = protected
ordering = unordered
changeability = changeable
connection
Abbildung 4.21: Metamodellexemplar der Assoziation aus Abb. 4.20 ohne Berücksichtigung des Stereotypen und der Zusicherung.
Rose besitzt die folgenden Einschränkungen:
• Rollen (Assoziationsenden) können in Rose nicht mit einem Stereotyp markiert
oder mit einer Zusicherung verbunden werden, obwohl Abb. 4.22 das Gegenteil andeutet (Genauer: Die normale Benutzerschnittstelle bietet dazu keine Möglichkeit).
In Rose können Zusicherungen zu einer Assoziation angegeben werden, obwohl die
Existenz eines Attributs „Constraints“ nicht dokumentiert und auch nicht durch die
Skript-Sprache zugänglich ist.
• In Rose können nur binäre Assoziationen modelliert werden.
Für Assoziationen gelten die folgenden Konsistenzbedingungen:
• Assoziation-1: Jede Assoziation muß eine eindeutige Kombination von Assoziationsname und assoziierten Klassifizierern sein ([OMG99], Seite 2-44). D.h. bei
mehreren Assoziationen zwischen zwei Klassifizierern muß ein Assoziationsname
existieren.
• Assoziation-2: Eine Assoziation sollte mindestens in eine Richtung navigierbar
sein (Vollständigkeitsbedingung).
• Assoziation-3: Ein navigierbares Assoziationsende sollte einen Rollennamen besitzen (Vollständigkeitsbedingung).
4.5. KLASSENDIAGRAMM
152
: Role
Name = Rollenname-A
Navigable = true
Aggregate = false
Static = false
Cardinality = 1..1
ExportControl = PrivateAccess
Class
Stereotype
Constraints
Association
Keys
Containment = undefined
: Class
Name = A
Association
: Role
Name = Rollenname-B
Navigable = true
Aggregate = false
Static = false
Cardinality = 2..4
ExportControl = ProtectedAccess
Stereotype
Constraints
Association
Keys
Containment = undefined
Class
Name = Assoziationsname
Derived = false
Stereotype = Stereotyp
Role1
Role2
Roles
LinkClass
: Class
Name = B
Abbildung 4.22: Interne Darstellung der Assoziation aus Abb. 4.20 in Rose. Die Attribute
„Role1“ und „Role2“ der Klasse Association verweisen auf die Assoziationsenden der Assoziation. Das Attribut „Roles“ ist eine Sammlung
(Collection) der Assoziationsenden, deren Benutzung dem Autor in der
Skript-Sprache nicht möglich war. Das Attribut deutet jedoch an, daß
Rose auch n-äre Assoziationen unterstützen könnte.
153
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Assoziation-4: Die durch eine Assoziation verbundenen Klassifizierer sollten zum
Namensraum der Assoziation gehören ([OMG99], Seite 2-44).
• Rolle-1: Der einer Klasse gegenüberliegende Rollenname (Pseudoattribut) muß
eindeutig in der Menge aller Attribute und Pseudoattribute der Klasse sein ([OMG99],
Seite 2-44).
• Rolle-2: Ein navigierbares Assoziationsende sollte einen Rollennamen besitzen
(Vollständigkeitsbedingung).
Ein navigierbares Assoziationsende deutet eine Realisierung an, bei der ein Objekt
mit Hilfe eines Pseudoattributs auf assoziierte Objekte zugreifen kann, d.h. Attribute und Operationen aufrufen kann. Bei der Java-Codeerzeugung benutzt Rose diese
Rollennamen und verwendet sie als Attributnamen für Klassen (Pseudoattribute).
Verletzungen dieser Bedingungen werden von Rose nicht entdeckt.
4.5.5
Spezielle Assoziationen
Aggregation, Komposition, qualifizierte Assoziation und Assoziationsklassen sind spezielle Assoziationen.
Eine Aggregationen und Kompositionen beschreiben eine Ganzes-Teile-Beziehung.
Im Metamodellexemplar wird das Ganze in einer Aggregations- bzw. Kompositionsbeziehung durch das Attribut aggregation der Klasse AssociationEnd (die mit der Klasse
verbunden ist, die das Ganze repräsentiert), festgelegt. Eine Aggregation in Rose ist gekennzeichnet durch das Wertepaar Aggregate = true und Containment = ByReference
oder Unspecified, eine Komposition wird durch Aggregate = true und Containment
= ByValue gekennzeichnet.
Im Metamodellexemplar werden qualifizierende Attribute mit dem Assoziationsende
verbunden, an dem das Attribut notiert wird. In Rose gibt das Attribut Keys der Klasse
Role eine Sammlung (collection) von Attributen an, die die Exemplare des Assoziationsendes partitionieren (dies ist ein anderes (!) Assoziationsende als im Metamodell).
Eine Assoziationsklasse stellt sich im Metamodellexemplar ähnlich wie in Abb. 4.20
angegeben dar, nur mit dem Unterschied, daß die Assoziation nicht durch ein Exemplar
von Association, sondern durch ein Exemplar von AssociationClass repräsentiert
wird. In Rose kennzeichnet das Attribut LinkClass gegebenenfalls die Klasse, die die
Merkmale (Attribute) der Assoziationsklasse repräsentiert. In [OMG99] ist nicht ausgeschlossen, daß eine Assoziationsklasse auch Verhaltensmerkmale besitzen darf.
Für die speziellen Assoziationen gelten weitere Konsistenzbedingungen:
• Aggregation-1: Nur eine binäre Assoziation kann eine Aggregations- oder Kompositionsbeziehung sein ([OMG99], Seite 2-44).
Diese Bedingung wird von Rose trivialerweise eingehalten, da die Möglichkeit zur
Modellierung n-ärer Assoziationen fehlt.
4.5. KLASSENDIAGRAMM
154
• Aggregation-2: Nur ein Assoziationsende kann eine Aggregation bzw. Komposition kennzeichnen ([OMG99], Seite 2-44).
Diese Bedingung wird von Rose eingehalten.
• Komposition-1: Ein „Teil“ kann nur zu genau einem Ganzen gehören, d.h. die
maximale Kardinalität des Assoziationsendes, welches das Ganze kennzeichnet,
beträgt maximal 1 ([OMG99], Seite 2-45).
ModelElement
TaggedValue
0..1
Stereotype
0..1
Abbildung 4.23: Kompositionen mit der Kardinalität 0..1: Ein Eigenschaftswert (TaggedValue) gehört entweder zu einem Modellelement oder zu einem Stereotyp.
Beträgt die Kardinalität 0..1, kann die Klasse des „Teils“ an mehreren Kompositionsbeziehungen als „Teil“, jeweils mit der Kardinalität 0..1, teilnehmen (siehe Abb.
4.23). Eine Kardinalität von genau 1 schließt die Teilnahme als „Teil“ an weiteren
Kompositionsbeziehungen aus.
• Qualifikationsangabe-1: Nur eine binäre Assoziation kann qualifiziert werden.
• Qualifikationsangabe-2: Der Name des qualifizierenden Attributs sollte nicht der
Name eines Attributs der Klasse sein, deren Objekte über die Qualifikationsangabe
auf verbundene Objekte zugreifen.
Das Attribut, welches die Assoziation qualifiziert, ist eine Eigenschaft der Assoziation (vgl. [BRJ99a], Seite 165). Eine Qualifikationsangabe impliziert eine Realisierung, bei der über einen Wert auf eine Menge von Exemplaren (meistens genau
ein Exemplar) zugegriffen werden kann.
• Assoziationsklasse-1: Die Namen der Assoziationsenden (Rollenname) und die
Attributnamen der Assoziationsklasse müssen eindeutig sein ([OMG99], Seite 244).
• Assoziationsklasse-2: Eine Assoziationsklasse kann nicht zwischen sich selbst und
irgendeinem Modellelement definiert werden ([OMG99], Seite 2-44), d.h. eine assoziierte Klasse kann nicht die Assoziationsklasse der Assoziation sein (Abb. 4.24).
Diese Konsistenzbedingung wird von Rose eingehalten.
• Assoziationsklasse-3: Eine Assoziationsklasse kann nicht mit mehr als einer Assoziation verknüpft werden (vgl. [BRJ99a], Seite 168), da sie selbst eine Assoziation
ist.
Diese Konsistenzbedingung wird von Rose eingehalten.
155
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Class 1
Class 2
Abbildung 4.24: Beispiel für eine inkonsistente Modellierung einer Assoziationsklasse.
4.5.6 Generalisierungen
Generalisierungsbeziehungen können nicht nur zwischen Klassen (Abb. 4.25), sondern
auch zwischen Interfaces (siehe Abschnitt 4.5.7), Signalen (siehe Abschnitt 4.5.10) und
Kollaborationen existieren. Eine Generalisierung kann benannt werden und einen Diskriminator besitzen, der das Abstraktionsmerkmal der Generalisierung beschreibt.
Oberklasse
Generalisierungsname
Unterklasse
Abbildung 4.25: Einfache Generalisierungsbeziehung ohne Diskriminator
Die Abbildungen 4.26 und 4.27 zeigen die Darstellung von Abb. 4.25 als Metamodellexemplare.
In Rose kann nur eine Generalisierung zwischen genau zwei Klassifizierern benannt
und mit einem Stereotyp markiert werden. In Rose kann sogar die Sichtbarkeit der Generalisierungsbeziehung spezifiziert werden, die im Metamodell nicht vorgesehen ist. Besitzt eine Oberklasse zwei Unterklassen, dann kann diese Beziehung durch eine Generalisierungsbeziehung mit einem Vorfahren und zwei Nachkommen modelliert werden.
Rose unterstützt diese Möglichkeit, jedoch kann die Generalisierungsbeziehung in diesem Fall nicht spezifiziert werden, d.h. der Name, ein Stereotyp und die Sichtbarkeit
kann nicht angegeben werden. In Rose fehlt die Möglichkeit, einen Diskriminator anzugeben ebenso wie die Möglichkeit, Zusicherungen für die Generalisierungsbeziehung
(disjoint/overlapping und incomplete/complete), die sich meist auf mehrere Generalisierungen beziehen, zu spezifizieren.
Es gibt nicht nur Konsistenzbedingungen für die Modellelemente, die durch die Generalisierung verbunden sind, sondern auch für deren Inhalte. So werden u.a. die Attribute,
4.5. KLASSENDIAGRAMM
156
: Class
name = Oberklasse
parent
specialization
: Generalization
name = Generalisierungsname
discriminator
generalization
child
: Class
name = Unterklasse
Abbildung 4.26: Darstellung von Abb. 4.25 als UML-Metamodellexemplar.
: Class
Name = Oberklasse
: InheritRelation
Name = Generalisierungsname
Stereotype
SupplierName
ExportControl
: Class
Name = Unterklasse
Abbildung 4.27: Darstellung von Abb. 4.25 als Rose-Metamodellexemplar.
Operationen und Assoziationen einer Klasse abhängig von der spezifizierten Sichtbarkeit
vererbt.
• Generalisierung-1: Klassifizierer, die als Root (Wurzel) gekennzeichnet sind, dürfen keine Vorfahren besitzen ([OMG99], Seite 2-51).
• Generalisierung-2: Klassifizierer, die als Leaf (Blatt) gekennzeichnet sind, dürfen
keine Nachkommen besitzen ([OMG99], Seite 2-51).
In Rose kann diese Eigenschaft in der Java-Erweiterung (Eigenschaft Final) spezifiziert werden.
• Generalisierung-3: Ein Klassifizierer darf kein Unter- bzw. Oberklassifizierer von
sich selbst sein, d.h. ein Graph, der die Vererbungshierachie darstellt, mit Klassifizierern als Knoten und Generalisierungen als Kanten, darf keine Zykel besitzen
(vgl. [OMG99], Seite 2-51).
Diese Konsistenzbedingung wird von Rose eingehalten.
157
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Generalisierung-4: Die an einer Generalisierung beteiligten Modellelemente müssen von der gleichen Art sein, d.h. sie müssen die gleiche konkrete Metamodellklasse besitzen (vgl. [OMG99], Seite 2-52).
Klassen, Interfaces, Signale und Komponenten sind unterschiedliche (konkrete)
Metamodellklassen.
• Generalisierung-5: Die durch eine Generalisierung verbundenen Modellelemente
müssen im gleichen Namensraum enthalten sein (vgl. [OMG99], Seite 2-51).
• Attribut-5: Attribut- und Pseudoattributnamen einer Klasse (inklusive geerbter)
müssen eindeutig sein, d.h. sie dürfen in den Unterklassen nicht redefiniert bzw.
überschrieben werden.
Diese Bedingung umfäßt die Bedingungen Attribut-1 und Rolle-1.
• Operation-5: Konkrete Nachkommen einer abstrakten Klassen sollten deren abstrakte Operationen realisieren, d.h. Operationen mit der gleichen Signatur als
nicht-abstrakt deklarieren (Vollständigkeitsbedingung).
4.5.7 Interfaces
Interfaces (Schnittstellen) dienen der Spezifikation eines Dienstes, der von einer Klasse
oder einer Komponente angeboten bzw. unterstützt wird. Interfaces können als Klasse
mit dem Stereotyp «Interface» (ausführliche Form, Abb. 4.28) oder mit dem speziellen
Interfacesymbol (siehe Abb. 2.2, Seite 15) dargestellt werden.
<<Interface>>
Interfacename
Abbildung 4.28: Darstellung eines Interface als stereotypisierte Klasse ohne Operationen.
Die Abbildungen 4.29 und 4.30 zeigen die entsprechenden Metamodellexemplare der
Abb. 4.28.
: Interface
name = Interfacename
isAbstract = false
isRoot = false
isLeaf = false
Abbildung 4.29: Abb. 4.28 als Instantiierung der Metmodellklasse Interface.
4.5. KLASSENDIAGRAMM
158
: Class
Name = Interfacename
Stereotype = Interface
Abstract = false
Attributes
Operations = (Referenzen)
ExportControl
Cardinality
Concurrency
StateMaschine
Abbildung 4.30: Interne Sicht von Rose auf Abb. 4.28.
Im Metamodell (Abb. 3.12, Seite 55 und Abb. 4.29) wird zwischen Interface und
Klasse unterschieden. In Rose kann ein Interface nur anhand des Stereotypen von einer
Klasse unterschieden werden (Abb. 4.30).
Die folgenden Konsistenzbedingungen für Interfaces gelten allgemein:
• Interface-1: Ein Interface darf nur Operationen enthalten ([OMG99], Seite 2-52).
Zu den Operationen gehören auch „Signaloperationen“, siehe Abschnitt 4.5.10 Signale.
• Interface-2: Ein Interface darf keine Modellelemente enthalten ([OMG99], Seite
2-52).
• Interface-3: Alle Operationen eines Interfaces müssen „public“ ([OMG99], Seite
2-52) sein.
• Interface-4: Die Operationen eines Interfaces und das Interface selbst sind implizit
abstrakt.
Ob diese Eigenschaft gesetzt oder nicht beachtet werden sollte, ist in [OMG99]
nicht angegeben.
• Interface-5: Interfaces sollten mindestens eine Operation deklarieren oder erben
(Vollständigkeitsbedingung).
• Interface-6: In einer Interfacehierarchie sollte jede Operationssignatur eindeutig
sein ([OMG99], Seite 2-47).
• Interface-7: Das mit einem Interface gegenüberliegende Assoziationsende darf
nicht navigierbar sein ([OMG99], Seite 2-45).
Da in Rose Interfaces alle Merkmale einer Klasse mit Ausnahme eines Stereotypen
besitzen können, sind weitere Bedingungen zu überprüfen:
• Interface-8: Interfaces sollten nicht „aktiv“ sein (Attribut Concurrency).
159
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Interface-9: Die Kardinalität sollte entweder nicht beachtet werden oder „1“sein.
• Interface-10: Ein Interface sollte keinen Zustandsautomaten besitzen.
Die Verletzung von Konsistenzbedingungen in diesem Abschnitt wird von Rose nicht
verhindert oder entdeckt.
4.5.8
Realisierungsbeziehungen
Realisierungsbeziehungen treten üblicherweise zwischen Interfaces und Klassen (Abb.
4.31) bzw. Komponenten auf. Es kann jedoch auch die Realisierung eines Anwendungsfalls durch eine Kollaboration modelliert werden (in Rose nicht möglich). Die InstantiierealisierendeKlasse
Operation()
<<Interface>>
Interfacename
Operation()
Abbildung 4.31: Die Klasse realisiert die Operation des Interfaces.
rung von Abb. 4.31 als Metamodellexemplar (Abb. 4.32) zeigt, daß die Operationsobjekte, als „Teil“ einer Komposition, eine eigene Identität besitzen.
Im Metamodell der UML (siehe Abb. 3.26, Seite 68) ist eine Realisierung eine stereotypisierte Abstraktion (Abhängigkeit). Die Metadarstellung von Abb. 4.31 in Abb.
4.33 zeigt, daß sich die Entwickler von Rose nach der Notation gerichtet haben und eine Realisierungsbeziehung folgerichtig nicht mit einem Stereotyp markiert werden kann.
Eine Realisierungsbeziehung kann nicht näher spezifiziert werden, d.h. sie kann weder
benannt werden, noch kann die im Metamodell vorgesehene Beschreibung der Abhängigkeitsbeziehung (mapping) spezifiziert werden.
Für Realisierungsbeziehungen sind folgende Konsistenzbedingungen zu beachten:
• Interface-11: Ein Interface sollte von einer Klasse oder einer Komponente realisiert werden.
• Interface-12: Interfaces realisieren keine anderen Elemente, d.h. ein Interface
in einer Realisierungsbeziehung muß das spezifizierende Element (Metamodell:
supplier) sein.
• Operation-13: Klassen, die Interfaces realisieren, müssen alle Operationen des
Interfaces (mit der gleichen Signatur) deklarieren (Vollständigkeitsbedingung).
Die Verletzung von Konsistenzbedingungen in diesem Abschnitt wird von Rose nicht
verhindert oder entdeckt.
4.5. KLASSENDIAGRAMM
160
: Interface
name = Interfacename
: Operation
owner
feature name = Operation
supplier
supplierDependency
: Abstraction
: Stereotype
name = realize
name
mapping = (MappingExpression)
clientDependency
client
: Class
name = realisierendeKlasse
owner
feature
: Operation
name = Operation
Abbildung 4.32: Instantiierung von Abb. 4.31 als Metamodellexemplar. Die Objekte besitzen die notwendigen Methoden zur Identifizierung der Realisierungsbeziehung und der beteiligten Modellelemente.
: Class
Name = Interfacename
Stereotyp = Interface
: Operation
: RealizeRelation
Name = (kann nicht gesetzt werden)
Stereotype = (kann nicht gesetzt werden)
SupplierName = InterfaceName
: Class
Name = realisierendeKlasse
: Operation
Abbildung 4.33: Interne Sicht von Rose auf Abb. 4.31.
161
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
4.5.9 Abhängigkeitsbeziehungen
Neben Realisierungsbeziehungen gibt es noch weitere Abhängigkeitsbeziehungen (siehe
Abb. 3.26, Seite 68).
Die folgenden Konsistenzbedingungen für Abhängigkeitsbeziehungen und Einschränkungen für Rose existieren (ohne Vollständigkeitsanspruch): (siehe auch [BRJ99a])
• Abhängigkeit-1: Eine mit «derive» markierte Abhängigkeitsbeziehung ist eine Beziehung zwischen zwei Attributen oder zwei Assoziationen.
Abhängigkeiten zwischen Attributen können in Rose nicht semantisch korrekt modelliert werden. Ein Attribut kann zwar als abgeleitet (boolesches Attribut derived
der Klasse Attribute) markiert werden, aber eine Beziehung zu einem oder mehreren unabhängigen Attributen und eine (berechenbare) Abbildung kann nicht spezifiziert werden. Es besteht jedoch die Möglichkeit, diese Informationen als Dokumentation zum Attribut zu hinterlegen.
Abhängigkeiten zwischen zwei Assoziationen können in Rose modelliert werden.
Zu dieser Abhängigkeit können jedoch keine weiteren Informationen hinterlegt
werden.
• Abhängigkeit-2: Bei einer mit «instanceOf» markierten Abhängigkeitsbeziehung
ist die Quelle ein Exemplar und das Ziel eine Klasse oder die Quelle ist eine Klasse
und das Ziel ist eine Metaklasse.
In Rose können in Klassendiagrammen keine Objekte plaziert werden.
Es können in Rose Abhängigkeitsbeziehungen zwischen Klassen modelliert und
mit einem Stereotypen markiert werden. Die zweite Möglichkeit einer «instanceOf»-Abhängigkeit kann überprüft werden: Die unabhängige Klasse muß das Stereotyp oder den Typ «MetaClass» besitzen.
• Abhängigkeit-3: Eine mit «refine» markierte Abhängigkeitsbeziehung ist eine Beziehung zwischen Klassen.
Diese Abhängigkeit kann in Rose (mit Stereotyp) modelliert werden.
• Abhängigkeit-4: Eine mit «access», «import» oder «friend» markierte Abhängigkeitsbeziehung ist eine Beziehung zwischen Namensräumen (meist Paketen).
In Rose können Abhängigkeiten zwischen Paketen zwar modelliert, aber nicht stereotypisiert werden. Rose ermöglicht die Überprüfung von Zugriffsverletzungen
(Menü Report - Show Access Violations). Hierbei wird überprüft, ob sich die Klassen eines Klasssendiagramms im gleichen Paket wie das Diagramm befinden oder
durch eine modellierte Abhängigkeit zwischen Paketen verfügbar sind.
4.5. KLASSENDIAGRAMM
4.5.10
162
Signale
Signale, die in Zustandsautomaten und Aktivitätsdiagrammen benutzt werden, können in
Klassendiagrammen deklariert werden.
Die Existenz eines Signals kann in Klassendiagrammen modelliert werden. Dabei
wird ein Signal als Klasse mit dem Stereotyp «signal» modelliert (Abb. 4.34). Optionale
Parameter des Signals werden als Attribute im Klassenrechteck dargestellt.
Klassenname
<<signal>>
SignalName
<<send>>
Operation()
<<signal>> SignalName()
Abbildung 4.34: Eine Klasse mit dem Stereotyp «signal» spezifiziert ein Signal, eine
«send»-Abhängigkeit gibt die Verwendung eines Signals an und eine
mit «signal» markierte Operation erklärt den Empfang eines Signals.
Eine modellierte «send»-Abhängigkeit zwischen einer Operation und einem Signal
bedeutet, daß die Operation das Signal senden kann. Diese Abhängigkeit kann in Rose
nicht spezifiziert werden. Die Darstellung in Abb. 4.34, die mit Rose erstellt wurde,
visualisiert zwar diese Abhängigkeit, aber es ist aus der internen Sicht von Rose eine
Abhängigkeit zwischen Klassen.
Möchte man explizit modellieren, daß Objekte einer Klasse ein bestimmtes Signal
empfangen können (siehe auch Metamodell, Abb. 3.33, Seite 83), so kann dies durch
die Deklarierung einer gleichnamigen Operation mit dem Stereotyp «signal» angegeben
werden (Abb. 4.34).
Bemerkungen:
• Auch Interfaces können den Empfang von Signalen deklarieren.
• Signale werden in Rose intern wie Klassen behandelt.
Im Metamodell sind Ausnahmen (Exceptions) als spezielle Signale definiert, die typischerweise Fehlersituationen signalisieren. Der Sender der Ausnahme bricht seine Ausführung ab und der Empfänger der Ausnahme wird ausgeführt ([OMG99], Seite 2-97).
Ausnahmen werden entsprechend den Signalen als Klassen mit dem Stereotyp «Exception» modelliert. Die Ausnahmen, die eine Operation auslösen kann, können durch
eine «send»-Abhängigkeit spezifiziert oder in der Spezifikation der Operation formuliert
werden. Letzteres wird von Rose unterstützt, indem zu einer Operation ein beliebiger
Text zur Spezifizierung der Ausnahmen eingegeben werden kann (Attribut exceptions
der Klasse Operation).
163
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Für Signale können die folgenden Konsistenzbedingungen identifiziert werden:
• Signal-1: Zu einer Operation mit dem Stereotyp «Signal» sollte ein gleichnamiges
Signal existieren (Vollständigkeitsbedingung)
• Signal-2: Die Anzahl der Argumente der „Signaloperation“ sollte mit der Anzahl
der Argumente (Attribute) des Signals übereinstimmen (vgl. [OMG99], Seite 2-95
SendAction).
• Signal-3: Die Parameternamen und -typen einer „Signaloperation“ sollten mit den
Attributnamen und -typen übereinstimmen.
Die Reihenfolge der Parameter kann nicht vorgeschrieben werden, da die Attribute
eines Signal (einer Klasse) nicht geordnet sind.
• Signal-4: Eine Klasse, die ein Signal empfangen kann, sollte einen Zustandsautomaten besitzen, der die Reaktion auf den Empfang des Signals spezifiziert (Vollständigkeitsbedingung).
• Signal-5: Eine Klasse, die ein Signal empfangen kann, sollte eine aktive Klasse
sein.
• Signal-6: Zu einer mit «send» markierten Abhängigkeitsbeziehung zwischen einer
Operation und einem Signal (d.h. die Operation kann das Signal senden), sollte
in einem Aktivitätsdiagramm der Operation (falls vorhanden) die Verwendung des
Signals spezifiziert werden (Vollständigkeitsbedingung).
Die Spezifikation dieser Abhängigkeit ist in Rose nicht möglich.
• Signal-7: Besitzt der Klassifizierer, der ein Signal sendet, einen Zustandsautomaten, so sollte dort das Senden des Signals ebenfalls modelliert sein (Vollständigkeitsbedingung).
• Signal-8: Signale dürfen keine Operationen besitzen (in [OMG99] auf Seite 3-136
„versteckt“)5 .
• Signal-9: Zu einem Signal sollte eine „Signaloperation“ existieren.
Die offizielle Dokumentation der UML ([OMG99]) sowie die benutzte Literatur lassen noch einige Fragen unbeantwortet:
• Welche Bedeutung hat die Sichtbarkeit der Merkmale eines Signals?
• Da Signale generalisierbare Modellelemente sind, können „Signalhierarchien“ modelliert werden (Beispiel: siehe [BRJ99a], Seite 321).
– Wie funktioniert in diesem Fall der Vererbungsmechanismus?
5 Nach
[BRJ99a], Seite 315, können Signale Operationen besitzen!
4.5. KLASSENDIAGRAMM
164
– Wenn eine Klasse ein bestimmtes Signal empfangen kann, kann es dann auch
ein Sub-Signal empfangen?
Nach dem Prinzip der Substituierbarkeit müßte eine Klasse auch Sub-Signale
empfangen können. Nach [Alh98], Seite 199, kann ein Sub-Signal auch Transitionen, die durch ein Super-Signal spezifiziert sind, triggern.
4.5.11
Spezifizierung von Rollen
Rollen in einer Assoziationsbeziehung können durch Schnittstellen oder Typen näher spezifiziert werden (Abb. 4.35, vgl. [BRJ99a], Seite 182 ff). Typen sind mit «type» stereo-
+Vorgesetzer: IManager
1..1
Person
IMitarbeiter
0..*
+Mitarbeiter: IMitarbeiter
IManager
Abbildung 4.35: Spezifizierung von Rollen durch Interfaces
typisierte Klassen, die sich von Interfaces dahingehend unterscheiden, daß die Definition
eines Typs Attribute enthalten kann. Die Typen in Abb. 4.36 repräsentieren verschiedene
Rollen, die ein Objekt der Klasse Person im Laufe der Zeit spielen kann.
<<type>>
Bewerber
<<type>>
Mitarbeiter
<<type>>
Pensionär
Person
Abbildung 4.36: Typen, die potentielle Rollen der Klasse Person darstellen.
Die Benutzung von Interfaces oder Typen zur Spezifizierung einer Rolle in einer Assoziation wird im Metamodell durch das Attribut specification der Klasse Association-
165
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
End spezifiziert. Ein Assoziationsende kann durch mehrere Typen und Interfaces spezifiziert werden.
Konsistenzbedingungen:
• Rolle-3: Wird eine Rolle durch Interfaces oder Typen näher spezifiziert, dann muß
die Klasse der Rolle dieses Interface oder diesen Typen realisieren.
Der Zugriff auf die Merkmale einer Klasse über die Assoziation wird dann auf die
durch die Rolle spezifizierten Merkmale beschränkt.
• Typ-1: Der Vorfahr eines Typen muß ein Typ sein ([OMG99], Seite 2-56).
• Typ-2: Typen besitzen keine Methoden ([OMG99], Seite 2-56), d.h. ebenso wie
Interfaces sind die Operationen implizit abstrakt.
4.6
Interaktionsdiagramme
Interaktionsdiagramme werden benutzt, um den Ablauf der Kommunikation zwischen
Objekten zur Erfüllung einer bestimmten Aufgabe anhand von Botschaften zu spezifizieren. Die beiden Interaktionsdiagramme der UML, Kollaborations- und Sequenzdiagramm, sind semantisch äquivalent, da sie auf den gleichen Klassen des UML-Metamodells
(Abb. 3.42, Seite 98) basieren.
Ein Kollaborationsdiagramm hebt den strukturellen Kontext der Interaktion hervor,
während die Reihenfolge der Botschaften nur durch Nummern gekennzeichnet in den
Hintergrund rückt. Ein Kollaborationsdiagramm der Spezifikationsebene besteht aus Klassifizierer- und Assoziationsrollen, die Objekte und Links repräsentieren, und Botschaften,
während ein Kollaborationsdiagramm der exemplarischen Ebene Objekte, Links und Stimuli enthält.
Sequenzdiagramme existieren nur auf einer exemplarischen Ebene. Sie heben die Reihenfolge der Botschaften bzw. Stimuli hervor ohne den strukturellen Kontext zu zeigen.
In Rose können Kollaborationsdiagramme nicht auf einer Spezifikationsebene modelliert werden. Kollaborationsdiagramme der exemplarischen Ebene und Interaktionsdiagramme werden in Rose intern auf die selben Klassen abgebildet (Abb. 4.45). Dies
ermöglicht die Generierung eines Kollaborationsdiagramms aus einem Sequenzdiagramm
(oder umgekehrt), wobei sich Änderungen eines Diagramms automatisch auf das andere
übertragen.
4.6.1
Klassifiziererrollen und Objekte
Klassifiziererrollen und Objekte in Interaktionsdiagrammen repräsentieren Sender oder
Empfänger von Botschaften bzw. Stimuli. Neben der Klassenzugehörigkeit einer Klassifiziererrolle oder eines Objekts können Attribute oder Attributwerte dargestellt werden
(Abb. 4.37 und 4.38).
4.6. INTERAKTIONSDIAGRAMME
166
/Mitarbeiter:Person
optionale Merkmale der Klasse 'Person'
Abbildung 4.37: Spezifikationsebene: Eine Klassifiziererrolle wird mit dem Namen der
Rolle und der Klasse sowie optional weiteren Merkmalen der Klasse,
die in der Kollaboration benötigt werden, dargestellt.
Schubert/Mitarbeiter : Person
Abbildung 4.38: Exemplarische Ebene: Der Namensanteil eines Objekts in einem Interaktionsdiagramm besteht aus einem Objektnamen, einer Klassifiziererrolle und dem Namen der Klasse des Objekts. Optional können weitere
Merkmale des Objekts dargestellt werden.
Im Metamodell (Abb. 3.42, Seite 98) ist eine Klassifiziererrolle (ClassifierRole)
mit genau einem Basisklassifizierer (Pseudoattribut base) assoziiert. Eine entsprechende
Metaklasse für Objekte, die eine Rolle in einer Kollaboration spielen, z.B. ObjectRole,
ist im Paket Kollaboration nicht angegeben. Die Semantik läßt sich jedoch übertragen:
Ein Objekt muß mit genau einem Klassifizierer assoziiert sein (vgl. Abb. 3.36, Seite 88,
dort ist ein Objekt mit mindestens einem Klassifizierer assoziiert).
Die Abbildung einer Klassifiziererrolle (Abb. 4.37) auf das Metamodell der UML
bzw. auf ein Metamodell eines Werkzeugs ist auf (mindestens) zwei Arten möglich:
1. Der Rollenname und der Klassenname wird auf das Attribut name der Metamodellklasse ClassifierRole abgebildet (Abb. 4.37).
: ClassifierRole
name = Mitarbeiter:Person
Abbildung 4.39: Instantiierung von Abb. 4.39. Geeignet für ein Werkzeug, welches die
Modellierung von Klassifiziererrollen zuläßt, ohne die Existenz der Basisklasse zu fordern.
Bei dieser Art der Abbildung muß die folgende Konsistenzbedingung überprüft
werden:
• Inter-1: Es muß eine Klasse mit dem Namen der Klasse (hier „Person“) existieren. Diese Klasse muß die optional dargestellten Merkmale besitzen. Dies
gilt entsprechend für Objekte in Interaktionsdiagrammen.
167
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Eine werkzeugunterstützte Überprüfung dieser Bedingung erfordert die eindeutige
Identifizierung des Rollen- und Klassennamens.
2. Es wird nur der Rollenname auf das Attribut name der Metamodellklasse abgebildet. Der Name der Klasse ist implizit der Name der Basisklasse der Klassifiziererrolle (Abb. 4.40). Läßt das Werkzeug in diesem Fall nur die Darstellung vorhan: ClassifierRole
name = Mitarbeiter
: Class
base name = Person
Abbildung 4.40: Alternative, semantisch korrekte Instantiierung von Abb. 4.37. Bei dieser Art der Instantiierung muß eine Klasse mit dem Namen „Person“
existieren.
dener Merkmale der Basisklasse zu, wird die oben genannte Konsistenzbedingung
aktiv unterstützt.
Im folgenden wird von dieser Art der Abbildung auf das Metamodell ausgegangen.
4.6.2
Assoziationsrollen und Links
Eine Interaktion zwischen Objekten setzt voraus, daß das Sendeobjekt das Empfangsobjekt „kennt“. Dies wird in einem Kollaborationsdiagramm durch eine Assoziationsrolle
bzw. einen Link dargestellt. Bei einem Botschaftenaustausch zwischen Objekten wird
dieser Link zur Kommunikation genutzt. Eine Assoziation zwischen Klassifiziererrollen
bzw. ein Link zwischen Objekten basiert auf einer Assoziation zwischen Klassen.
Das Klassendiagramm in Abb. 4.41 zeigt die Basisklassifizierer und die Basisassoziation für die Kollaborationsdiagramme in Abb. 4.42 und Abb. 4.43. Abb. 4.44 zeigt die
Zusammenhänge zwischen dem Klassendiagramm (Abb. 4.41) und dem Kollaborationsdiagramm der Spezifikationsebene (Abb. 4.43).
Die folgenden Konsistenzbedingungen sind zu überprüfen (siehe Abb. 4.44):
• Inter-2: Zu einer Assoziationsrolle muß eine entsprechende Basisassoziation (base)
zwischen den Basisklassifizierern der Klassifiziererrollen existieren (vgl. [OMG99],
S. 2-104). Dies kann auch eine geerbte Assoziation sein. Dies läßt sich auf die
exemplarische Ebene übertragen: Zu einem Link zwischen Objekten muß eine (geerbte) Assoziation zwischen den Klassen der Objekte existieren.
Ein Link kennzeichnet eine Kommunikationsverbindung, über die ein Objekt eine
Botschaft an ein anderes Objekt schicken kann. Damit Objekte, deren Basisklassen
nicht assoziiert sind, Botschaften austauschen können, gibt es Ausnahmen von der
Bedingung Inter-2 (siehe Abschnitt 4.6.3).
Bei aktiver Konsistenzunterstützung kann der Name der Assoziation übernommen
werden.
4.6. INTERAKTIONSDIAGRAMME
168
<<type>>
Mitarbeiter
<<type>>
Manager
Person
+Leiter:Manager
0..1
*
+MA:Mitarbeiter
leitet
Abbildung 4.41: Die Rollen einer Person werden durch Typen spezifiziert. Die Abbildungen 4.42 und 4.43 zeigen die Benutzung dieser Information in Kollaborationsdiagrammen.
leitet
/Mitarbeiter:Person
/Manager:Person
0..1
*
Abbildung 4.42: Verwendung der Typen aus Abb. 4.41 als Klassifiziererrollen in einem
Kollaborationsdiagramm der Spezifikationsebene.
Müller/Mitarbeiter :
Person
leitet
Schmidt/Manager :
Person
Abbildung 4.43: Verwendung der Typen aus Abb. 4.41 als Rollen für Objekte in einem
Kollaborationsdiagramm der exemplarischen Ebene.
Abbildung 4.44: Instantiierung der Abbildungen 4.41 und 4.42. Eine Klassifiziererrolle basiert auf einer Klasse. Eine Assoziationsrolle zwischen Klassifiziererrollen basiert auf einer Assoziation zwischen den entsprechenden
Klassen.
type
type
: AssociationEndRole
name
collaborationMultiplicity = 0..1
: AssociationRole
name
multiplicity
: AssociationEndRole
name
collaborationMultiplicity = *
Chart Name : New Object Diagram
Chart Filename : KollaborationBespielMeta.Vob
Chart Type : UML Object Diagram
: ClassifierRole
name = Manager
: ClassifierRole
name = Mitarbeiter
: Class
name = Manager
: Class
name = Mitarbeiter
specification
participant
specification
participant
: AssociationEnd
name = Leiter
base multiplicity = 0..1
base
: Association
name = leitet
AssociationEnd
name = MA
base multiplicity = *
type
base
: Class
name = Person
type
base
169
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
4.6. INTERAKTIONSDIAGRAMME
170
• Inter-3: Optionale Qualifizierer einer Assoziationsendrolle müssen eine Teilmenge
der Qualifizierer des Basisassoziationsendes sein (vgl. [OMG99], S. 2-104).
• Inter-4: Eine Assoziationsendrolle (bzw. ein Link-Ende) darf nur navigierbar sein,
wenn auch das entsprechende Basisassoziationsende navigierbar ist (vgl. [OMG99],
S. 2-104).
Bemerkungen:
• Weitere Bedingungen sind in [OMG99] nicht spezifiziert.
• Der Unterschied zwischen collaborationMultiplicity und multiplicity einer Assoziationsendrolle ist nicht klar definiert.
• Ein Beispiel für einen „echten“ Rollennamen einer Assoziation ist in [OMG99]
nicht angegeben, auch aus der weiteren UML-Literatur ist dem Autor kein Beispiel
bekannt.
Weitere sinnvolle Konsistenzbedingungen:
• Der Name der Klassifiziererrolle sollte der Name des entsprechenden Assoziationsendes oder der Name des Klassifizierers sein, der das Assoziationsende spezifiziert,
d.h. der Name eines Typen oder Interfaces.
• Wird das Assoziationsende spezifiziert, sollten die dargestellten Merkmale der Klassifiziererrolle eine Teilmenge der Merkmale des spezifizierenden Klassifizierers
sein.
• Die Kardinalität einer Assoziationsendrolle sollte eine Einschränkung der Kardinalität des Basisassoziationsendes sein oder mit ihr übereinstimmen.
Offene Frage: In welcher Modellierungssituation sollte man die Kardinalität einschränken?
• Die Sichtbarkeit einer Assoziationsendrolle darf nicht erweitert werden.
• Eine Assoziationsendrolle darf nur dann eine Aggregation/Komposition kennzeichnen, wenn dies auch für das Basisassoziationsende gilt.
Die Kardinalität einer Assoziationsrolle gibt die Anzahl der Links an, die diese Rolle
in der Kollaboration spielen. In [OMG99] ist kein Beispiel angegeben, das zeigt, wann die
Kardinalität einer Assoziationsrolle modelliert wird. Eine Notation für die Kardinalität
einer Assoziationsrolle ist ebenfalls nicht definiert.
Objekte und Links in Interaktionsdiagrammen werden in Rose auf die Klasse ObjectInstance bzw. Link abgebildet (Abb. 4.45).
Bei der Modellierung von Objekten in Interaktionsdiagrammen kann in Rose der Klassenname des Objekts aus den vorhandenen Klassen gewählt werden. Die Eingabe eines
171
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Element
Name
RoseItem
Stereotype
ObjectInstance
Class
0..1
ClassName
Links
MultipleInstances
Persistence
Association
Link
0..1
AddLink()
DeleteLink()
GetClass()
IsClass()
+Receiver
LinkRole1
LinkRole2
LinkRole1Visibility
LinkRole2Visibility
AddMessageTo()
AssignAssociation()
DeleteMessage()
GetMessages()
UnAssignAssociation()
0..1
Operation
Message
Frequency
Synchronization
GetSenderObject()
GetReceiverObject()
IsMessageToSelf()
IsOperation()
GetOperation()
GetLink()
+Sender
Abbildung 4.45: Metadarstellung der Objekte, Links und Botschaften (Message) in Rose.
beliebigen Klassennamens ist nicht möglich. Multi-Objekte (Attribut MultipleInstances) repräsentieren die Existenz mehrerer Objekte. Die Bedingung Inter-1 kann von Rose
geprüft werden (Menü: Report - Show unresolved Objects).
Nach dem gleichen Schema kann in Kollaborationsdiagrammen eine benannte(!) Basisassoziation eines Links ausgewählt werden. Dabei werden die Rollen- und Qualifizierernamen der Assoziationsenden sowie der Assoziationsname übernommen. Die Rollenund Qualifizierernamen werden an den Link-Enden und der Assoziationsname, der durch
einen Linknamen erweitert werden kann, als Name des Links dargestellt. Unter den auswählbaren Assoziationen befinden sich neben den geerbten Assoziationen der Basisklassen auch Assoziationen zwischen den Oberklassen der Basisklassen, die nicht vererbt
werden (die Sichtbarkeit der Assoziationsenden ist private). Verletzungen der Bedingung Inter-2 werden nicht identifiziert, zusätzliche Qualifizierer können nicht hinzugefügt werden (eine Verletzung von Inter-3 wird verhindert). Die Navigierbarkeit von Links
(Inter-4) kann nicht spezifiziert werden.
4.6.3 Botschaften und Stimuli
Die Spezifikation einer Botschaft besteht aus der Angabe eines Senders und eines oder
mehrerer Empfänger. Der eigentliche Inhalt der Botschaft besteht aus einer Aktion (meistens ein Operationsaufruf) und optionalen Parametern.
4.6. INTERAKTIONSDIAGRAMME
172
{ordered}
Feature
+feature
BehavioralFeature
Reception
+reception
+context
*
0..*
1
*
Operation
1
+raisedSignal
+operation
1 +signal
1
+signal 1
SendAction
DestroyAction
ReturnAction
+actualArgument
Action
recurrence : IterationExpression
target : ObjectSetExpression
isAsynchronous : Boolean
script : ActionExpression
{ordered} *
0..1
1..*
+classifier
+instantiation
0..*
*
CallAction
CreateAction
Argument
value : Expression
+predecessor
Message
+action
1
+dispatchAction
Classifier
Signal
*
TerminateAction
+owner
*
*
*
+activator
1
*
0..1
*
+communicationLink
Stimulus
*
{ordered}
* +argument
*
1 +sender
Link
0..1
*
*
1
+receiver
Instance
*
Abbildung 4.46: Die Ausführung einer Aktion erzeugt einen Stimulus, welcher die
Sende- und Empfangsinstanz referenziert, einen Link zur Kommunikation benutzt und eventuell Argumente enthält.
173
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Die Ausführung der Aktion erzeugt eine entsprechende Anzahl von Stimuli, die jeweils über einen Link (communicationLink) von einem Sendeexemplar zu einem Empfangsexemplar versandt werden (Metadarstellung siehe Abb. 4.46). Ein Link gibt an, daß
der Sender den Empfänger „sieht“ bzw. seine „Adresse kennt“. Der Empfang des Stimuli
führt beim Empfänger zur Ausführung eines Verhaltens entsprechend der Aktion.
Der Kommunikationslink kann in speziellen Fällen (auf der Metaebene) fehlen, obwohl er im Kollaborationsdiagramm dargestellt wird. Dies gilt sowohl für die Spezifikationsebene, in der eine Assoziationsrolle einen oder mehrere Links repräsentiert, als
auch für die exemplarische Ebene. In den folgenden Fällen kann ein Link bzw. eine
Assoziation als Basis für eine Kommunikation zwischen Sender und Empfänger fehlen:
• Dem Sender wurde eine Referenz auf das Empfangsexemplar als Parameter übergeben. In diesem Fall kann das Link-Ende des Empfängers mit «parameter» markiert
werden.
• Der Empfänger der Botschaft/des Stimuli ist global oder lokal sichtbar. Dann kann
das Link-Ende mit «global» oder «local» markiert werden.
• Der Sender und der Empfänger repräsentieren das gleiche Objekt. Dann kann das
Linkende mit «self» markiert werden.
Rose ermöglicht die Spezifizierung der Link-Enden, indem dem Sender und dem
Empfänger einer Botschaft eine Sichtbarkeit zugeordnet wird (Attribut LinkRole1Visibility bzw. LinkRole2Visibility der Klasse Link). Zur Verfügung stehen u.a. die
Werte „Parameters“, „Global“ und „Local“. Mit diesen Informationen kann die Bedingung Inter-2 neu formuliert werden:
• Inter-2’: Zu einem Link zwischen Objekten muß entweder eine (geerbte) Assoziation zwischen den Basisklassen existieren oder der Link muß mit Parameter, Global
oder Local markiert sein oder die beiden Link-Enden verweisen auf das gleiche Objekt (self).
Im Metamodell (Abb. 4.46) werden Operationsaufrufe einer Botschaft auf die Klasse
CallAction abgebildet. Für einen Operationsaufruf gilt die folgende Konsistenzbedingung:
• Inter-5: Der Name der Operation muß mit dem Namen einer Operation des Empfangsobjekt übereinstimmen bzw. muß die Klasse des Empfangsobjekts die Operation deklariert oder geerbt haben.
Bei der Spezifikation einer Botschaft ermöglicht Rose die Auswahl einer vom Empfänger
angebotenen Operation (inklusive geerbter öffentlicher Operationen). Alternativ kann ein
beliebiger Text als Botschaft eingegeben werden. Dieser Text referenziert aus der Sicht
von Rose keine Operation und ist in diesem Sinne nicht konsistent. Anstelle eines Textes,
4.6. INTERAKTIONSDIAGRAMME
174
1: Reservierung(long, double)
: Artikel
Lager
: Artikel
Reservierung
Abbildung 4.47: Notation einer Botschaft im Kollaborationsdiagramm, die einen Operationsaufruf spezifiziert. Die Argumente werden in diesem Fall durch die
Parametertypen der Operation repräsentiert.
der eine Operation bzw. eine „Signaloperation“ repräsentieren sollte, ist es möglich, aus
einem Interaktionsdiagramm heraus eine Klasse um die gewünschte Operation zu erweitern. Im Falle einer referenzierten Operation stellt Rose die Operationsignatur in der Nähe
eines Pfeils dar (Abb. 4.47), der die Richtung der Botschaft kennzeichnet. Rose bietet die
Möglichkeit, die Bedingung Inter-3 auf Anforderung zu prüfen. Dabei wird festgestellt,
ob eine vorhandene Operation der Klasse des Empfangsobjekts referenziert wird.
Wird eine in einem Interaktionsdiagramm referenzierte Operation aus der Klasse des
Empfangsobjekts gelöscht, wird der Operationsname inklusive Parametertypen intern als
Text gespeichert, d.h. die entsprechende Botschaft wird nicht aus dem Interaktionsdiagramm gelöscht. Rose warnt nicht vor der Löschung der Operation, obwohl sie eine
Inkonsistenz zur Folge hat.
Das Senden eines Signals wird im Metamodell auf die Klasse SendSignal abgebildet.
Für das Senden eines Signals gilt die folgende Konsistenzbedingung:
• Inter-6: Der Empfänger muß den Empfang des Signals erklärt haben.
Da in Rose nicht zwischen Sende- und Aufrufaktionen unterschieden werden kann,
werden Signale wie Operationen behandelt. In Rose wird das Stereotyp einer Operation
nicht dargestellt, d.h. man kann visuell nicht zwischen Operationen und Signalen unterscheiden.
Die Darstellung der Argumente einer Botschaft einer CallAction oder SendAction
ist auf drei Arten möglich:
1. Die Argumente sind Referenzen auf Objekte, die im Diagramm enthalten sind.
Dann werden die Argumente auf die Argumente des Stimulus abgebildet (Pseudoattribut argument der Klasse Stimulus).
2. Ein Argumentausdruck, dessen Auswertung die Aktualargumente bestimmt, wird
auf die Argumente der mit dem Stimulus assoziierten Aktion abgebildet (Pseudoattribut actualArgument der Klasse Argument).
3. Die Typen der Argumente werden zusammen mit den Namen der Operation/des
Signals dargestellt. Dann werden die Argumente auf die Parameter-Typen der Operation bzw. die Attributtypen des Signals abgebildet.
175
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Rose unterstützt nur die letzte Möglichkeit der Argumentdarstellung semantisch korrekt, die anderen Möglichkeiten können zwar genutzt werden (eine Nachricht kann ein
beliebiger Text sein), führen jedoch (aus der Sicht von Rose) zu inkonsistenten Modellen.
Weitere Arten von Aktionen in Interaktionsdiagrammen sind Rückgabe-, Erzeuge-,
Zerstöre-, Terminiere-Aktionen (siehe Abb. 4.46). Zuweisungsaktionen können nicht in
Interaktionsdiagrammen benutzt werden. Rückgabeaktionen werden nur in Sequenzdiagrammen gezeigt. Die anderen Aktionsarten besitzen in Sequenzdiagrammen eine eigene
graphische Notation (siehe Abb. 3.38, Seite 93). Die Modellierung dieser Aktionsarten
wird von Rose nicht unterstützt. Da die Stereotypen der Operationen in den Interaktionsdiagrammen nicht angezeigt werden, ist auch die alternative Darstellungsart mit Hilfe von
Stereotypen in Rose nicht möglich.
Der Rückgabewert einer Rückgabeaktion wird auf das Argument der Aktion abgebildet. Eine Rückgabeaktion setzt einen vorherigen Operationsaufruf voraus (Konsistenzbedingung siehe 4.6.4 Kontrollfluß).
Der Empfänger der Botschaft einer Erzeuge-Aktion ist das Objekt, welches durch den
Empfang der Botschaft bzw. des Stimuli erzeugt wurde. Eine Erzeuge-Aktion besitzt
kein explizites Ziel (target), da das Ziel implizit der Empfänger der Botschaft ist. Da im
Metamodell eine Erzeuge-Aktion mit genau einem Klassifizierer assoziiert ist, muß die
folgende Konsistenzbedingung berücksichtigt werden:
• Inter-7: Der Empfänger der Botschaft einer Erzeuge-Aktion muß ein Objekt der
Klasse sein, mit der die Aktion assoziiert ist.
Die Botschaft einer Zerstöre-Aktion führt zur Zerstörung des Empfangsobjekts. Die
Botschaft einer Terminiere-Aktion, die zur Selbstzerstörung eines Objekts führt, muß die
folgende Konsistenzbedingung erfüllen:
• Inter-8: Der Empfänger und der Sender einer Botschaft einer Terminiere-Aktion
müssen übereinstimmen.
4.6.4
Kontrollfluß
Wenn ein Sender einem Empfänger eine Botschaft sendet, kann der Empfänger auf den
Empfang der Botschaft reagieren, indem er selbst wiederum eine Botschaft schickt usw.
Die Botschaften bilden eine sequentiell zeitlich geordnete Folge (Kontrollfluß), die immer zu einem Prozess oder Thread gehört. Die Folge der Botschaften wird visuell durch
Sequenznummern (siehe Abschnitt 3.2.2) dargestellt.
Man unterscheidet zwischen flachen und prozedualen bzw. verschachtelten Kontrollflüssen (siehe [BRJ99a], Seite 240 ff). Bei flachen Kontrollflüssen, die meist im Kontext
von Anwendungsfällen modelliert werden, wird die Kontrolle von einem Objekt zum
nächsten weitergegeben, während bei prozedualen Kontrollflüssen (Abb. 4.48) die Kontrolle an den Aufrufer einer Operation zurückgegeben wird.
4.6. INTERAKTIONSDIAGRAMME
Object 1
176
Object 2
Object 3
Object 4
1:
1.1:
1.2:
Abbildung 4.48: Prozedualer Kontrollfluß
+activator 0..1
*
Message
* +predecessor
*
Abbildung 4.49: Reihenfolge der Botschaften/Stimuli
Die Reihenfolge der Botschaften wird im Metamodell auf die Pseudoattribute predecessor (Vorgänger) und activator (Aktivierer) abgebildet (Abb. 4.49). In Abb. 4.48
ist Botschaft 1.1 der Vorgänger von Botschaft 1.2. Der Aktivierer einer Botschaft ist
die Botschaft, dessen Empfang zum Senden der Botschaft führt. In Abb. 4.48 aktiviert
Botschaft 1 die Botschaften 1.1 und 1.2.
Wenn X eine beliebige Sequenznummer ist, gilt allgemein:
• X.i ist Vorgänger von X.i+1
• Aktivierer von X.i ist X.
Die Botschaften 1, 1.1 und 1.2 repräsentieren Operationsaufrufe (ausgefüllte Pfeilspitze). Ein Operationsaufruf aktiviert eine (verschachtelte) Folge, die durch eine Rückgabebotschaft (Rückgabe-Aktion) abgeschlossen wird. Die Rückgabebotschaft bzw. die
Rückgabe der Kontrolle an den Aufrufer ist implizit vorhanden, auch wenn sie nicht explizit dargestellt wird. Im Falle eines Operationsaufrufs lassen sich auf diese Weise Rückschlüsse auf die Implementierung der Operation ziehen (zumindest auf die Reihenfolge
weiterer Operationsaufrufe).
Für eine Rückgabebotschaft lassen sich die folgenden Konsistenzbedingungen formulieren (vgl. [OMG99], Seite 3-101):
• Inter-9: Eine Rückgabebotschaft setzt eine aktivierende Botschaft voraus.
177
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Inter-10: Eine Rückgabebotschaft ist die letzte Botschaft in einer Vorgängerkette.
4.6.5
Verzweigung und Iteration
In den Interaktionsdiagrammen können auch auch Verzweigungen (siehe Abb. 3.38, Seite
93) und Iterationen (Abb. 4.50) modelliert werden.
Falls ein Interaktionsdiagramm Iterationsausdrücke beinhaltet, kann die Reihenfolge der Botschaften nicht mehr konsistent auf das Metamodell abgebildet werden. Abb.
4.50 zeigt die typische Verwendung eines Iterationsausdrucks in einem (exemplarischen)
Kollaborationsdiagramm.
Chart Name : New
Chart Filename : c
Chart Type : UML
b : Bestellung
1.1* [i=1..*]: bpos := gibBestellPosition(i)
«parameter»
Object 1
: ArtikelReservierung
: ArtikelLager
1.1.3: reserviere(artikel, anzahl)
1: reserviere(b)
1.1.1: artikel := gibArtikel()
1.1.2: anzahl := gibAnzahl
«local»
bpos : BestellPosition
Abbildung 4.50: Iteration in einem Kollaborationsdiagramm, vgl. [Oes98], Seite 305.
Die Botschaft, die die Iteration initiiert, wird um einen Iterationsausdruck erweitert. Die Sequenznummern der Botschaften innerhalb der
Iteration besitzen eine Stelle mehr.
Botschaft 1.1 liefert iterativ eine bestimmte Bestellposition, die von den Botschaften in der untergeordneten Ebene benutzt wird. Abbildung 4.51 zeigt die gleiche Interaktion in einem Sequenzdiagramm inklusive der Sequenznummern. Die Reihenfolge
der Botschaften entsprechend der oben genannten Bedingungen stimmt leider nicht mehr
Chart Name : Reservierung
Chart Filename : seqUntitled2.Vob
Chart Type : UML Sequence Diagram
4.7. ZUSTANDSDIAGRAMME
...
178
: ArtikelReservierung
1: reserviere(b)
b : Bestellung
bPos : BestellPosition
: ArtikelLager
«parameter»
1.1* [i=1..n]: gibBestellPos(i)
bPos
1.1.1: artikel := gibArtikel()
1.1.2: gibMenge()
menge
1.2:
1.1.3: reserviere(artikel, anzahl)
Abbildung 4.51: Interaktion aus Abb. 4.50 in einem Sequenzdiagramm.
mit den Sequenznummern überein. Wenn im Sequenzdiagramm die problematischen Sequenznummern in 1.1, 1.2, 1.3 und 1.4 verändert werden, so stimmt dies zwar mit den o.a.
Bedingungen überein, jedoch ist die Verschachtelung der Botschaften nicht mehr sichtbar.
Das Problem ist die Botschaft mit dem Iterationsausdruck, die auf mehrere Stimuli des
Metamodells abgebildet werden müßte. In [Oes98] ist auf Seite 308 die gleiche Situation
wie in Abb. 4.50 in einem Sequenzdiagramm modelliert. Im Unterschied zu Abb. 4.51
fehlt dort allerdings der Iterationsausdruck.
In [Alh98] wird eine Iteration in Sequenzdiagrammen durch ein Rechteck markiert,
welches die Botschaften innerhalb der Iteration umfaßt. Bei dieser Modellierungsart gehört die Iteration nicht mehr zu einer Botschaft, und die zur Iteration gehörenden Botschaften sind visuell leicht zu erkennen (Abb. 4.52). Leider ist diese Modellierungsweise
nicht in [OMG99] angegeben und läßt sich auch nicht auf ein Metamodellexemplar abbilden.
4.7
Zustandsdiagramme
Ein Zustandsdiagramm (Statechart) enthält einen Zustandsautomaten, der aus Zuständen,
Transitionen, Ereignissen und Aktionen besteht. Zustandsdiagramme werden zur Modellierung des Verhaltens von Modellelementen eingesetzt. Bei diesen Modellelementen
handelt es sich meistens um Klassen. Die Definition der UML erlaubt jedoch auch, das
Verhalten von anderen Modellelementen (z.B. Operationen) mit Zustandsdiagrammen zu
modellieren.
In diesem Abschnitt werden zuerst die elementaren Bestandteile eines Zustandsauto-
179
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
...
: ArtikelReservierung
b : Bestellung
bpos : Bestellposition
: ArtikelLager
reserviere(b)
i = 1..n
gibBestellPos(i)
bPos
artikel := gibArtikel
menge := gibMenge
reserviere(artikel, anzahl)
Abbildung 4.52: Darstellung einer Iteration in einem Sequenzdiagramm nach [Alh98],
Seite 176.
maten (Ereignisse, Aktionen, Transitionen und Zustände) behandelt. Abschließend wird
erläutert, wie aus diesen Bestandteilen Zustandsautomaten konstruiert werden können.
4.7.1 Ereignisse
Auf Signal, Aufruf-, Zeit- und Änderungsereignisse kann ein Zustandsautomat durch
Transitionen und Aktionen reagieren. Entry-, Exit- und Do-Ereignisse sind spezielle,
zu einem Zustand gehörende Ereignisse, die nicht zu einer Transition führen. Sie werden
in Abschnitt 4.7.4 behandelt.
Signal- und Aufrufereignisse werden mit der gleichen Syntax in Zustandsdiagrammen
dargestellt:
Ereignis-Name ’(’ Parameterliste ’)’
Eine Parameterliste ist eine durch Kommata getrennte Liste von Parametern, in der
der Parameter aus einem Parameternamen ([Alh98], Seite 198) besteht oder in der Form
Parametername ’:’ Typ-Ausdruck dargestellt wird ([OMG99], Seite 3-136).
Ein Signal- oder Aufrufereignis wird auf ein SignalEvent bzw. auf ein CallEvent
abgebildet, das mit dem entsprechenden Signal bzw. mit der entsprechenden Operation
verbunden ist (Abb. 4.53). Die Parameterliste des Ereignisses wird auf die Parameter
des Ereignisses abgebildet, die im Metamodell als existenzabhängige Teile des Ereignisses definiert sind, d.h. die Parameter einer Operation und die Parameter eines AufrufEreignisses sind unterschiedliche Objekte des Metamodellexemplars
Aus Abb. 4.53 lassen sich die folgenden Konsistenzbedingungen für Signal- und
4.7. ZUSTANDSDIAGRAMME
180
ModelElement
Parameter
{ordered}
+parameters
*
SignalEvent
Event
0..1
CallEvent
TimeEvent
when : TimeExpression
+occurrence
*
+occurrence
1
ChangeEvent
changeExpression : BooleanExpression
*
1
Operation
Signal
Abbildung 4.53: Ereignisse im Metamodell
Aufruf-Ereignisse ableiten:
• Ereignis-1: Der Name eines Signal- oder Aufrufereignisses muß mit dem Namen
eines Signal oder einer Operation übereinstimmen.
Gehört das Ereignis zum Zustandsdiagramm einer Klasse, sollte die Klasse den
Empfang des Signals bzw. die Operation deklariert haben.
• Ereignis-2: Die Anzahl der Parameter eines Signal- oder Aufrufereignisses müssen mit der Anzahl der Attribute des Signals bzw. mit der Parameteranzahl der
Operation übereinstimmen.
Gehört das Ereignis zum Zustandsdiagramm einer Klasse, dann sollte die Reihenfolge der Parameter des Signals bzw. der Operation mit der Reihenfolge der Parameter des Ereignisses übereinstimmen.
Bemerkung: Es läßt sich anhand der Notation nicht zwischen Signal- und Aufrufereignissen unterscheiden. Wenn das Zustandsdiagramm das Verhalten einer Klasse spezifiziert, ist das Signal als Operation mit dem Stereotyp «signal» deklariert (Ereignis-1).
Zur Überprüfung der Konsistenzbedingung Ereignis-2 muß dann nicht mehr zwischen
Signal- und Aufrufereignissen unterschieden werden. Eine visuelle Unterscheidung zwischen Signal- und Aufrufereignis ist nicht unbedingt notwendig, da das empfange Objekt
den Unterschied „kennt“.
181
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Ein Zeitereignis wird durch das Schlüsselwort after, gefolgt von einem Zeitausdruck
(TimeExpression) dargestellt, z.B. after (10 sec.), und auf ein TimeEvent abgebildet.
Ein Änderungsereignis wird durch das Schlüsselwort when, gefolgt von einem booleschen Ausdruck (ChangeExpression) dargestellt, z.B. when (antwort = 42), und auf ein
ChangeEvent abgebildet.
Im Metamodell ist etwas verwirrend als Attributname für den Zeitausdruck eines Zeitereignisses when angegeben. Ein Ereignis der Art when (datum = 1. Jan. 2000) kann
zwar als Zeitereignis mit einem absoluten Zeitpunkt interpretiert werden, wird aber entsprechend des Schlüsselworts auf ein Änderungsereignis abgebildet (vgl. [OMG99], Seite
3-136).
Die Spezifizierung von Zeit- und Änderungsereignissen sollte zum entsprechenden
Typ des Ausdruck passen. Da eine Syntax dieser Ausdrücke nicht definiert ist, kann
eine derartige Konsistenzbedingung auf der Basis des UML-Metamodells nicht durch ein
Werkzeug überprüft werden.
Aus dem Metamodell folgt:
• Ereignis-3: Zeit- und Änderungsereignisse dürfen keine Parameter besitzen.
Element
Name
Event
Arguments
Abbildung 4.54: Die Klasse Event des Rose-Metamodells. Event besitzt keine Operation, die gegebenenfalls eine Operationssignatur o.ä. der Klasse liefert,
dessen Verhalten vom Zustandsdiagramm spezifiziert wird.
In Rose wird ein Ereignis auf die Klasse Event abgebildet (Abb. 4.54). Der Ereignisname und die Parameter werden in verschiedenen Attributen gespeichert. In Rose wird
nicht zwischen verschiedenen Ereignisarten unterschieden, der Ereignisname ist lediglich
ein String. Da in Rose ein Zustandsdiagramm immer das Verhalten einer Klasse spezifiziert, ist eine Unterscheidung zwischen Signal- und Aufrufereignis nicht notwendig, Zeitund Änderungsereignisse können anhand der Schlüsselworte after und when von Signalund Aufrufereignissen unterschieden werden, falls kein Signal oder eine Operation der
Klasse mit dem Namen after bzw. when existiert.
4.7. ZUSTANDSDIAGRAMME
4.7.2
182
Aktionen
Aktionen und Aktivitäten kennzeichnen die Reaktion eines Zustandsautomaten auf ein
Ereignis. Eine Aktion ist eine ausführbare atomare Verarbeitung, typischerweise ein
Operationsaufruf oder das Senden eines Signals. Eine Aktion kann aber auch ein Ausdruck sein, der Attribute, Links und Parameter eines Ereignisses beinhaltet oder die Erzeugung/Zerstörung eines Objekts kennzeichnet. Eine Aktion eines Zustandsautomaten
gehört entweder zu einer Transition (4.7.3) oder zu einem Zustand (4.7.4).
Eine Aktion wird in der folgenden Form notiert:
Ereignis-Signatur ’[’ Bedingung ’]’ ’/’ Aktionsausdruck
Anhand der Notation kann nicht unterschieden werden, ob es sich um eine AufrufAktion, eine Sende-Aktion oder eine andere Aktion handelt (siehe Abb. 4.55). Die Notation des Aktionsausdrucks hängt von der gewählten Sprache für die Aktionsausdrücke
ab ([OMG99], Seite 3-138). Da eine Aktion immer eine beliebige Aktionsart sein kann,
können Konsistenzbedingungen an eine Aktion nur dann identifiziert werden, wenn klar
ist, um welche Art es sich bei der Aktion handelt:
• Aktion-1: Falls es sich um eine Aufruf-Aktion handelt, wird eine Operation auf
einem Objekt einer Klasse aufgerufen. Diese Klasse sollte die Operation deklariert
haben und sich im Sichtbarkeitsbereich des Eigentümers des Zustandsautomaten
befinden. Diese Bedingung gilt im übertragenden Sinne auch für das Senden eines
Signals.
• Aktion-2: Die Anzahl der Parameter eines Operationsaufrufs (eines Signals) sollte
mit der Deklaration der Operation (des Signals) übereinstimmen.
• Aktion-3: Der Aktionsausdruck sollte nur Merkmale aus dem Sichtbarkeitsbereich
des Eigentümers des Zustandsdiagramms und sprachabhängige Konstrukte beinhalten. Hieraus können sich weitere Konsistenzbedingungen ergeben, deren Überprüfung schwieriger zu realisieren ist.
Ein Werkzeug, welches den Modellierer bei der Erstellung konsistenter Modelle unterstützt, sollte die Möglichkeit bieten, die Aktionsart einer Aktion zu spezifizieren. In
diesem Fall erkennt das Werkzeug die Semantik einer Aktion und eine Konsistenzprüfung
ist möglich. Die Überprüfung auf konsistente Aktionen ist wichtig, da die Aktionsausdrücke häufig Verhaltensmerkmale (Operationen, Signale) anderer Modellelemente benutzen, und somit eine Verbindung zu anderen Diagrammen (eventuell Sichten) darstellen.
4.7.3
Transitionen
Eine Transition (Zustandsübergang) ist eine Beziehung zwischen Zuständen. Eine Transition besitzt mindestens einen Ausgangszustand (source), mindestens einen Folgezustand
183
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
(target), und jeweils optional ein Ereignis, eine Bedingung und eine Aktion (Abb. 4.55).
Ausgangszustand
Ereignis( Argument )[ Bedingung ] / Aktion
Folgezustand
Abbildung 4.55: Notation einer Transition mit Ereignis, Ereignisargumenten, einer Bedingungung und einer Aktion. Die Art der Aktion ist nicht erkennbar.
: Guard
expression = Ausdruck
guard
: State
name = Ausgangszustand
source
outgoing
: Transition
trigger
: Event
name = Ereignis
effect
: CallAction
incoming
target
: Parameter
name = Argument
: State
name = Folgezustand
: Operation
name = Aktion
Abbildung 4.56: Metamodellexemplar der Transition aus Abb. 4.55. Auf der Metaebene
ist erkennbar, daß „Aktion“ eine Operation ist.
Abb. 4.56 zeigt das entsprechende Metamodellexemplar von Abb. 4.55. Alle Informationen, die zu einer Transition spezifiziert werden können, sind sichtbar und die
Semantik ist klar. Semantisch gibt es sogar noch eine Verbindung von der Operation zu
einer Klasse. Ein Werkzeug, welches die Semantik von Aktionen versteht, könnte die
Konsistenzbedingungen aus Abschnitt 4.7.2 Aktionen überprüfen.
Abb. 4.57 zeigt, daß in Rose der Ausgangs- und Folgezustand, das Ereignis, die
Bedingung und die Aktion einer Transition spezifiziert werden kann, aber Rose die weiterreichende Semantik des Ereignisses (siehe 4.7.1) oder der Aktion nicht erkennt.
In früheren UML-Versionen konnte anhand der Notation noch zwischen Sende-Aktionen und anderen Aktionen unterschieden werden. Rose unterstützt diese Art der Notation.
Die Rose-Metaklasse Transition enthält die Operation GetSendAction, die ein Objekt
4.7. ZUSTANDSDIAGRAMME
184
: State
Name = Ausgangszustand
: Event
Name = Ereignis
Arguments = Argument
GuardCondition = Bedingung
: Transition
: Action
name = Aktion
: State
Name = Folgezustand
Abbildung 4.57: Interne Darstellung Transition aus Abb. 4.55 in Rose.
der Klasse Action liefert (siehe Abb. 4.10). Zu einer solchen Sende-Aktion werden die
Aktion, die Argumente und das Ziel der Aktion auf jeweils eigene Attribute des AktionsObjekts abgebildet. Dadurch kann die Semantik einer Sende-Aktion genauer spezifiziert
werden.
Im Metamodell der UML ist eine Konsistenzbedingung für die Bedingung (guard)
angegeben ([OMG99], Seite 2-136):
• Transition-1: Die Auswertung der Bedingung einer Transition sollte nicht zu Seiteneffekten führen.
4.7.4
Zustände
„Ein Zustand ist ein Umstand oder eine Situation im Leben eines Objekts, während dem es
einer Bedingung genügt, eine Aktivität ausführt oder auf ein Ereignis wartet“ ([BRJ99a],
Seite 328).
Ein Zustand besitzt meistens einen Namen, der den Zustand von anderen Zuständen
unterscheidet. Ein Zustand ohne Namen wird „anonymer“ Zustand genannt.
Ein Zustand kann interne Transitionen enthalten. Falls eine interne Transition gefeuert
wird, findet kein Zustandsübergang statt. Insbesondere wird der Zustand nicht verlassen,
wie dies bei den sogenannten Selbsttransitionen der Fall ist, deren Ausgangs- und Folgezustand übereinstimmen.
entry, exit und do sind vordefinierte Ereignisse. Das Eintrittsereignis (entry) wird
beim Eintritt in den Zustand, das Austrittsereignis (exit) wird beim Verlassen des Zustands
ausgelöst. do wird fortlaufend ausgelöst, solange der Zustand aktiv ist.
185
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
Die mit einem do-Ereignis verbundene Aktion ist eine Aktivität, d.h. eine nichtatomare Folge von Aktionen. Eine Aktion kann als Aktionssequenz (Metamodellklasse
ActionSequence, siehe Abb. 3.34, Seite 85) spezifiziert werden, d.h. ebenso wie eine
Aktivität aus mehreren Aktionen bestehen. Der Unterschied zwischen einer atomaren
Aktion und einer nicht-atomaren Aktivität bezieht sich auf das Laufzeitverhalten des Zustandsautomaten: eine Aktivität kann durch ein Ereignis unterbrochen werden, während
eine Aktion immer bis zu Ende ausgeführt wird.
Neben den vordefinierten Ereignissen kann ein Zustand benutzerdefinierte Ereignisse
beinhalten. Zu jedem dieser Ereignisse kann eine Aktion bzw. eine Aktivität spezifiziert
werden. Abb. 4.58 zeigt die Darstellung eines Zustands mit internen Transitionen.
Zustandsname
exit: Austrittsaktion
do: anhaltendeAktivität
on verzögern: defer
entry: Eintrittsereignis
on Ereignis( Argument )[ Bedingung ]: Aktion
Abbildung 4.58: Notation eines Zustands.
Das entsprechende Metamodellexemplar (Abb. 4.59) ist wesentlich komplexer, da es
die Semantik der Aktionen beinhaltet, die visuell aus Abb. 4.58 nicht zu erfassen sind.
Die Rose-Metaklasse State besitzt die Operationen GetEntryActions, GetExitActions, GetDoActions und GetUserDefinedEvents, mit denen die entsprechenden
Aktionen bzw. Ereignisse ermittelt werden können (siehe Abb. 4.10). Die Art einer
Aktion kann jedoch nicht ermittelt werden (siehe Abschnitt 4.7.2).
Die Spezifikation der Ereignisse in Zuständen müssen (mindestens) zwei Bedingungen genügen:
• Ereignis-4: Jeder Ereignisname kann mehrfach in einem Zustand benutzt werden,
wenn die Bedingung (guard) eindeutig ist. ([OMG99], Seite 3-132)
• Ereignis-5: Die Aktionen der Eintritts-, Austritts- und do-Ereignisse können nicht
durch eine Bedingung verhindert werden.
Im Metamodell der UML (Abb. 3.47, Seite 109) sind diese Aktionen existenzabhänge Teile (Komposition) eines Zustands und nicht mit einer Bedingung verbunden.
In Rose kann die Konsistenzbedingung Ereignis-5 nicht verletzt werden. Eine Verletzung der Bedingung Ereignis-4 wird nicht entdeckt, es können sogar die vordefinierten
Ereignisse mehrfach spezifiziert werden.
4.7. ZUSTANDSDIAGRAMME
186
: Operation
name = verzögern
entry
: CallEvent
deferableEvent
: SimpleState
name = Zustandsname
internal
: CallAction
: Operation
name = Eintrittsaktion
: SendAction
: Signal
name = Austrittsaktion
exit
doActivity
: Action
nicht näher
spezifizierte Aktivität
: Transition
trigger
: Parameter
name = Argument
: CallEvent
Operation
name = Ereignis
guard
: Guard
expression = Bedingung
effect
: CallEvent
: Operation
name = Aktion
Abbildung 4.59: Metamodellexemplar des Zustands aus Abb. 4.58.
4.7.5
Zustandsautomaten
Die Zustandsautomaten der UML sind rekursiv aufgebaut (Abb. 4.60). Jeder Zustandsautomat besteht aus einem Top-Level-Zustand, der weitere Zustände enthalten kann. Der
Top-Level-Zustand wird nicht im Zustandsdiagramm dargestellt. Die im Top-Level-Zustand enthaltenden Zustände können Kompositionszustände, die wiederum Kompositionszustände enthalten können, oder „einfache“ Zustände sein, die keine weiteren Zustände enthalten. Ein Kompositionszustand kann Anfangs- und Endzustände sowie weitere
Pseudozustände, z.B. flache und tiefe Erinnerungszustände beinhalten.
Ein Kompositionszustand repräsentiert einen Zustandsautomaten innerhalb eines Zustandsautomaten. Z.B. enthält der Kompositionszustand B-Ebene1 in Abb. 4.61 einen
Anfangs-, einen End- und den Kompositionszustand C-Ebene2, der wiederum weitere
Zustände enthält. Auf diese Weise können nicht nur flache Zustandsautomaten konstruiert
werden, sondern auch Zustandsautomaten, deren Zustände sich auf mehreren Ebenen befinden. Die Modellierung der Transitionen ist dabei nicht nur auf eine Ebene beschränkt:
Eine Transition kann zwischen Zuständen, die sich auf mehreren Ebenen befinden, modelliert werden (Abb. 4.61).
Das Metamodellexemplar von Abb. 4.61 ist zu komplex, so daß es hier ausgespart
wird. Diese Art von Zustandsautomaten kann mit Rose modelliert werden. Die Rose-
Chart Name : Ne
Chart Filename
Chart Type : UM
187
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
StateMachine
0..1
+top 1..1
State
0..*
+container
CompositeState
0..1
Abbildung 4.60: Rekursiver Aufbau eines Zustandsautomaten (vereinfachte Darstellung,
siehe auch 3.47, Seite 109)
.
B-Ebene1
C-Ebene2
D-Ebene3
A-Ebene1
E-Ebene3
Abbildung 4.61: Beispiel eines Zustandsautomaten mit mehreren verschachtelten
(Kompositions-) Zuständen (B und C).
4.7. ZUSTANDSDIAGRAMME
188
Metaklasse State (Abb. 4.10, Seite 141) besitzt die Attribute Substates und StateKind,
die die Unterzustände eines Zustands bzw. die Art des Zustands (Start-, Endzustand oder
normaler Zustand) liefern. Flache und tiefe Erinnerungszustände können zwar modelliert,
aber nicht korrekt von Rose-Script ermittelt werden.
Für Zustandsautomaten, einfache Zustände, Kompositions- und Pseudozustände sind
in [OMG99], Seite 2-135 ff, mehrere Konsistenzbedingungen definiert:
• Zustandsautomat-1: Ein Zustandsautomat gehört entweder zu einem Klassifizierer oder einem Verhaltensmerkmal.
• Zustandsautomat-2: Wenn ein Zustandsautomat ein Verhaltensmerkmal beschreibt,
kann er keine Ereignistrigger vom Typ Aufruf-Ereignis besitzen. Ausgenommen
ist der Ereignistrigger der ausgehenden Transition des Anfangszustands des TopLevel-Zustands.
• Zustandsautomat-3: Ein Top-Level-Zustand ist immer ein Kompositionszustand.
• Zustandsautomat-4: Ein Top-Level-Zustand kann kein Ausgangszustand einer
Transition sein.
• Zustand-1: Ein Kompositionszustand kann maximal einen Anfangszustand besitzen.
• Zustand-2: Ein Kompositionszustand kann maximal einen flachen oder tiefen Erinnerungszustand besitzen.
• Transition-2: Ein Anfangszustand kann maximal eine ausgehende Transition besitzen.
• Transition-3: Ein Anfangszustand kann keine eingehende Transition besitzen.
• Transition-4: Ein Endzustand kann keine ausgehende Transition besitzen.
• Transition-5: Ein Erinnerungszustand kann maximal eine ausgehende Transition
besitzen.
• Transition-6: Transitionen, die von Pseudozuständen (z.B. Anfangs- und Erinnerungszuständen, siehe Abschnitt 3.2.3) ausgehen, dürfen keine Ereignistrigger besitzen. Ausnahme: Die ausgehende Transition des Anfangszustands des Top-LevelZustands.
• Transition-7: Die ausgehende Transition des Anfangszustands des Top-Level-Zustands kann einen Ereignistrigger mit dem Stereotyp «create» besitzen. Falls der
Zustandsautomat ein Verhaltensmerkmal spezifiziert, kann diese Transition ein Aufruf-Ereignis besitzen.
189
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
• Transition-8: Der Folgezustand eines Erinnerungszustands sollte sich im gleichen
Kompositionszustand befinden6 .
In Rose gehört ein Zustandsdiagramm immer zu genau einer Klasse. Top-LevelZustände können in Rose nicht explizit modelliert werden und werden auch nicht angezeigt. In Rose ist der Top-Level-Zustand der Zustandsautomat (Rose-Metaklasse Statemachine) selbst. In Rose kann ein Kompositionszustand nur einen Anfangszustand enthalten, der keine eingehenden Transitionen besitzen kann. Die Modellierung von einem
Endzustand ausgehender Transitionen ist ebenfalls nicht möglich. Bei der Spezifikation
von Transitionen wird in Rose nicht weiter zwischen Zuständen und Pseudozuständen unterschieden: Eine Transition kann immer einen Ereignistrigger, eine Bedingung und eine
Aktion besitzen, und Ausgangs- und Folgezustände können sich in beliebigen Ebenen des
Zustandsautomaten befinden.
Ein nebenläufiger Kompositionszustand kann zwei oder mehrere Kompositionszustände, genannt Bereiche oder Regionen, besitzen (siehe Abb. 4.62). Diese Bereiche sind
wieder Kompositionszustände. Zustandsautomaten mit nebenläufigen Bereichen
könnenEvents
3.77
mit Rose nicht modelliert werden. Diese gilt auch für die weiteren in diesem Abschnitt
vorgestellten Arten von Zustandsautomaten.
Taking Class
Incomplete
Lab1
lab done
Lab2
lab
done
Passed
Term
Project
project done
Final
Test
pass
fail
Failed
Figure 3-63 Concurrent
Substates
Abbildung 4.62: Nebenläufiger
Kompositionszustand
(Incomplete) mit drei Bereichen.
(Entnommen aus [OMG99], Seite 3-135)
3.76.4 Mapping
6 Nicht
explizit in [OMG99] gefordert.
A state symbol maps into a S tate. I f the sy mbol h as no sub diagrams in it, it m aps into a
Sim pleState. If it is tiled by dashed lines in to regio ns, then it maps into a CompositeState with
the isConcurrent value true; otherwise, it maps into a CompositeState with the isConcurrent
value false.
An initial p seudostate symbol map into a Pseudostate of kind initial. A final state s ymbol maps
to a final state.
3.77 Events
4.7. ZUSTANDSDIAGRAMME
190
Für nebenläufige Kompositionszustände sind in [OMG99], Seite 2-135 ff, die folgenden Konsistenzbedingungen definiert:
• Zustand-3: Ein nebenläufiger Kompositionszustand muß mindestens zwei Kompositionszustände (Bereiche) besitzen.
• Zustand-4: Ein nebenläufiger Kompositionszustand kann nur Kompositionszustände als direkte Unterzustände enthalten.
3 UML
Notation
Mehrere Transitionen in nebenläufige Bereiche hinein oder aus ihnen heraus, können
mit den Pseudozuständen fork und join modelliert werden (Abb. 4.63). Diese Transitionen
werdenExample
auch nebenläufige (concurrent) Transitionen genannt.
3.79.3
Process
A1
A2
Setup
Cleanup
B1
B2
Abbildung 4.63: Die senkrechten Balken werden auf die Pseudozustände fork und join
Figure 3-65 Concurrent
Transitions
abgebildet.
Sie dienen
der Synchronisation von nebenläufigen Bereichen. Die von einem Synchronisationsbalken ausgehenden Transitionen
3.79.4 Mapping
werden erst gefeuert, wenn alle eingehenden Transitionen ausgeführt
wurden. (Entnommen aus [OMG99], Seite 3-140)
A bar with multiple transition arrows leaving it maps into a fork pseudostate. A bar with
multiple transitio n arrows enter ing it m aps in to a jo in p seudostate. T he transitions
Für diese Pseudozustände
sind
weitere
correspondingund
to thnebenläufigen
e incoming and Transitionen
outgoing arrows
attach
to th eKonsistenzbepseudostate as if it were a
dingungen definiertregular
([OMG99],
2-136
ff): incoming and multiple outgoing arrows, then it maps into a
state. If Seite
a bar has
multiple
join conn ected to a fork p seudostate by a sing le transition with n o attac hments.
• Zustand-5: Ein fork-Pseudozustand muß mindestens zwei ausgehende und genau
eine eingehende Transition besitzen.
3.80 Transitions to and from Composite States
• Zustand-6: Ein join-Pseudozustand muß mindestens zwei eingehende und genau
eine Semantics
ausgehende Transition besitzen.
3.80.1
• Transition-9:
Eine vondrawn
einem
ausgehende
kei- n to its initial
A transition
to fork-Pseudozustand
the boundary of a composite
state is e Transition
quivalent to darf
a transitio
nen Ereignistrigger
keine
Bedingung
point (orund
to a co
mplex
transition toenthalten.
the initial p oint of each of its co ncurrent regions, if it is
concurrent). The e ntry action is always p erformed when a state is en tered from outside.
• Transition-10: Eine in einem join-Pseudozustand eingehende Transition darf keiA transition from a composite state indicates a transition that applies to each of the states within
nen Ereignistrigger
und keine Bedingung enthalten.
the state region (at any depth). It is “inherited” by the nested states. Inherited transitions can be
m
asked
y the presence of nested
transitio
ns with
the sam e trigger. eingehenTransition-11:
DerbAusgangszustand
einer
in einen
join-Pseudozustand
•
den Transition darf kein Pseudozustand sein.
3.80.2 Notation
A transition drawn to a composite state boundary indicates a transition to the composite state.
This is equivalent to a tra nsition to th e initial ps eudostate within the composite state r egion.
The initial p seudostate m ust b e present. If the state is a c oncurrent com posite state, then th e
transition ind icates a transitio n to the initial p seudostate of eac h of its con current sub states.
Transitions may be d rawn d irectly to states within a composite state regio n at any nestin g
dep th. All e ntry actions are perf ormed for any state s that ar e entered o n any transition. On a
transition within a concurrent com posite state, transitio n arrows from the synchronization bar
3.83 Synch States
191
KAPITEL 4. WERKZEUGUNTERSTÜTZUNG UND KONSISTENZ
3.83 Synch States
• Transition-12: Der Folgezustand eines fork-Pseudozustands darf kein Pseudozustand Semantics
sein.
3.83.1
A synch
is for synchronizing einer
concurrent
regionsjoin-Pseudozustand
of a state machine. It is used
in
• Transition-13:
Derstate
Ausgangszustand
in einen
eingehenconjunction with f orks and joins to insur e that on e region leaves a p articular state o r states
den Transition
muß ein Unterzustand eines nebenläufigen Kompositionszustands
before another region can enter a particular state o r states. T he firing of outgoing tran sitions
sein, d.h. es from
mußa synch
ein Zustand
Bereichs
sein.a bound on the difference between the number
state can beines
e limited
by specifying
of times o utgoing and in coming transitio ns have fir ed.
• Transition-14: Die Folgezustände eines fork-Pseudozustands müssen Unterzustände eines
nebenläufigen Kompositionszustands sein.
Notation
3.83.2
Nebenläufige Bereiche
eines Kompositionszustands können mit SynchronisationsA synch sta te is sh own as a small c ircle with the upper bound inside it. The bound is e ither a
pseudozuständen synchronisiert
Das
Feuern
star ( ’*’) for un
limited.
Sy nchausgehender
states are drawn oTransitionen
n the b oundary beines
etween
positive in teger or awerden.
o
regions
when
possible.
tw
Synchronisationszustands kann durch die Angabe einer Grenze beschränkt werden. Die
Grenze ist die Differenz zwischen der Häufigkeit des Feuerns ein- und ausgehender Tran3.83.3desExample
sitionen
Synchronisationszustands (siehe Abb. 4.64). Für Synchronisationszustände
Build House
Build
Frame
Put On
Roof
Install
Walls
Install
Foundation
Inspect
*
Install
Electricity
In Foundation
*
Install
Electricity
In Frame
Install
Electricity
Outside
Abbildung 4.64: Synchronisation
von nebenläufigen Bereichen eines SynchronisationsFigure 3-71 Synch states
zustands mit Synchronisationszuständen (*). Der Stern kennzeichnet
den Wert unlimited für die Grenze des Synchronisationszustands. (Entnommen aus [OMG99], Seite 3-147)
sind zwei Konsistenzbedingungen zu beachten ([OMG99], Seite 2-137):
• Zustand-7: Der Wert der Grenze eines Synchronisationszustands muß ein positiver
Integer oder unlimited sein.
UML V1.3 beta R5
May 1999
3-147
• Transition-15: Alle eingehenden Transitionen in einen Synchronisationszustand
müssen aus einem einzigen Bereich kommen, alle ausgehenden Transitionen müssen ihr Ziel in einem einzigen Bereich haben.
4.7. ZUSTANDSDIAGRAMME
192
Die Darstellung des Inhalts verschachtelter Kompositionszustände kann unterdrückt
3 UMLwerden.
Notation
Transitionen in solche Zustände hinein können mit Stummel-Pseudozuständen
dargestellt werden (siehe Abb. 4.65). Für Stummelzustände sind in [OMG99] keine
Konsistenzbedingungen formuliert.
W
p
s
s
E
A
C
u
r
F
t
B
D
may be abstracted as
p
s
W
C
A
r
B
D
Stubbed
Transitions
AbbildungFigure
4.65:3-66
Details
innerhalb
von Kompositionszuständen können unterdrückt werden. Transitionen in Zustände hinein und aus Zuständen heraus werden mit Hilfe von Stummelzuständen dargestellt. (Entnommen aus
[OMG99], Seite 3-142)
Mit junction-Pseudozuständen können komplexe
Transitionspfade modelliert werden
interrupt
A1
A
C
(Abb. 4.66).
Sie können mehrere eingehende und ausgehende Transitionen
besitzen, mit
denen eine statisch bedingte Verzweigung modelliert werden kann.
Mit choice-Pseudozuständen können dynamisch bedingte
resume Verzweigungen modelliert
werden. In Abb. 4.67 wird der Wert von
a zur (gedachten) Laufzeit des Automaten
H
bestimmt.
A2
Für junction- und choice-Pseudozustände sind in [OMG99] weitere Konsistenzbedingungen definiert:
• Zustand-7: Junction- und choice-Pseudozustände müßen mindestens eine eingehende und eine ausgehende Transition besitzen ([OMG99], Seite 2-136).
Figure 3-67Nur
History
• Zustand-8:
eine Indicator
Transition von einem junction- oder choice-Pseudozustand
ausgehende Transition darf die vordefinierte Bedingung else besitzen ([OMG99],
Seite 2-130).
3.80.5 Mapping
An arrow to any state bo undary, nested or no t, maps into a Transition between the
corresponding States and similarly for tr ansitions direct ly to h istory state s.
A history indicator maps into a Pseudostate of kind shallowHistory or deepHistory.
3-142
UML V1.3 beta R5
May 1999
3 UML Notation
3 UML Notation
3.81.3 Examples
3.81.3 Examples
In Figu re 3-68 a sin gle ju nction point is u sed to merge and split tra nsitions. Reg ardless of
whether
the jun ction
was rea ched from state S tate0 or fromUND
state SKONSISTENZ
tate1, the o utgoing
KAPITEL
4. point
WERKZEUGUNTERSTÜTZUNG
In Figu re
3-68 a sin gle
ju
nction point is u sed to merge and split tra
nsitions. Reg ardless of
paths ar e the same f or both ca ses.
whether the jun ction point was rea ched from state S tate0 or from state S tate1, the o utgoing
e themachine
same f orinboth
ses. is in state State1 and b is less than 0 when event e1 occurs,
paths
If thearstate
this ca
example
193
the outgoing transition will be taken only if on e of the three downstream guards is true. Thus,
If the state machine in this example is in state State1 and b is less than 0 when event e1 occurs,
if a is eq ual to 6 at that po int, no transition will be trigg ered.
the outgoing transition will be taken only if on e of the three downstream guards is true. Thus,
if a is eq ual to 6 at that po int, no transition will be trigg ered.
State0
State1
State0
e2[b
< 0]
State1
e1[b < 0]
e2[b < 0]
e1[b < 0]
[a > 7]
[a < 0]
[a > 7]
[a = 5]
[a < 0]
State2
[a = 5]
State3
State4
State2
State3
State4
Abbildung
4.66:
(Entnommen aus [OMG99], Seite 3-144)
Figure
3-68Junction-Pseudozustand
Junction points
Figure 3-68
Junction points
In the dynamic choice point example in Figure 3-69, the decision on which branch to take is
only made after the transition from State1 is taken and the choice point is reached. Note that the
In the dynamic choice point example in Figure 3-69, the decision on which branch to take is
action associated with that incoming transition computes a new value for a. This new value c an
only made after the transition from State1 is taken and the choice point is reached. Note that the
then be us ed to d etermine the o utgoing transition to b e taken. The us e of the predef ined
action associated with that incoming transition computes a new value for a. This new value c an
con dition[else] is rec ommended to avoid run-time errors.
then be us ed to d etermine the o utgoing transition to b e taken. The us e of the predef ined
con dition[else] is rec ommended to avoid run-time errors.
State1
State1e1[b < 0]/a := f(m)
e1[b < 0]/a := f(m)
[else]
[a < 0]
[else]
[a = 5]
[a < 0]
State2
[a = 5]
State3
State2
Figure 3-69
State4
State3
State4
Dynamic choice points
Figure 3-69 Dynamic choice points
Abbildung
4.67: Choice-Pseudozustand (Entnommen aus [OMG99], Seite 3-144)
3-144
3-144
UML V1.3 beta R5
UML V1.3 beta R5
May 1999
May 1999
ZUSTANDSDIAGRAMME
34.7. UML
Notation
194
Ein Zustandsautomat kann Transitionen zu anderen, irgendwo spezifizierten Zustands3.82.3 Example
automaten besitzen. Dieser wird referenzierter Zustandsautomat genannt. Die ZustänThe following diagramwerden
shows a fragment
from a statech artdargestellt
diagram in (siehe
which a submachine (the
de des referenzierten Zustandsautomaten
als Stummelzustände
FailureSubmachine)
is
invoked
in
a
particular
way.
The
actual
submachine
Abb. 4.68) und auf die Metamodellklasse SubmachineState (Unterautomatenzustand)is presumably
defined elsewhere and is no t sho wn in this diagram . Note th at the sam e submachine could be
abgebildet.
invoked elsewh ere in th e same statec hart diagram with different entry and exit con figurations.
Handle Failure
include / FailureSubmachine
error1/
sub1
error3/
error2/
sub1::sub12
subEnd
fixed1/
Figure 3-70
Submachine State
Abbildung 4.68: Der Unterautomatenzustand Handle Failure enthält den ZustandsautomatenInFailureSubmachine.
aus [OMG99],
Seitewill
3-146)
the above example, the(Entnommen
transition triggered
by event “error1”
terminate on state “sub1”
of the Failur eSubmachine state m achine. Since th e entry point d oes not contain a path name,
Für referenzierte Zustandsautomaten
weitere
definiert
is defined
at the Konsistenzbedingungen
to p level o f that su bmachine.
In con trast, the tra nsition
this means th at “sub1” sind
triggered b y “error2” will ter minate on the “su b12” substate of the “su b1”substate (as indicated
([OMG99], Seite 2-137):
by the path nam e), while the “er ror3” transitio n im plies tak ing of the default tra nsition of th e
FailureSub machine.
• Unterautomatenzustand-1:
Ein Unterautomatenzustand (nicht der referenzierte
Zustandsautomat!)
nur Stummelzustände
triggered by the evenenthalten.
t “fixed1” em anates f rom the “su bEnd” sub state of the
The darf
tr ansition
submachine. Finally, the transition emanating from the edge of the submachine state is taken as
• Unterautomatenzustand-2:
Ein Unterautomatenzustand darf kein nebenläufiger
a result o f the completion event g enerated when th e Failu reSubmachine reaches its final state.
Kompositionszustand sein.
3.82.4 Mapping
3-146
A submachine state in a statech art d iagram maps directly to a Su bmachineState in th e
metamodel. The name following the “include” reserved action label represents the state
machine indicated by the “submachine” attribute. Stub states map to the Stub State concept in
the metamodel. The lab el on the diagram corresponds to th e pathn ame repre sented b y the
“referenceState” attribute of the stub state.
UML V1.3 beta R5
May 1999
Kapitel 5
Konzept einer Benutzerschnittstelle zur
Konsistenzprüfung in Rational Rose 98
Rational Rose läßt sich mit Hilfe von Rose-Script um Konsistenzprüfungen erweitern.
Wie der Name andeutet, können mit Rose-Script Skripte erstellt werden. Diese Skripte
müssen auf Benutzeranforderung gestartet werden. Sie können eine graphische Benutzerschnittstelle enthalten, so daß der Benutzer den Ablauf der Skripte steuern kann.
Die Skripte können nicht ereignisgesteuert gestartet werden, so daß keine Mechanismen, mit denen Inkonsistenzen vermieden werden können oder Mechanismen, die der
Unterstützung zum Modellierungszeitpunkt dienen, realisiert werden können. Ein Skript
muß immer beendet werden, d.h. es ist nicht möglich ein Skript anzuhalten, dann Veränderungen am Modell vorzunehmen und danach das Skript fortzusetzen.
In Abschnitt 5.1 werden die in Rose-Script zur Verfügung stehenden Möglichkeiten
zur Überprüfung von Konsistenzbedingungen und zur Realisierung einer graphischen Benutzerschnittstelle kurz vorgestellt. In Abschnitt 5.2 wird erläutert, nach welchen Kriterien Konsistenzbedingungen strukturiert werden können.
5.1
Möglichkeiten von Rose-Script
Mit Rose-Script kann auf (fast) alle Informationen, die der Modellierer in Rose spezifiziert, zugegriffen werden. Diese Informationen sind in den Objekten der Klassen des
Werkzeugmetamodells von Rose (Abschnitt 4.4) vorhanden. Die Möglichkeiten von
Rose-Script beschränken sich nicht auf die reine Ermittlung gewünschter Informationen.
Objekte (Modellelemente) können in dem Umfang erzeugt, gelöscht und verändert werden, wie es auch ein Modellierer in Rose könnte. Daher können neben der reinen Prüfung
auch Korrekturen am UML-Modell vorgenommen werden. Das Rose-Metamodell kann
allerdings nicht erweitert werden.
Ein lauffähiges Skript besteht aus einer ausgezeichneten Unterroutine (main). Ein
Skript kann weitere, benutzerdefinierte Unterroutinen und Funktionen beinhalten, an die
195
5.1. MÖGLICHKEITEN VON ROSE-SCRIPT
196
Argumente per Call-By-Reference oder Call-By-Value übergeben werden können. Skripte
können andere lauffähige Skripte starten und andere Skripte, die nicht notwendigerweise
eine main-Routine besitzen müssen, in den Speicher laden und den enthaltenen Code
benutzen.
In Rose können u.a. die folgenden Datentypen zur Deklaration von Variablen benutzt
werden:
• Any : beliebiger, nicht näher spezifizierter Datentyp,
• Date : Datum und Uhrzeit,
• Variant : Datentyp, der verschiedene Datentypen enthalten kann,
• die Standarddatentypen Boolean, Double, Single, Integer und String,
• die Klassen des Rose-Metamodells (z.B. Class, RoseItem),
• Sammlungen (Collections), die mehrere Objekte einer Rose-Metamodellklasse enthalten (z.B. ClassCollection, RoseItemCollection) und
• Arrays mit statischer oder dynamischer Größe.
Benutzerdefinierte Datentypen können nur in Form von statischen Arrays deklariert
werden. Es ist nicht möglich, neue Klassen mit Attributen und Operationen zu definieren.
Routinen, Funktionen und Variablen können als Public, Private oder Global deklariert
werden. Die „üblichen“ Operatoren (>, <, =, and, or, +, −, usw.) und Kontrollstrukturen
(If-Then-Else, For . . . Next, Do . . . Loop, while) sind vorhanden.
Es stehen Funktionen zur Verfügung, mit denen das Betriebssystem des Rechners
und betriebssystemabhängige Eigenschaften ermittelt werden können. Dies ist wichtig,
da nicht alle Möglichkeiten von Rose-Script auf jeder Plattform verfügbar sind. Dies
betrifft insbesondere die Möglichkeiten der graphischen Benutzerschnittstelle, die nur auf
Windows32-Plattformen vollständig genutzt werden können.
Die graphische Benutzerschnittstelle in Form eines Dialogs kann die folgenden Elemente enthalten (alle Plattformen, kein Vollständigkeitsanspruch):
• verschiedene Push-Buttons (OK, Cancel und benutzerdefinierte Buttons)
• Radio-Buttons zur Selektion einer Option aus mehreren, statisch vorgebenen Möglichkeiten
• Drop-Down-Listen und Listen zur Selektion einer Option aus mehreren Möglichkeiten, die zur Laufzeit durch den Inhalt eines Arrays bestimmt werden
• Check-Boxen, mit denen jeweils eine Option aktiviert/deaktiviert werden kann.
197
KAPITEL 5. BENUTZERSCHNITTSTELLE ZUR KONSISTENZPRÜFUNG
Ein Dialog wird als Vorlage definiert, die die Struktur des Dialogs beschreibt. Ein
Dialog kann eine Dialogfunktion besitzen, deren Parameter allerdings fest vorgegeben
sind. Die Dialogfunktion wird ausgeführt, wenn der Benutzer z.B. eine Check-Box aktiviert oder einen Radio-Button selektiert. Auf diese Weise kann der Dialoginhalt in einem geringen Umfang dynamisch verändert werden. Die Dialogfunktion wird vorrangig
dazu genutzt, Dialogelemente in Abhängigkeit von anderen Dialogelementen zu aktivieren/deaktiveren oder zu verstecken bzw. sichtbar zu machen. Werden Arrays, die den Inhalt für Drop-Down-Listen liefern, durch die Dialogfunktion verändert, so hat dies keinen
Einfluß auf den Dialog. Die Veränderung wird erst sichtbar, wenn der Dialog nochmals
geöffnet wird. Es ist leider nicht möglich, benutzerdefinierte Dialoge zu verschachteln.
5.2
Strukturierung der Konsistenzprüfungen
Eine Überprüfung aller Konsistenzbedingungen aller Modellelemente eines UML-Modells
einer realen Systementwicklung ist zeitaufwendig und führt, besonders in einem frühen
Entwicklungsstadium, meistens zu vielen Inkonsistenzmeldungen, die den Modellierer
nicht interessieren. Die interessante Information verschwindet in der Masse. Daher muß
dem Benutzer die Möglichkeit gegeben werden, nur die für ihn zu einem bestimmten
Zeitpunkt interessanten Konsistenzprüfungen durchführen zu lassen.
Betrachtet man den Entwicklungszeitraum, von der Konzeption bis zur Implementierung, so gibt es Konsistenzbedingungen, deren Überprüfung erst zu einem späteren Entwicklungszeitpunkt interessant werden. Die Konsistenzbedingungen lassen sich abhängig
vom Entwicklungszeitpunkt grob in zwei Arten einteilen:
1. Konsistenzbedingungen, die nie verletzt werden sollten („grundsätzliche Fehler“).
Dies sind Konsistenzbedingungen, die nicht auf Grund einer unvollständigen Spezifikation des Modells, sondern durch eine fehlerhafte Spezifikation verletzt werden.
2. Konsistenzbedingungen, die auf Grund einer unvollständigen Spezifikation verletzt
werden. Ob die Überprüfung dieser Konsistenzbedingungen für den Modellierer interessante Informationen liefern kann, hängt vom Entwicklungszeitpunkt und vom
gewünschten formalen Spezifikationsgrad ab.
Die meisten Konsistenzbedingungen lassen sich einem Modellelement und damit meistens auch einer Diagrammart zuordnen. Somit können Konsistenzbedingungen nach
Diagrammen geordnet werden.
Es gibt Konsistenzbedingungen, deren Verletzung automatisch korrigiert werden kann.
Dies sind vorrangig Konsistenzbedingungen, die die Existenz anderer Modellelemente
fordern. Das Merkmal einer vorhandenen bzw. nicht vorhandenen Korrekturmöglichkeit
ist ein weiteres Unterscheidungsmerkmal.
Da es nicht immer gewünscht ist das ganze Modell auf die Einhaltung von Konsistenzbedingungen zu prüfen, sollte es möglich sein, nur bestimmte Bereiche des Modells
zu überprüfen.
5.3. KONZEPT DER BENUTZERSCHNITTSTELLE
5.3
198
Konzept der Benutzerschnittstelle
Die obigen Überlegungen führten zu dem folgenden Konzept, welches auch umgesetzt
wurde (siehe Abb. 5.1):
1. Die Auswahl der Konsistenzprüfungen erfolgt diagrammorientiert. Dazu wird über
die Menüleiste eine Diagrammart ausgewählt.
2. Die Konsistenzprüfungen werden nach dem Entwicklungszeitpunkt (siehe Abschnitt
5.2) geordnet.
Wenn zuviele Konsistenzprüfungen im Kontext eines Diagramms existieren, werden diese auf mehrere Auswahldialoge verteilt.
3. Der Umfang der zu überprüfenden Modellelemente kann nach verschiedenen Kriterien gewählt werden:
(a) Paketorientiert: Es kann das gesamte Modell oder ein bestimmtes Paket inklusive aller enthaltenen Pakete zur Überprüfung gewählt werden.
(b) Diagrammorientiert: Entsprechend der ausgewählten Diagrammart können
entweder alle Diagramme oder nur ein bestimmtes Diagramm dieser Art ausgewählt werden.
(c) Benutzerorientiert: Sind vom Benutzer vor dem Öffnen des Auswahldialogs
Modellelemente selektiert worden, können entweder alle selektierten Modellelemente oder genau eines der selektierten Modellelemente gewählt werden.
Die Überprüfung findet auf der Basis des Werkzeugmetamodells statt. Die Auswahl
bestimmt lediglich den minimalen Umfang der zu überprüfenden Modellelemente.
4. Jede Prüfung kann einzelnd ausgewählt werden.
5. Jede Prüfung kann interaktiv durchgeführt werden, d.h. wenn eine Inkonsistenz
entdeckt wird, wird dem Benutzer ein Dialog mit den folgenden Informationen angezeigt (Abb. 5.2, siehe auch 4.2.4 Konsistenzprüfung als Informationsproduzent):
(a) Die überprüfte Konsistenzbedingung.
(b) Die Modellelemente, die für die Verletzung der Konsistenzbedingung verantwortlich sind.
(c) Maßnahmen zur Behebung der Inkonsistenz werden vorgeschlagen.
Dem Benutzer stehen nun mehrere Möglichkeiten zur Verfügung:
(a) In der Drop-Down-Liste „Modellelemente“ sind die Modellelemente vorhanden, die für die Inkonsistenz vorantwortlich sind. Die Auswahl eines dieser
199
KAPITEL 5. BENUTZERSCHNITTSTELLE ZUR KONSISTENZPRÜFUNG
Abbildung 5.1: Auswahldialog der Konsistenzprüfungen („grundsätzliche Fehler“) in
Klassendiagrammen
5.3. KONZEPT DER BENUTZERSCHNITTSTELLE
Abbildung 5.2: Inkonsistenzdialog
200
201
KAPITEL 5. BENUTZERSCHNITTSTELLE ZUR KONSISTENZPRÜFUNG
Modellelemente zeigt (unter dem Dialog) ein Diagramm an, in dem das Modellelement vorkommt. Auf diese Weise kann sich der Modellierer ein „Bild
von der Inkonsistenz verschaffen“.
(b) Der Button „Spezifikation öffnen“ beendet die Konsistenzprüfung und öffnet
das Spezifikationsfenster des in der Drop-Down-Liste angegebenen Elements.
(c) Handelt es sich um eine Konsistenzprüfung, deren Verletzung automatisch
korrigiert werden kann, wird ein Button „Autokorrektur“ und ein Text angezeigt. Der Text beschreibt die Funktion der Autokorrektur.
(d) Der Button „Weiter mit Einzelschritt“ setzt die Prüfung interaktiv fort.
(e) Der Button „Weiter ohne Einzelschritt“ setzt die Prüfung ohne Interaktionsmöglichkeit fort.
(f) Der Button „Abbruch“ bricht die Überprüfungen ab.
6. Die Prüfungsmeldungen werden in die Standardausgabe (Unix) oder in ein spezielles Fenster (Windows) geschrieben. Bei nicht interaktiver Prüfung wird eine
automatische Korrektur nur durchgeführt, wenn im Dialog die Autokorrektur ausgewählt wurde.
Anhang A
Realisierung der Benutzerschnittstelle
Die Benutzerschnittstelle ist durch mehrere Skripte realisiert: Jeder Auswahldialog und
jede Konsistenzprüfung befindet sich in einem eigenen Skript. Verschiedene Hilfsfunktionen (Seite 203) sind ebenfalls in einzelne Skripte ausgelagert.
Der Aufbau der Skripte wird in den beiden nächsten Abschnitten kurz erläutert. Die
restlichen Abschnitte geben eine Übersicht über die entwickelten Skripte und beschreiben
die Installation der Skripte.
A.1
Das Skript einer Konsistenzprüfung
Ein Skript, welches eine Konsistenzprüfung realisiert, besteht aus mehreren Teilen:
1. Dialogvorlage: Die Dialogvorlage für den Inkonsistenzdialog (Abb. 5.2, Seite 200)
ist zwar allgemein verwendbar, muß aber leider aus technischen Gründen in jedem
Skript vorhanden sein. Die Dialogvorlage besitzt mehrere Variablen, die von der
Routine, die die Konsistenzprüfung realisiert, gesetzt werden sollten:
(a) PrüfungText (String): beschreibt die durchgeführte Prüfung.
(b) MaßnahmenText (String): beschreibt mögliche Maßnahmen zur Beseitigung
der Inkonsistenz.
(c) AutokorrekturMöglich (Boolean): gibt an, ob der Button zur Autokorrektur
inklusive Beschreibung im Dialog sichtbar sein soll.
(d) AutokorrekturText (String): beschreibt die von der Autokorrektur durchgeführte Änderung.
(e) VerursacherNamen (String, Array): enthält die Namen der Modellelemente,
deren Diagramme angezeigt werden können.
(f) VerursacherObjekte (RoseItem, Array): gehört streng genommen nicht zur
Dialogvorlage, enthält die Objekte (Modellelemente), deren Diagramme angezeigt werden können.
202
203
ANHANG A. REALISIERUNG DER BENUTZERSCHNITTSTELLE
(g) InkonsistenzText (String): wird zur Ausgabe eines Textes, der die Inkonsistenz und die beteiligten Modellelemente beinhaltet, genutzt.
2. Dialogfunktion: Die Dialogfunktion ruft u.a. eine Routine auf, die ein Diagramm
anzeigt, in welchem das im Inkonsistenzdialog ausgewählte Modellelement vorhanden ist. Realisiert ist lediglich eine Routine, die ein Klassendiagramm anzeigt.
Für Konsistenzprüfungen im Kontext anderer Diagrammarten müßte diese Routine
entsprechend angepaßt werden.
3. Prüfungsroutine: Der erste Parameter einer Prüfungroutine ist immer von einem
Typ der Art Collection (z.B. ClassCollection oder AssociationCollection).
Dies ist die Sammlung von Modellelementen, die iterativ von der Prüfungsroutine
bearbeitet werden.
Weitere Parameter sind Einzel und Abbruch (beide Boolean, Call-By-Reference)
und, falls die Prüfung eine automatische Korrektur beinhaltet, Auto (Boolean). Die
Prüfungsroutine kann auch Unterroutinen beinhalten.
A.2
Das Skript eines Auswahldialogs
Das Skript eines Auswahldialogs besteht neben der Dialogvorlage und der Dialogfunktion
aus mehreren Routinen, die auf Basis der ausgewählten Modellelemente und Konsistenzprüfungen eine Sammlungen (Collection) entsprechend der Parameter der Prüfungsroutinen erzeugen (z.B. CreateClassCollection, CreateAssociationCollection).
Die Prüfungsroutinen werden dynamisch zur Laufzeit in den Speicher geladen und
auch wieder aus dem Speicher entfernt, da das Laden mehrerer Skripe zu einem Zeitpunkt
zu einer spürbar längeren Antwortzeit führt.
A.3
Entwickelte Skripte
A.3.1 Hilfsfunktionen
Function HasAttributeType
(anAttribute As Attribute) As Variant
Aufgabe: liefert True, falls anAttribute einen Typ (Type) besitzt
Datei: Function_HasAttributeType.ebs
Function HasSameSignatur
(op1 As Operation, op2 As Operation) As Variant
Aufgabe: liefert True, falls die beiden Operationen die gleiche Signatur besitzten
Datei: Function_HasSameSignature.ebs
A.3. ENTWICKELTE SKRIPTE
204
Function ExistsOperationSignatureInClass
(theClass As Class, theOperation As Operation) As Variant
Aufgabe: Überprüft, ob die Signatur der Operation in der Klasse existiert
Datei: Function_ExistsOperationSignatureInClass.ebs
Function ExistsOperationSignatureInSuperclasses
(theClass As Class, theOperation As Operation) As Variant
Aufgabe: Überprüft, ob die Signatur der Operation in einer Oberklasse der Klasse existiert.
Datei: Function_ExistsOperationSignaturInSuperclasses.ebs
Function IsAssociationNavigable
(anAssociation As Association) As Variant
Aufgabe: liefert True, falls ein Assoziationsende navigierbar ist.
Datei: Function_IsAssociationNavigable.ebs
Function IsInterface (theClass As Class) As Variant
Aufgabe: liefert True, falls die Klasse das Stereotyp «Interface» besitzt.
Datei: Function_IsInterface.ebs
A.3.2
Konsistenzprüfungen
Sub KP_CheckAttrPAttr (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Attribute und Pseudoattribute der Klassen eindeutig sind
(Attribut-5).
Datei: Sub_KP_CheckAttrPAttr.ebs
Sub KP_UniqueOpSignatures (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Operationssignaturen der Klassen eindeutig sind (Operation1).
Datei: Sub_KP_UniqueOpSignatures.ebs
Sub KP_UniqueParaNames (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Parametername der Operationen der Klassen eindeutig sind
(Operation-2).
Datei: Sub_KP_UniqueParaNames.ebs
Sub KP_CheckCompositionCardinality (Associations As AssociationCollection,
Einzel As Boolean, Abbruch As Boolean)
205
ANHANG A. REALISIERUNG DER BENUTZERSCHNITTSTELLE
Aufgabe: Überprüft, ob die Assoziationsenden, die eine Komposition kennzeichnen, eine
maximale Kardinalität von 1 besitzen (Komposition-1).
Datei: Sub_KP_CheckCompositionCardinality.ebs
Sub KP_CheckGeneralization (Generalizations As InheritRelationCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Generalisierungsbeziehungen zwischen Klassifizierern der
gleichen Art spezifiziert sind (Generalisierung-4).
Datei: Sub_KP_CheckGeneralization.ebs
Sub KP_InterfaceOperationsOnly (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» nur Attribute als
Merkmale besitzen (Interface-1).
Datei: Sub_KP_InterfaceOperationsOnly.ebs
Sub KP_InterfaceNoContents (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» Klassen beinhalten
(Interface-2).
Datei: Sub_KP_InterfaceNoContents.ebs
Sub KP_InterfaceAssoziation (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» ein gegenüberliegendes, navigierbares Assoziationsende besitzen (Interface-7).
Datei: Sub_KP_InterfaceAssoziation.ebs
Sub KP_InterfaceHasOperation (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» Operationen deklarieren (Interface-5).
Datei: Sub_KP_InterfaceHasOperation.ebs
Sub KP_InterfaceHierarchie (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» eindeutige Operationssignaturen in der Klassenhierarchie besitzen (Interface-6).
Datei: Sub_KP_InterfaceHierarchie.ebs
Sub KP_InterfacePublicOperations (Classes As ClassCollection,
A.3. ENTWICKELTE SKRIPTE
206
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» nur öffentliche, abstrakte Operationssignaturen besitzen (Interface-3, Interface-4).
Datei: Sub_KP_InterfacePublicOperations.ebs
Sub KP_InterfaceRealize (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» etwas realisieren
(Interface-12).
Datei: Sub_KP_InterfaceRealize.ebs
Sub KP_InterfaceStatemachine (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen mit dem Stereotyp «Interface» einen Zustandsautomaten bzw. ein Zustandsdiagramm besitzen (Interface-10).
Datei: Sub_KP_InterfaceStatemachine.ebs
Sub KP_CheckTypeClassGeneralization (Generalizations As
InheritRelationCollection, Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Super-Klassifizierer eines Typen («type») ebenfalls Typen
sind (Typ-1).
Datei: Sub_KP_CheckTypeClassGeneralization.ebs
Sub KP_AttributeDeklariert (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Attributdeklarationen der Klassen einen Typ beinhalten (Attribut2).
Datei: Sub_KP_AttributeDeklariert.ebs
Sub KP_AttributExTyp (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Typen der Attribute der Klassen im Modell existieren (Attribut3).
Datei: Sub_KP_AttributExTyp.ebs
Sub KP_OpParaTypDeklariert (Classes As ClassCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Typen der Parameter der Operationen der Klassen deklariert
sind.
Datei: Sub_KP_OpParaTypDeklariert.ebs
Sub KP_OpParaTypEx (Classes As ClassCollection,
207
ANHANG A. REALISIERUNG DER BENUTZERSCHNITTSTELLE
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Typen der Parameter der Operationen der Klassen im Modell
existieren (Operation-3).
Datei: Sub_KP_OpParaTypEx.ebs
Sub KP_CheckAndSetClassAbstract (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Klassen abstrakte Operationen besitzen und als abstrakt spezifiziert sind (Operation-4).
Datei: Sub_KP_CheckAndSetClassAbstract.ebs
Sub KP_AssociationsNavigable (Associations As AssociationCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob die Assoziationen in eine Richtung navigierbar sind (Assoziation2).
Datei: Sub_KP_AssociationsNavigable.ebs
Sub KP_NavRoleExName (Associations As AssociationCollection,
Einzel As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob navigierbare Assoziationsenden der Assoziationen benannt sind
(Assoziation-3).
Datei: Sub_KP_NavRoleExName.ebs
Sub KP_KonkreteKlassenUmAbstrakteOperationenErweitern
(Classes As ClassCollection, Einzel As Boolean, Auto As Boolean, Abbruch
As Boolean)
Aufgabe: Überprüft, ob Klassen abstrakte Operationen ihrer Oberklassen realisieren (als
nicht abstrakt deklarieren) (Operation-5).
Datei: Sub_KP_KonkreteKlassenUmAbstrakteOperationenErweitern.ebs
Sub KP_InterfaceAktiv (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob Klassen mit dem Stereotyp «Interface» als aktiv spezifiziert sind
(Interface-8).
Datei: Sub_KP_InterfaceAktiv.ebs
Sub KP_RealizeInterfaceOperations (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob Klassen alle Operationen ihrer Interfaces realisieren (deklarieren) (Operation-13).
Datei: Sub_KP_RealizeInterfaceOperations.ebs
A.4. INSTALLATION
208
Sub KP_ExistsSignalClass (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob zu den Signal-Operationen eine entsprechende Signalklasse im
Modell existiert (Signal-1).
Datei: Sub_KP_ExistsSignalClass.ebs
Sub KP_SignalStatemachine (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob Klassen mit Signal-Operationen einen Zustandsautomaten besitzen, der den Emfang des Signals spezifiziert (Signal-4).
Datei: Sub_KP_SignalStatemachine.ebs
Sub KP_SignalActiveClass (Classes As ClassCollection,
Einzel As Boolean, Auto As Boolean, Abbruch As Boolean)
Aufgabe: Überprüft, ob Klassen mit Signal-Operationen als aktiv spezifiziert sind (Signal5).
Datei: Sub_KP_SignalStatemachine.ebs
A.3.3
Auswahldialoge
1. Datei: KP_Klassendiagramm1.ebs
2. Datei: KP_Klassendiagramm2.ebs
A.4
Installation
Die Installation besteht aus drei Schritten:
1. alle Skripte müssen in das Verzeichnis des Skript-Pfads ($SCRIPT_PATH) kopiert
werden.
2. Anpassung der Rose-Menü-Datei rose.mnu:
Sollen die Auswahldialoge unter dem Menüpunkt Report erreichbar sein, sind nach
den Zeilen
Menu Report
{
die folgenden Zeilen einzufügen:
option "Check Classdiagram1"
209
ANHANG A. REALISIERUNG DER BENUTZERSCHNITTSTELLE
{
RoseScript $SCRIPT_PATH\KP_Klassendiagramm1
}
option "Check Classdiagram2"
{
RoseScript $SCRIPT_PATH\KP_Klassendiagramm2
}
Hinter option kann eine beliebige Zeichenkette (Menüeintrag) angegeben werden.
RoseScript . . . startet bei der Auswahl des Menüpunkts das angegebene Skript.
3. Rose muß gegebenenfalls neu gestartet werden.
Abbildungsverzeichnis
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
2.22
2.23
2.24
Klasse . . . . . . . . . . .
Interface (Lolli) . . . . . .
Interface . . . . . . . . . .
Kollaborationssymbol . . .
Anwendungsfall . . . . . .
aktive Klasse . . . . . . .
Komponente . . . . . . . .
Knoten . . . . . . . . . . .
Interaktion . . . . . . . . .
Zustände und Transitionen
Paket . . . . . . . . . . . .
Notiz . . . . . . . . . . .
Abhängigkeit . . . . . . .
Assoziation . . . . . . . .
Generalisierung . . . . . .
Realisierungsbeziehung . .
Anwendungsfalldiagramm
Klassendiagramm . . . . .
Objektdiagramm . . . . .
Sequenzdiagramm . . . . .
Kollaborationsdiagramm .
Zustandsdiagramm . . . .
Aktivitätsdiagramm . . . .
Zusicherung . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
16
16
17
17
17
18
19
19
20
20
21
21
22
22
24
25
26
27
27
28
29
34
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
Paketübersicht des Metamodells
Pakete des Fundaments der UML
Vererbungshierarchie . . . . . .
Link . . . . . . . . . . . . . . .
Backbone . . . . . . . . . . . .
Element . . . . . . . . . . . . .
Namensraum . . . . . . . . . .
Zusicherung . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
36
37
39
42
44
45
46
47
210
211
ABBILDUNGSVERZEICHNIS
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.21
3.22
3.23
3.24
3.25
3.26
3.27
3.28
3.29
3.30
3.31
3.32
3.33
3.34
3.35
3.36
3.37
3.38
3.39
3.40
3.41
3.42
3.43
3.44
3.45
3.46
3.47
3.48
3.49
3.50
verallgemeinerbares Element und Klassifizierer . .
Merkmale . . . . . . . . . . . . . . . . . . . . . .
Parameter . . . . . . . . . . . . . . . . . . . . . .
Klassifizierer . . . . . . . . . . . . . . . . . . . .
Assoziation und Kardinalität . . . . . . . . . . . .
gerichtete Assoziation . . . . . . . . . . . . . . . .
Spezifizierung von Rollen durch Interfaces . . . . .
geordnetes Assoziationsende . . . . . . . . . . . .
Komposition . . . . . . . . . . . . . . . . . . . . .
Aggregation . . . . . . . . . . . . . . . . . . . . .
qualifizierte Assoziation . . . . . . . . . . . . . .
nicht-qualifizierte Assoziation . . . . . . . . . . .
qualifizierte Assoziation . . . . . . . . . . . . . .
Assoziationsklasse . . . . . . . . . . . . . . . . .
Beziehungen . . . . . . . . . . . . . . . . . . . .
Assoziationsende . . . . . . . . . . . . . . . . . .
Ablaufbeziehung . . . . . . . . . . . . . . . . . .
Abhängigkeiten . . . . . . . . . . . . . . . . . . .
Kommentar . . . . . . . . . . . . . . . . . . . . .
Erweiterungsmechanismen . . . . . . . . . . . . .
Datentypen (1) . . . . . . . . . . . . . . . . . . .
Datentypen (2) . . . . . . . . . . . . . . . . . . .
Ausdrücke . . . . . . . . . . . . . . . . . . . . . .
Paketübersicht der Verhaltenselemente . . . . . . .
Signal, Ausnahme und Empfang . . . . . . . . . .
Aktionen . . . . . . . . . . . . . . . . . . . . . .
Sende-Aktion . . . . . . . . . . . . . . . . . . . .
Exemplare und Links . . . . . . . . . . . . . . . .
Link und Stimulus . . . . . . . . . . . . . . . . . .
Sequenzdiagramm . . . . . . . . . . . . . . . . . .
Kollaborationsdiagramm der Spezifikationsebene .
Kollaborationsdiagramm der exemplarischen Ebene
Sequenzdiagramm . . . . . . . . . . . . . . . . . .
Kollaboration . . . . . . . . . . . . . . . . . . . .
Zustandsautomat einer Klimaanlage . . . . . . . .
Metamodell der Ereignisse . . . . . . . . . . . . .
Erinnerungszustände . . . . . . . . . . . . . . . .
Zustand mit nebenläufigen Bereichen . . . . . . .
Metamodell des Zustandsautomaten . . . . . . . .
Aktivitätsdiagramm . . . . . . . . . . . . . . . . .
Aktivitätsdiagramm (Metamodell) . . . . . . . . .
Objektfluß . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
50
52
55
58
58
58
59
60
60
60
61
61
62
63
63
67
68
71
72
76
78
79
81
83
85
87
88
91
93
94
94
97
98
102
103
107
108
109
114
115
117
ABBILDUNGSVERZEICHNIS
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18
4.19
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30
4.31
4.32
4.33
4.34
4.35
4.36
4.37
4.38
4.39
4.40
4.41
4.42
Konsistenz . . . . . . . . . . . . . . . . . . . .
Konsistenz: Beispiel . . . . . . . . . . . . . .
Ein hypothetisches Werkzeug . . . . . . . . . .
Rational Rose 98 . . . . . . . . . . . . . . . .
Rose Extensibility Interface (REI) . . . . . . .
Die Spitze der Klassenhierarchie von Rose . . .
Rose: Diagrammklassen . . . . . . . . . . . .
Rose: Klassendiagramm . . . . . . . . . . . .
Rose: Interaktionsdiagramm . . . . . . . . . .
Rose: Zustandsdiagramm . . . . . . . . . . . .
abstrakte Klasse . . . . . . . . . . . . . . . . .
abstrakte Klasse (Metamodellexemplar) . . . .
abstrakte Klasse (Rose-Metamodellexemplar .
Attribut . . . . . . . . . . . . . . . . . . . . .
Attribut (Metamodellexemplar) . . . . . . . . .
Attribut (Rose-Metamodellexemplar . . . . . .
Operation . . . . . . . . . . . . . . . . . . . .
Operation (Metamodellexemplar) . . . . . . . .
Operation (Rose-Metamodellexemplar . . . . .
Assoziation . . . . . . . . . . . . . . . . . . .
Assoziation (Metamodellexemplar) . . . . . . .
Assoziation (Rose-Metamodellexemplar) . . .
Komposition . . . . . . . . . . . . . . . . . . .
Assoziationsklasse, inkonsistent . . . . . . . .
Generalisierung . . . . . . . . . . . . . . . . .
Generalisierung (Metamodellexemplar) . . . .
Generalisierung (Rose-Metamodellexemplar) .
Interface . . . . . . . . . . . . . . . . . . . . .
Interface (Metamodellexemplar) . . . . . . . .
Interface (Rose-Metamodellexemplar) . . . . .
Realisierung . . . . . . . . . . . . . . . . . . .
Realisierung (Metamodellexemplar) . . . . . .
Realisierung (Rose-Metamodell) . . . . . . . .
Signal . . . . . . . . . . . . . . . . . . . . . .
Spezifizierung von Rollen durch Interfaces . . .
Typen . . . . . . . . . . . . . . . . . . . . . .
Klassifiziererrolle . . . . . . . . . . . . . . . .
„Objektrolle“ . . . . . . . . . . . . . . . . . .
Klassifiziererrolle (Metamodellexemplar 1) . .
Klassifiziererrolle (Metamodellexemplar 2) . .
Assoziationsrolle . . . . . . . . . . . . . . . .
Verwendung von Typen als Klassifiziererrollen
212
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
122
123
126
129
132
135
136
138
139
141
142
143
143
144
145
145
148
148
148
150
151
152
154
155
155
156
156
157
157
158
159
160
160
162
164
164
166
166
166
167
168
168
213
ABBILDUNGSVERZEICHNIS
4.43
4.44
4.45
4.46
4.47
4.48
4.49
4.50
4.51
4.52
4.53
4.54
4.55
4.56
4.57
4.58
4.59
4.60
4.61
4.62
4.63
4.64
4.65
4.66
4.67
4.68
Verwendung von Typen als Rollen für Objekte . . . . . . . .
Assoziations- und Klassifiziererrollen (Metamodellexemplar)
Objekte, Links und Botschaften in Rose (Meta) . . . . . . .
Botschaften und Stimuli . . . . . . . . . . . . . . . . . . .
Botschaft im Kollaborationsdiagramm . . . . . . . . . . . .
Prozedualer Kontrollfluß . . . . . . . . . . . . . . . . . . .
Reihenfolge der Botschaften/Stimuli . . . . . . . . . . . . .
Iteration im Kollaborationsdiagramm . . . . . . . . . . . . .
Interaktion im Sequenzdiagramm . . . . . . . . . . . . . . .
Iteration im Sequenzdiagramm (außerhalb der UML) . . . .
Ereignisse im Metamodell . . . . . . . . . . . . . . . . . .
Die Klasse Event des Rose-Metamodells . . . . . . . . . .
Transition . . . . . . . . . . . . . . . . . . . . . . . . . . .
Transition (Metamodellexemplar) . . . . . . . . . . . . . .
Transition (Rose-Metamodell) . . . . . . . . . . . . . . . .
Zustand . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zustand (Metamodellexemplar) . . . . . . . . . . . . . . . .
Rekursiver Aufbau eines Zustandsautomaten . . . . . . . . .
Zustandsautomat (Beispiel) . . . . . . . . . . . . . . . . . .
nebenläufiger Kompositionszustand . . . . . . . . . . . . .
Die Pseudozustände fork und join . . . . . . . . . . . . . .
Synchronisationszustand . . . . . . . . . . . . . . . . . . .
Stummelzustände . . . . . . . . . . . . . . . . . . . . . . .
Junction-Pseudozustand . . . . . . . . . . . . . . . . . . . .
Choice-Pseudozustand . . . . . . . . . . . . . . . . . . . .
Aufruf eines eingebetteten Zustandsautomaten . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
168
169
171
172
174
176
176
177
178
179
180
181
183
183
184
185
186
187
187
189
190
191
192
193
193
194
5.1
5.2
Auswahldialog: Konsistenzprüfungen . . . . . . . . . . . . . . . . . . . 199
Inkonsistenzdialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Index
Abhängigkeit, 67
Abstraktion, 68
access (Zugriff), 70
Benutzung, 69
derive, 68
friend, 70
import, 70
realize, 68
refine, 68
trace, 68
Abhangigkeit, 20
Erlaubnis, 70
Abstraktion, 67
addOnly, 51
Aktion, 84, 105
Erzeuge-, 86
Nichtinterpretierte, 87
Rückgabe-Aktion, 86
Sende-, 87
Terminiere-, 86
Zerstöre-, 86
Zuweisungs-, 86
Aktionssequenz, 86
Aktionszustand, 116
Aktivitätsdiagramm, 81
Aktivitat, 105
Aktivitatsdiagramm, 26
Anderungs-Ereignis, 104
Anmerkungen, 20
Anwendungsfall, 16
Anwendungsfalldiagramm, 23
Anwendungsfallsicht, 31, 130
association, 91
Assoziation, 57, 62
Assoziationsende, 57, 63
Assoziationsklasse, 62, 65
Attribut, 51
Aufruf
Aktion-, 86
Aufruf-Ereignis, 103
Aufrufzustand, 117
Ausnahme, 83
Automat, 19
Basisklasse, 38
Benutzung, 67
Beziehungen, 20
Bindung, 67
Botschaft, 82
changeable, 51
child, 38
classifier, 51
Codeerzeugung, 120
complete, 66
concurrency, 53
concurrent, 53
Datentyp, 56
AggregationKind, 76
Aufzählung, 76
Boolean, 76
CallConcurrencyKind, 76
ChangeableKind, 76
Integer, 75
MessageDirectionKind, 76
OperationDirectionKind, 76
OrderingKind, 76
ParameterDirectionKind, 76
214
215
primitiver, 75
Programmiersprachentyp, 77
PseudostateKind, 76
String, 75
Struktur, 76
Time, 75
UnlimitedInteger, 75
VisibilityKind, 76
Datenwert, 89
destroyed, 91
Diagramme, 23
direkte Oberklasse, 38
direktes Exemplar, 38
disjoint, 66
Beispiel, 38
Diskriminator, 38, 66
Eigenschaftswert, 34, 72
Einsatzdiagramm, 30
Einsatzsicht, 32, 130
Element, 43
Modell-, 45
Präsentations-, 45
verallgemeinerbares, 47
Empfang, 83
Entwurfssicht, 31
Ereignis, 103
verzogertes, 106
Ereignis-Trigger, 105
Erinnerungszustand
flacher, 106
Erlaubnis, 67
Erweiterung, 38, 40
Erweiterungsmeachnismus, 71
Exemplar, 87
direkt, 38
indirektes, 40
Fachlexikon, 120
frozen, 51
Generalisierung, 21, 38, 66
global, 91
INDEX
guarded, 53
Implementationssicht, 31
in, 54
incomplete, 66
indirektes Exemplar, 40
Inkonsistenzvermeidung, 125
inout, 54
instance, 51
Instantiierung, 41
Interaktion, 18
Interaktionsdiagramm, 23
Interface, 15, 43, 56
Interoperabilitat, 121
Kardinalität, 79
Kind, 38
Klasse, 15, 38, 42, 55
abstrakte, 40
aktive, 17
konkrete, 40
Ober-, 38
Sub-, 38
Super-, 38
Unter-, 38
Klassendiagramm, 23
Klassifizierer, 48
Knoten, 18, 56
Knotenexemplar, 89
Kollaboration, 16, 99
Kollaborationsdiagramm, 25, 80
Kommentar, 20
Komponente, 17, 56
Komponentendiagramm, 30
Komponentenexemplar, 89
Komponentensicht, 31, 130
Konsistenz
Definition, 124
Probleme, 124
Konsistenzprufung, 120, 127
Konsistenzunterstutzung, 127
Link, 90
INDEX
Link-Ende, 90
Linkobjekt, 90
local, 91
logische Sicht, 31, 130
Mehrbenutzerunterstutzung, 120
Merkmal, 49
überschreiben, 40
strukturelles, 51
Verhaltens-, 52
Methode, 43, 54
multiplicity, 51
Nachbedingung, 43
Nachkomme, 38
Namensraum, 46
virtueller, 45
new, 91
Notiz, 20
Oberklasse, 38
Objekt, 89
Objektdiagramm, 23
Objektfluszustand, 117
Operation, 53
Operationsaufruf, 82
out, 54
overlapping, 66
Paket, 19
Paketdiagramm, 137
Parameter, 54
parameter, 91
parent, 38
persistence, 49
Polymorphismus, 40
Prozessicht, 31
Pseudoattribut, 45, 49
Pseudozustand, 111
Qualifikationsangabe, 60
Realisierung, 22
Realisierungssicht, 31
216
return, 54
Reverse-Engineering, 120
self, 91
sequential, 53
Sequenzdiagramm, 23, 80
Sichtbarkeit
Attribut-, 42
Signal, 82
Signal-Ereignis, 103
Signatur, 40
Definition, 52
Spezialisierung, 38
Statechart, 25
statechart, 101
StateVertex, 110
Stereotyp, 33, 71
access, 70
become, 66
call, 70
copy, 66
create, 53, 70, 103
derive, 68
destroy, 53, 103
document, 57
executable, 57
file, 57
friend, 70
implementation, 66
implementationClass, 55
implicit, 62
import, 70
instantiate, 70
invariant, 47
library, 57
metaclass, 49
postcondition, 47
powertyp, 49
precondition, 47
process, 49
realize, 68
refine, 68
217
requirement, 71
responsibility, 71
send, 70
signal, 82
table, 57
thread, 49
trace, 68
type, 55
utility, 49
Stimulus, 82, 90
Subklasse, 38
Substitutionsprinzip, 40
Superklasse, 38
Synchronisationszustand, 112
targetScope, 51
transient, 91
Transition, 105
interne, 105
Trigger, 105
Typ, 54
Attribut-, 42
Unterklasse, 38
Unterzustand, 110
Vererbung, 21, 38
Verteilungsdiagramm, 30
Verteilungssicht, 32
Vorbedingung, 43
Vorfahr, 38
Wachterbedingung, 105
Werkzeug
hypothetisches, 125
Wiederverwendbarkeit, 121
Zeit-Ereignis, 104
Zusicherung, 47, 72, 74
addOnly, 63
frozen, 63
xor, 62
Zusicherungen, 34
INDEX
Zustand, 105
Unterautomaten-, 113
Zustandsautomat, 19, 101, 105
Zustandsdiagramm, 25, 80, 101
Zustandsknoten, 110
Literaturverzeichnis
[Alh98]
Sinan Si Alhir. UML in a Nutshell. A Desktop Quick Reference. O’Reilly,
1998.
[Bal92]
Helmut Balzert. Die Entwicklung von Software-Systemen: Prinzipien, Methoden, Sprachen, Werkzeuge. Reihe Informatik. BI Wissenschaftsverlag, Mannheim; Leipzig; Wien, Zürich, 1992. Das Buchprogramm des Bibliographischen Instituts ist von Spektrum Akademischer Verlag GmbH, Heidelberg,
Berlin, Oxford übernommen worden.
[Bal96]
Helmut Balzert. Lehrbuch der Software-Technik: Software-Entwicklung.
Lehrbücher der Informatik. Spektrum Akademischer Verlag, Heidelberg, Berlin, 1996.
[Bal98]
Helmut Balzert. Lehrbuch der Software-Technik: Software-Management,
Software-Qualitätssicherung, Unternehmensmodellierung. Lehrbücher der Informatik. Spektrum Akademischer Verlag, Heidelberg, Berlin, 1998.
[BRJ99a] Grady Booch, James Rumbaugh, and Ivar Jacobson.
Das UMLBenutzerhandbuch. Professionelle Softwareentwicklung. Addison Wesley,
1999.
[BRJ99b] Grady Booch, James Rumbaugh, and Ivar Jacobson. The Unified Modeling
Language User Guide. Object Technology Series. Addison Wesley, 1999.
[Cet]
Cetus Links. Architecture and Design: Unified Modeling Language (UML).
http://www.rhein-neckar.de/˜cetus/oo_uml.html. Link-Sammlung zum Thema
UML im Web.
[EP98]
Hans-Erik Eriksson and Magnus Penker. UML Toolkit. John Wiley & Sons,
Inc., 1998.
[FS98]
Martin Fowler and Kendal Scott. UML konzentriert. Addison-Wesley, 1998.
[HW98]
Paul Harmon and Mark Watson. Understanding UML: The Developers Guide.
Morgan Kaufmann Publishers, Inc., San Francisco, California, 1998.
218
219
[Oes98]
LITERATURVERZEICHNIS
Bernd Oesterreich. Objektorientierte Softwareentwicklung. Analyse und Design mit der Unified Modeling Language. R. Oldenbourg Verlag, 4. edition,
1998.
[OMG99] OMG (Object Management Group). OMG unified modeling language specification (draft). http://www.omg.org, April 1999. Version 1.3 beta R1.
[Qua98]
Terry Quatrani. Visual Modeling with Rational Rose and UML. Object Technology Series. Addison Wesley, 1998.
[R+ 93]
James Rumbaugh et al. Objektorientiertes Modellieren und Entwerfen. Hanser, 1993.
[Rat98]
Rational Software Cooperation, editor. Rational Rose 98. Extensibility Reference Manual. February 1998. Software Release 1.0.
[Sch91]
Heinrich Schmidt. Philosophisches Wörterbuch. Alfred Kröner Verlag, Stuttgart, 22. edition, 1991.
[Sch95]
Jochen Schwarze. Systementwicklung. Verlag Neue Wirtschaftsbriefe, Herne/Berlin, 1995.