Foreword by Peter Freeman xiii Foreword by Bran Selic xv Preface xvii PART I UML NOTATION, DESIGN CONCEPTS, TECHNOLOGY, LIFE CYCLES, AND METHODS 1 Introduction 1.1 Object-Oriented Methods and the Unified Modeling Language 1.2 Method and Notation 1.3 Concurrent Applications 1.4 Real-Time Systems and Applications 1.5 Distributed Systems and Applications 1.6 Summary 2 Overview of UML Notation 2.1 UML Diagrams 2.2 Use Case Diagrams 2.3 UML Notation for Classes and Objects 2.4 Class Diagrams 2.5 Interaction Diagrams 2.6 Statechart Diagrams 2.7 Packages 2.8 Concurrent Collaboration Diagrams 2.9 Deployment Diagrams 2.10 UML Extension Mechanisms 2.11 The UMLas a Standard 2.12 Summary 3 Software Design and Architecture Concepts 3.1 Object-Oriented Concepts 3.2 Information Hiding 3.3 Inheritance 3.4 Active and Passive Objects 3.5 Concurrent Processing 3.6 Cooperation between Concurrent Tasks 3.7 Information Hiding Applied to Access Synchronization 3.8 Monitors 3.9 Design Patterns 3.10 Software Architecture and Component-Based Systems 3.11 Summary 4 Concurrent and Distributed System Technology 4.1 Environments for Concurrent Processing 4.2 Runtime Support for Multiprogramming and Multiprocessing Environments 4.3 Task Scheduling 4.4 Operating System Input/Output Considerations 4.5 Client/Server and Distributed System Technology 4.6 World Wide Web Technology 4.7 Distributed Operating System Services 4.8 Middleware 4.9 Common Object Request Broker Architecture (CORBA) 4.10 Other Component Technologies 4.11 Transaction Processing Systems 4.12 Summary Software Life Cycles and Methods 5.1 Software Life Cycle Approaches 5.2 Design Verification and Validation 5.3 Software Testing 5.4 Evolution of Software Design Methods 5.5 Evolution of Object-Oriented Analysis and Design Methods 5.6 Survey of Concurrent and Real-Time Design Methods 5.7 Summary PART II COMET: CONCURRENT OBJECT MODELING AND ARCHITECTURAL DESIGN WITH UML 6 Overview of COMET 6.1 COMET Object-Oriented Software Life Cycle 6.2 Comparison of the COMET Life Cycle with Other Software Processes 6.3 Requirements, Analysis, and Design Models 6.4 The COMET in a Nutshell 6.5 Summary 7 Use Case Modeling 7.1 Use Cases 7.2 Actors 7.3 Actors, Roles, and Users 7.4 Identifying Use Cases 7.5 Documenting Use Cases in the Use Case Model 7.6 Examples of Use Cases 7.7 Use Case Relationships 7.8 Use Case Packages 7.9 Summary 8 Static Modeling 8.1 Associations between Classes 8.2 Composition and Aggregation Hierarchies 8.3 Generalization/Specialization Hierarchy 8.4 Constraints 8.5 Static Modeling and the UML 8.6 Static Modeling of the System Context 8.7 Static Modeling of Entity Classes 8.8 Summary Object and Class Structuring 9.1 Object Structuring Criteria 9.2 Categorization of Application Classes 9.3 Object Structuring Categories 9.4 External Classes and Interface Classes 9.5 Interface Objects 9.6 Entity Objects 9.7 Control Objects 9.8 Application Logic Objects 9.9 Subsystems 9.10 Summary 10 Finite State Machines and Statecharts 10.1 Finite State Machines 10.2 Events and States 10.3 Finite State Machines and Objects 10.4 Examples of Statecharts 10.5 Events and Conditions 10.6 Actions 10.7 Modeling Different Aspects of the System 10.8 Hierarchical Statecharts 10.9 Concurrent Statecharts 10.10 Guidelines for Developing Statecharts 10.11 Developing Statecharts from Use Cases 10.12 Example of Developing a Statechart from a Use Case 10.13 Summary 11 Dynamic Modeling 11.1 Object Interaction Modeling 11.2 Message Labels on Interaction Diagrams 11.3 Dynamic Analysis 11.4 Non-State-Dependent Dynamic Analysis 11.5 Example of Non-State-Dependent Dynamic Analysis 11.6 State-Dependent Dynamic Analysis 11.7 Example of State-Dependent Dynamic Analysis: Banking System 11.8 Example of State-Dependent Dynamic Analysis: Cruise Control System 11.9 Summary 12 Software Architecture Design 12.1 Software Architectural Styles 12.2 System Decomposition Issues 12.3 Guidelines for Determining Subsystems 12.4 Consolidated Collaboration Diagrams 12.5 Subsystem Software Architecture 12.6 Separation of Concerns in Subsystem Design 12.7 Subsystem Structuring Criteria 12.8 Examples of Subsystem Decomposition 12.9 Static Modeling at the Design Level 12.10 Summary 13 Architectural Design of Distributed Applications 13.1 Configurable Architectures and Software Components 13.2 Steps in Designing Distributed Applications 13.3 System Decomposition 13.4 Designing Subsystem Interfaces 13.5 Transaction Management 13.6 Design of Server Subsystems 13.7 Distribution of Data 13.8 System Configuration 13.9 Summary 14 Task Structuring 14.1 Concurrent Task Structuring Issues 14.2 Task Structuring Categories 14.3 I/O Task Structuring Criteria 14.4 Internal Task Structuring Criteria 14.5 Task Priority Criteria 14.6 Task Clustering Criteria 14.7 Design Restructuring by Using Task Inversion 14.8 Developing the Task Architecture 14.9 Task Communication and Synchronization 14.10 Task Behavior Specifications 14.11 Summary 15 Class Design 15.1 Designing Information Hiding Classes 15.2 Designing Class Operations 15.3 Data Abstraction Classes 15.4 Device Interface Classes 15.5 State-Dependent Classes 15.6 Algorithm Hiding Classes 15.7 User Interface Classes 15.8 Business Logic Classes 15.9 Database Wrapper Classes 15.10 Software Decision Classes 15.11 Inheritance in Design 15.12 Examples of Inheritance 15.13 Class Interface Specifications 15.14 Summary 16 Detailed Software Design 16.1 Design of Composite Tasks 16.2 Synchronization of Access to Classes 16.3 Designing Connectors for Inter-Task Communication 16.4 Task Event Sequencing Logic 16.5 Summary 17 Performance Analysis of Concurrent Real-Time Software Designs 17.1 Real-Time Scheduling Theory 17.2 Advanced Real-Time Scheduling Theory 17.3 Performance Analysis Using Event Sequence Analysis 17.4 Performance Analysis Using Real-Time Scheduling Theory and Event Sequence Analysis 17.5 Example of Performance Analysis Using Event Sequence Analysis 17.6 Example of Performance Analysis Using Real-Time Scheduling Theory 17.7 Example of Performance Analysis Using Real-Time Scheduling Theory and Event Sequence Analysis 17.8 Design Restructuring 17.9 Estimation and Measurement of Performance Parameters 17.10 Summary PART III CASE STUDIES IN CONCURRENT, DISTRIBUTED, AND REAL-TIME APPLICATION DESIGN 18 Elevator Control System Case Study 18.1 Problem Description 18.2 Use Case Model 18.3 Static Model of the Problem Domain 18.4 Object Structuring 18.5 Dynamic Model 18.6 Statechart Model 18.7 Consolidation of Collaboration Diagrams 18.8 Subsystem Structuring 18.9 Structuring System into Tasks 18.10 Design of Distributed Elevator Control System 18.11 Design of Information Hiding Classes 18.12 Developing Detailed Software Design 18.13 Target System Configuration 18.14 Performance Analysis of Non-Distributed Elevator Control System 18.15 Performance Analysis of Distributed Elevator Control System 19 Banking System Case Study 19.1 Problem Description 19.2 Use Case Model 19.3 Static Modeling 19.4 Object Structuring 19.5 Dynamic Modeling 19.6 ATM Statechart 19.7 Design of Banking System 19.8 Consolidating the Collaboration Model 19.9 Structuring the System into Subsystems 19.10 Design of ATM Client Subsystem 19.11 Design of Bank Server Subsystem 19.12 Configuration of Banking System 19.13 Alternative Design Considerations 19.14 Task Behavior Specifications 20 Cruise Control and Monitoring System Case Study 20.1 Problem Description 20.2 Use Case Model 20.3 Use Case Descriptions 20.4 Problem Domain Static Modeling 20.5 Dynamic Modeling 20.6 Subsystem Structuring 20.7 Refined Static Modeling 20.8 Structuring the System into Tasks 20.9 Information Hiding Class Design 20.10 Developing Detailed Software Design 20.11 Software Architecture of Distributed Automobile System 21 Distributed Factory Automation System Case Study 21.1 Problem Description 21.2 Use Case Model 21.3 Conceptual Static Model of the Problem Domain 21.4 Object Structuring 21.5 Dynamic Model 21.6 Subsystem Structuring 21.7 Distributed Software Architecture 21.8 System Configuration 22 Electronic Commerce System Case Study 22.1 Electronic Commerce Problem 22.2 Use Case Model 22.3 Agent Support for Electronic Commerce System 22.4 Object Broker Support for Electronic Commerce System 22.5 Static Modeling of the Problem Domain 22.6 Collaboration Model 22.7 Distributed Software Architecture Appendix A Conventions and Alternative Notations A.1 Conventions Used in This Book A.2 Alternative Notation for Stereotypes A.3 Alternative Notation for Active Objects Glossary Bibliography Index