Chapter 1 Introduction 1
1.1 Raising the Level of Abstraction 2
1.2 Executable UML 5
1.3 Making UML Executable 7
1.4 Model Compilers 9
1.5 Model-Driven Architecture 11
1.6 References 12
Chapter 2 Using Executable UML 13
2.1 The System Model 14
2.1.1 Domain Identification 14
2.1.2 Use Cases 16
2.2 Modeling a Single Domain 17
2.1.3 Iterating the System Model 17
2.2.1 Classes 18
2.2.2 State Machines 19
2.2.3 Procedures 22
2.2.4 Iterating the Domain Models 22
Contents 23
Foreword 23
2.2.5 Iterating between System and Domain Modeling 24
2.3 Verification and Execution 25
2.3.1 Model Verification 25
2.3.2 Model Compilation 26
2.3.3 Iterating Verification and Execution 27
2.4 The Big Picture 27
Preface 27
2.5 References 28
Chapter 3 Domains and Bridges 29
3.1 Domains 30
3.1.1 Domain Missions 30
3.1.2 Domain Autonomy 31
3.1.3 Domain Replacement 32
Acknowledgments 33
3.2 Domains and Requirements 33
3.3 Bridges 35
3.4 Aspects and Join Points 38
3.5 Domains and Aspects 39
3.6 References 40
Chapter 4 Use Cases 41
4.1 Basics of Use Cases 42
4.1.1 Actors 42
4.1.2 Use Cases 43
4.1.3 External Signals 45
4.2 Working with Use Cases 47
4.2.1 Single-Domain Use Cases 47
4.2.2 Levels of Use Cases 48
4.2.3 Applying Use Cases 50
4.3 Activity Diagrams 51
4.4 Formalizing Use Cases 53
4.4.1 Preconditions 53
4.4.2 Postconditions 53
4.4.3 Linked Use Cases 54
4.5 Scenarios and Testing 54
4.6 System Modeling 56
4.7 References 56
Chapter 5 Classes and Attributes 57
5.1 Classes 57
5.1.1 Finding Classes 58
5.1.2 Naming Classes 61
5.2 Attributes 64
5.2.1 Finding Attributes 64
5.3.1 Core Data Types 65
5.3.2 Domain-Specific Data Types 65
5.3 Attribute Data Types 65
5.3.3 Using Types 67
5.4 Documenting Classes and Attributes 68
5.4.1 Diagramming Classes and Attributes 68
5.4.2 Class Descriptions 69
5.4.3 Attribute Descriptions 71
5.5 Checking Classes and Attributes 73
5.5.1 Subject-Matter Check 74
5.5.2 Abstraction Checks 74
5.5.3 Attribute Checks 75
5.6 Rules,Rules,Rules 78
5.7 References 79
Chapter 6 Relationships and Associations 81
6.1 Associations 81
6.1.2 Association Meanings 82
6.1.1 Association Names 82
6.1.3 Multiplicity 84
6.2 Association Descriptions 85
6.3 Checking Associations 87
6.3.1 Conditionality 87
6.3.2 Capturing the Correct Classes and Roles 88
6.3.3 Multiple Associations 90
6.4 Association Classes 93
6.5 Generalization and Specialization 95
6.5.1 The Concept of Generalization and Specialization 95
6.5.2 Mutual Exclusion and its Implications 98
6.5.3 Repeated Specialization 99
6.5.4 Multiple Generalization 100
6.5.5 Compound Generalization 103
6.6 Reflexive Associations 103
6.8 References 107
6.7 The Class Model 107
Chapter 7 Class Actions 109
7.1 Object and Attribute Actions 111
7.2 Selection Expressions 112
7.3 Link Actions 114
7.4 Link Object Actions 116
7.5 Generalization Hierarchies 117
7.6 Other Action Languages 119
7.6.1 SMALL 119
7.6.2 TALL 121
7.6.3 Actions and Syntax 122
7.7 References 123
Chapter 8 Constraints 125
8.1 Unique Instance Constraints 125
8.1.1 Single Attribute Identifiers 126
8.1.2 Multiple Attribute Identifiers 129
8.1.3 Multiple Identifiers 131
8.2 Derived Attributes 132
8.3 Referential Constraints 134
8.3.1 Referential Attributes 134
8.3.2 Derived Identifiers 136
8.4 Association Loops 138
8.4.1 Unconstrained Association Loops 139
8.4.2 Redundant Associations 140
8.4.3 Equal Set Constraints 141
8.4.4 Subset Constraints 143
8.5 Constraints Capture Semantics 146
8.6 References 146
Chapter 9 Lifecycles 147
9.1 Concept of a Lifecycle 147
9.2 State Machine 149
9.2.1 Example Class with a State Machine 149
9.2.2 States 151
9.2.3 Events 152
9.2.4 Transitions 153
9.2.5 Procedures 154
9.3 State Transition Table 155
9.3.1 Basics of the State Transition Table 155
9.3.2 Discovering New Transitions 155
9.3.3 Discovering New States and Events 156
9.3.4 Event Ignored and Can't Happen 160
9.4 Creating and Deleting Objects 162
9.4.1 Initial Pseudostates 162
9.4.2 Final Pseudostates 162
9.5 Forming Lifecycles 164
9.6 Lifecycles for Classes 165
9.7 References 167
Chapter 10 Communicating Objects 169
10.1.2 Event Parameters 170
10.1.1 Sending Signals 170
10.1 Signals 170
10.1.3 Signals with Parameters 173
10.1.4 Signals to Self 173
10.1.5 Signals to External Entities 174
10.2 Creating and Deleting Objects 175
10.2.1 Asynchronous Creation and Deletion 175
10.2.2 Synchronous Creation and Deletion 177
10.3 Visualizing Domain Dynamics 178
10.3.1 Collaboration Diagrams 178
10.3.2 Concept of a Execution Trace 180
10.3.3 Sequencing Signals on a Collaboration Diagram 181
10.3.4 Sequence Diagram 182
10.3.5 Applicability 185
10.4 Domain Dynamic 185
Chapter 11 Synchronizing Objects 187
11.1 How to Think about Time 188
11.2 Rules about Signals 189
11.3 Rules about Procedures 191
11.4 Rules about Data Access 192
11.5 Delayed Signals and Time Events 194
11.6 Rules,Rules,Rules 195
11.7 References 195
Chapter 12 Using Lifecycles 197
12.1 Statechart Diagram Construction Techniques 197
12.1.1 Modeling Intention 197
12.1.2 Modeling Progression 200
12.1.3 Simultaneous Signals 202
12.1.4 Distinct Signals 204
12.2 Reworking the Class Diagram 206
12.2.1 Refactoring Behavior 206
12.2.2 Saving Signals in Data 207
12.3 References 212
Chapter 13 Relationship Dynamics 213
13.1 Dynamically Simple Associations 214
13.1.1 Associations without Explicit Lifecycles 214
13.1.2 Dynamic Associations with Association Classes 215
13.2 Associations Involving Competition 217
13.2.1 Competition in the Domain 217
13.2.2 Competition in the Models 219
13.2.3 An Example 220
13.2.4 Multi-Instance Contention 222
13.2.5 Object Selection and Selection Policies 224
13.3 Dynamics in Generalization Hierarchies 225
13.3.1 Superclass State Machines 225
13.3.2 Subclass State Machines 225
13.4 Polymorphic Events and Polymorphic Signals 227
13.5 Reclassification 230
13.6 References 233
13.5.1 Superclass State Machine 233
13.5.2 Subclass State Machines with Reclassification 233
Chapter 14 Domain Dynamics 235
14.1 Partitioning Control 236
14.2 Control Strategies 239
14.2.1 Push and Pull Control 239
14.2.2 The Pivot Point 241
14.2.3 Finding the Pivot 242
14.3 Delegation of Control 244
14.3.1 Hierarchical Delegation 244
14.3.2 Networked Delegation 244
14.3.3 Distributing Control in Associations 246
14.4 Input Conditioning 247
14.4.1 Input Sequencing 248
14.4.2 Distributing the Inputs 250
14.5 Distributed Dynamics 250
14.6 References 251
Chapter 15 Domain Verification 253
15.1 Finding Unit Tests for a Single Use Case 254
15.2 Test Execution 260
15.3 System Tests 263
15.4 Finding Test Cases from the Models 267
15.5 The Verification Gap 268
15.6 References 268
Chapter 16 Model Management 269
16.1 Dividing Large Domains 269
16.2 Subsystems and the Class Diagram 270
16.3 Collaborations between Subsystems 272
16.4 Adjusting Subsystem Partitioning 272
16.5 Model Management 274
Chapter 17 Joining Multiple Domains 275
17.1.2 Generic Service Domains 277
17.1.1 Application User Interface 277
17.1 Kinds of Domains 277
17.1.3 Realized Domains 280
17.2 Anonymous Explicit Bridges 280
17.2.1 External Entities 280
17.2.2 Signals from External Entities 281
17.2.3 Signals to External Entities 283
17.2.4 Bridge Operations 283
17.2.5 Synchronous or Asynchronous Bridging? 284
17.3 Implicit Bridging with Join Points 285
17.3.1 Rationale for Join Points 285
17.3.2 Class-Class Joins 287
17.3.3 Class-Instance Joins 287
17.4 Bridging to the Model Compiler 289
Chapter 18 Model Compilers 291
18.1 Compiling the Models:The Bookstore 292
18.1.1 Mechanisms 293
18.1.2 Archetypes 294
18.1.3 Archetype Language 295
18.2 Model Compilers and the Software Platform 298
18.3 Fit 299
18.4 Buying,Modifying,and Building a Model Compiler 301
18.5 Modeling the Model Compiler as a Domain 302
18.6 References 303
Appendix A Glossary 305
Appendix B Case Study 313
B.1 Subsystem ProductSpecification 314
B.2 Subsystem Ordering 332
B.3 Subsystem Shipping 344
B.4 Domain Data Types 356
B.5 Object Collaboration Diagram 361
Index 363