Foreword
Preface
Acknowledgments
Chapter 1 Introduction
1.1 Raising the Level of Abstraction
1.2 Executable UML
1.3 Making UML Executable
1.4 Model Compilers
1.5 Model-Driven Architecture
1.6 References
Chapter 2 Using Executable UML
2.1 The System Model
2.1.1 Domain Identification
2.1.2 Use Cases
2.1.3 Iterating the System Model
2.2 Modeling a Single Domain
2.2.1 Classes
2.2.2 State Machines
2.2.3 Procedures
2.2.4 Iterating the Domain Models
2.2.5 Iterating between System and Domain Modeling
2.3 Verification and Execution
2.3.1 Model Verification
2.3.2 Model Compilation
2.3.3 Iterating Verification and Execution
2.4 The Big Picture
2.5 References
Chapter 3 Domains and Bridges
3.1 Domains
3.1.1 Domain Missions
3.1.2 Domain Autonomy
3.1.3 Domain Replacement
3.2 Domains and Requirements
3.3 Bridges
3.4 Aspects and Join Points
3.5 Domains and Aspects
3.6 References
Chpater 4 Use Cases
4.1 Basics of Use Cases
4.1.1 Actors
4.1.2 Use Cases
4.1.3 External Signals
4.2 Working with Use Cases
4.2.1 Single-Domain Use Cases
4.2.2 Levels of Use Cases
4.2.3 Applying Use Cases
4.3 Activity Diagrams
4.4 Formalizing Use Cases
4.4.1 Preconditions
4.4.2 Postconditions
4.4.3 Linked Use Cases
4.5 Scenarios and Testing
4.6 System Modeling
4.7 References
Chapter 5 Classes and Attributes
5.1 Classes
5.1.1 Finding Classes
5.1.2 Naming Classes
5.2 Attributes
5.2.1 Finding Attributes
5.3 Attribute Data Types
5.3.1 Core Data Types
5.3.2 Domain-Specific Data Types
5.3.3 Using Types
5.4 Documenting Classes and Attributes
5.4.1 Diagramming Classes and Attributes
5.4.2 Class Descriptions
5.4.3 Attribute Descriptions
5.5 Checking Classes and Attributes
5.5.1 Subject-Matter Check
5.5.2 Abstraction Checks
5.5.3 Attribute Checks
5.6 Rules, Rules, Rules
5.7 References
Chapter 6 Relationships and Associations
6.1 Associations
6.1.1 Association Names
6.1.2 Association Meanings
6.1.3 Multiplicity
6.2 Association Descriptions
6.3 Checking Associations
6.3.1 Conditionality
6.3.2 Capturing the Correct Classes and Roles
6.3.3 Multiple Associations
6.4 Association Classes
6.5 Generalization and Specialization
6.5.1 The Concept of Generalization and Specialization
6.5.2 Mutual Exclusion and its Implications
6.5.3 Repeated Specialization
6.5.4 Multiple Generalization
6.5.5 Compound Generalization
6.6 Reflexive Associations
6.7 The Class Model
6.8 References
Chapter 7 Class Actions
7.1 Object and Attribute Actions
7.2 Selection Expressions
7.3 Link Actions
7.4 Link Object Actions
7.5 Generalization Hierarchies
7.6 Other Action Languages
7.6.1 Small
7.6.2 Tall
7.6.3 Actions and Syntax
7.7 References
Chapter 8 Constraints
8.1 Unique Instance Constraints
8.1.1 Single Attribute Identifiers
8.1.2 Multiple Attribute Identifiers
8.1.3 Multiple Identifiers
8.2 Derived Attributes
8.3 Referential Constraints
8.3.1 Referential Attributes
8.3.2 Derived Identifiers
8.4 Association Loops
8.4.1 Unconstrained Association Loops
8.4.2 Redundant Associations
8.4.3 Equal Set Constraints
8.4.4 Subset Constraints
8.5 Constraints Capture Semantics
8.6 References
Chapter 9 Lifecycles
9.1 Concept of a Lifecycle
9.2 State Machine
9.2.1 Example Class with a State Machine
9.2.2 States
9.2.3 Events
9.2.4 Transitions
9.2.5 Procedures
9.3 State Transition Table
9.3.1 Basics of the State Transition Table
9.3.2 Discovering New Transitions
9.3.3 Discovering New States and Events
9.3.4 Event Ignored and Can't Happen
9.4 Creating and Deleting Objects
9.4.1 Initial Pseudostates
9.4.2 Final Pseudostates
9.5 Forming Lifecycles
9.6 Lifecycles for Classes
9.7 References
Chapter 10 Communicating Objects
10.1 Signals
10.1.1 Sending Signals
10.1.2 Event Parameters
10.1.3 Signals with Parameters
10.1.4 Signals to Self
10.1.5 Signals to External Entities
10.2 Creating and Deleting Objects
10.2.1 Asynchronous Creation and Deletion
10.2.2 Synchronous Creation and Deletion
10.3 Visualizing Domain Dynamics
10.3.1 Collaboration Diagrams
10.3.2 Concept of a Execution Trace
10.3.3 Sequencing Signals on a Collaboration Diagram
10.3.4 Sequence Diagram
10.3.5 Applicability
10.4 Domain Dynamics
Chapter 11 Synchronizing Objects
11.1 How to Think about Time
11.2 Rules about Signals
11.3 Rules about Procedures
11.4 Rules about Data Access
11.5 Delayed Signals and Time Events
11.6 Rules, Rules, Rules
11.7 References
Chapter 12 Using Lifecycles
12.1 Statechart Diagram Construction Techniques
12.1.1 Modeling Intention
12.1.2 Modeling Progression
12.1.3 Simultaneous Signals
12.1.4 Distinct Signals
12.2 Reworking the Class Diagram
12.2.1 Refactoring Behavior
12.2.2 Saving Signals in Data
12.3 References
Chapter 13 Relationship Dynamics
13.1 Dynamically Simple Associations
13.1.1 Associations without Explicit Lifecycles
13.1.2 Dynamic Associations with Association Classes
13.2 Associations Involving Competition
13.2.1 Competition in the Domain
13.2.2 Competition in the Models
13.2.3 An Example
13.2.4 Multi-Instance Contention
13.2.5 Object Selection and Selection Policies
13.3 Dynamics in Generalization Hierarchies
13.3.1 Superclass State Machines
13.3.2 Subclass State Machines
13.4 Polymorphic Events and Polymorphic Signals
13.5 Reclassification
13.5.1 Superclass State Machine
13.5.2 Subclass State Machines with Reclassification
13.6 References
Chapter 14 Domain Dynamics
14.1 Partitioning Control
14.2 Control Strategies
14.2.1 Push and Pull Control
14.2.2 The Pivot Point
14.2.3 Finding the Pivot
14.3 Delegation of Control
14.3.1 Hierarchical Delegation
14.3.2 Networked Delegation
14.3.3 Distributing Control in Associations
14.4 Input Conditioning
14.4.1 Input Sequencing
14.4.2 Distributing the Inputs
14.5 Distributed Dynamics
14.6 References
Chapter 15 Domain Verification
15.1 Finding Unit Tests for a Single Use Case
15.2 Test Execution
15.3 System Tests
15.4 Finding Test Cases from the Models
15.5 The Verification Gap
15.6 References
Chapter 16 Model Management
16.1 Dividing Large Domains
16.2 Subsystems and the Class Diagram
16.3 Collaborations between Subsystems
16.4 Adjusting Subsystem Partitioning
16.5 Model Management
Chapter 17 Joining Multiple Domains
17.1 Kinds of Domains
17.1.1 Application User Interface
17.1.2 Generic Service Domains
17.1.3 Realized Domains
17.2 Anonymous Explicit Bridges
17.2.1 External Entities
17.2.2 Signals from External Entities
17.2.3 Signals to External Entities
17.2.4 Bridge Operations
17.2.5 Synchronous or Asynchronous Bridging?
17.3 Implicit Bridging with Join Points
17.3.1 Rationale for Join Points
17.3.2 Class-Class Joins
17.3.3 Class-Instance Joins
17.4 Bridging to the Model Compiler
Chapter 18 Model Compilers
18.1 Compiling the Models: The Bookstore
18.1.1 Mechanisms
18.1.2 Archetypes
18.1.3 Archetype Language
18.2 Model Compilers and the Software Platform
18.3 Fit
18.4 Buying, Modifying, and Building a Model Compiler
18.5 Modeling the Model Compiler as a Domain
18.6 References
Appendix AGlossary
Appendix BCase Study
B.1 Subsystem ProductSpecification
B.2 Subsystem Ordering
B.3 Subsystem Shipping
B.4 Domain Data Types
B.5 Object Collaboration Diagram
Index