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