Intended Audiencean Introduction!
Enhancements to the Previous Edition
Chapter 1. Object-Oriented Analysis and Design
Section 1.1. What Will You Learn? Is it Useful?
Section 1.2. The Most Important Learning Goal?
Section 1.3. What is Analysis and Design?
Section 1.4. What is Object-Oriented Analysis and Design?
Section 1.7. Visual Modeling is a Good Thing
Section 1.9. Recommended Resources
Chapter 2. Iterative, Evolutionary, and Agile
Section 2.1. What is the UP? Are Other Methods Complementary?
Section 2.2. What is Iterative and Evolutionary Development?
Section 2.3. What About the Waterfall Lifecycle?
Section 2.4. How to do Iterative and Evolutionary Analysis and Design?
Section 2.5. What is Risk-Driven and Client-Driven Iterative Planning?
Section 2.6. What are Agile Methods and Attitudes?
Section 2.7. What is Agile Modeling?
Section 2.8. What is an Agile UP?
Section 2.9. Are There Other Critical UP Practices?
Section 2.10. What are the UP Phases?
Section 2.11. What are the UP Disciplines?
Section 2.12. How to Customize the Process? The UP Development Case
Section 2.13. You Know You Didn't Understand Iterative Development or the UP When...
Section 2.15. Recommended Resources
Section 3.1. What is and isn't Covered in the Case Studies?
Section 3.2. Case Study Strategy: Iterative Development + Iterative Learning
Section 3.3. Case One: The NextGen POS System
Section 3.4. Case Two: The Monopoly Game System
Chapter 4. Inception is Not the Requirements Phase
Section 4.1. What is Inception?
Section 4.2. How Long is Inception?
Section 4.3. What Artifacts May Start in Inception?
Section 4.4. You Know You Didn't Understand Inception When...
Section 4.5. How Much UML During Inception?
Chapter 5. Evolutionary Requirements
Section 5.1. Definition: Requirements
Section 5.2. Evolutionary vs. Waterfall Requirements
Section 5.3. What are Skillful Means to Find Requirements?
Section 5.4. What are the Types and Categories of Requirements?
Section 5.5. How are Requirements Organized in UP Artifacts?
Section 5.6. Does the Book Contain Examples of These Artifacts?
Section 5.7. Recommended Resources
Section 6.2. Definition: What are Actors, Scenarios, and Use Cases?
Section 6.3. Use Cases and the Use-Case Model
Section 6.4. Motivation: Why Use Cases?
Section 6.5. Definition: Are Use Cases Functional Requirements?
Section 6.6. Definition: What are Three Kinds of Actors?
Section 6.7. Notation: What are Three Common Use Case Formats?
Section 6.8. Example: Process Sale, Fully Dressed Style
Section 6.9. What do the Sections Mean?
Section 6.10. Notation: Are There Other Formats? A Two-Column Variation
Section 6.11. Guideline: Write in an Essential UI-Free Style
Section 6.12. Guideline: Write Terse Use Cases
Section 6.13. Guideline: Write Black-Box Use Cases
Section 6.14. Guideline: Take an Actor and Actor-Goal Perspective
Section 6.15. Guideline: How to Find Use Cases
Section 6.16. Guideline: What Tests Can Help Find Useful Use Cases?
Section 6.17. Applying UML: Use Case Diagrams
Section 6.18. Applying UML: Activity Diagrams
Section 6.19. Motivation: Other Benefits of Use Cases? Requirements in Context
Section 6.20. Example: Monopoly Game
Section 6.21. Process: How to Work With Use Cases in Iterative Methods?
Section 6.23. Recommended Resources
Section 7.1. How Complete are these Examples?
Section 7.2. Guideline: Should We Analyze These Thoroughly During Inception?
Section 7.3. Guideline: Should These Artifacts be at the Project Website?
Section 7.4. NextGen Example: (Partial) Supplementary Specification
Section 7.5. Commentary: Supplementary Specification
Section 7.6. NextGen Example: (Partial) Vision
Section 7.7. Commentary: Vision
Section 7.8. NextGen Example: A (Partial) Glossary
Section 7.9. Commentary: Glossary (Data Dictionary)
Section 7.10. NextGen Example: Business Rules (Domain Rules)
Section 7.11. Commentary: Domain Rules
Section 7.12. Process: Evolutionary Requirements in Iterative Methods
Section 7.13. Recommended Resources
Part 3. Elaboration Iteration 1 Basics
Section 8.1. Iteration 1 Requirements and Emphasis: Core OOA/D Skills
Section 8.2. Process: Inception and Elaboration
Section 8.3. Process: Planning the Next Iteration
Section 9.2. What is a Domain Model?
Section 9.3. Motivation: Why Create a Domain Model?
Section 9.4. Guideline: How to Create a Domain Model?
Section 9.5. Guideline: How to Find Conceptual Classes?
Section 9.6. Example: Find and Draw Conceptual Classes
Section 9.7. Guideline: Agile ModelingSketching a Class Diagram
Section 9.8. Guideline: Agile ModelingMaintain the Model in a Tool?
Section 9.9. Guideline: Report ObjectsInclude 'Receipt' in the Model?
Section 9.10. Guideline: Think Like a Mapmaker; Use Domain Terms
Section 9.11. Guideline: How to Model the Unreal World?
Section 9.12. Guideline: A Common Mistake with Attributes vs. Classes
Section 9.13. Guideline: When to Model with 'Description' Classes?
Section 9.15. Example: Associations in the Domain Models
Section 9.17. Example: Attributes in the Domain Models
Section 9.18. Conclusion: Is the Domain Model Correct?
Section 9.19. Process: Iterative and Evolutionary Domain Modeling
Section 9.20. Recommended Resources
Chapter 10. System Sequence Diagrams
Section 10.1. Example: NextGen SSD
Section 10.2. What are System Sequence Diagrams?
Section 10.3. Motivation: Why Draw an SSD?
Section 10.4. Applying UML: Sequence Diagrams
Section 10.5. What is the Relationship Between SSDs and Use Cases?
Section 10.6. How to Name System Events and Operations?
Section 10.7. How to Model SSDs Involving Other External Systems?
Section 10.8. What SSD Information to Place in the Glossary?
Section 10.9. Example: Monopoly SSD
Section 10.10. Process: Iterative and Evolutionary SSDs
Section 10.11. History and Recommended Resources
Chapter 11. Operation Contracts
Section 11.2. Definition: What are the Sections of a Contract?
Section 11.3. Definition: What is a System Operation?
Section 11.4. Definition: Postconditions
Section 11.5. Example: enterItem Postconditions
Section 11.6. Guideline: Should We Update the Domain Model?
Section 11.7. Guideline: When Are Contracts Useful?
Section 11.8. Guideline: How to Create and Write Contracts
Section 11.9. Example: NextGen POS Contracts
Section 11.10. Example: Monopoly Contracts
Section 11.11. Applying UML: Operations, Contracts, and the OCL
Section 11.12. Process: Operation Contracts Within the UP
Section 11.14. Recommended Resources
Chapter 12. Requirements to DesignIteratively
Section 12.1. Iteratively Do the Right Thing, Do the Thing Right
Section 12.2. Provoking Early Change
Section 12.3. Didn't All That Analysis and Modeling Take Weeks To Do?
Chapter 13. Logical Architecture and UML Package Diagrams
Section 13.2. What is the Logical Architecture? And Layers?
Section 13.3. What Layers are the Focus in the Case Studies?
Section 13.4. What is Software Architecture?
Section 13.5. Applying UML: Package Diagrams
Section 13.6. Guideline: Design with Layers
Section 13.7. Guideline: The Model-View Separation Principle
Section 13.8. What's the Connection Between SSDs, System Operations, and Layers?
Section 13.9. Example: NextGen Logical Architecture and Package Diagram
Section 13.10. Example: Monopoly Logical Architecture?
Section 13.11. Recommended Resources
Chapter 14. On to Object Design
Section 14.1. Agile Modeling and Lightweight UML Drawing
Section 14.3. How Much Time Spent Drawing UML Before Coding?
Section 14.4. Designing Objects: What are Static and Dynamic Modeling?
Section 14.5. The Importance of Object Design Skill over UML Notation Skill
Section 14.6. Other Object Design Techniques: CRC Cards
Chapter 15. UML Interaction Diagrams
Section 15.1. Sequence and Communication Diagrams
Section 15.2. Novice UML Modelers Don't Pay Enough Attention to Interaction Diagrams!
Section 15.3. Common UML Interaction Diagram Notation
Section 15.4. Basic Sequence Diagram Notation
Section 15.5. Basic Communication Diagram Notation
Chapter 16. UML Class Diagrams
Section 16.1. Applying UML: Common Class Diagram Notation
Section 16.2. Definition: Design Class Diagram
Section 16.3. Definition: Classifier
Section 16.4. Ways to Show UML Attributes: Attribute Text and Association Lines
Section 16.5. Note Symbols: Notes, Comments, Constraints, and Method Bodies
Section 16.6. Operations and Methods
Section 16.8. Stereotypes, Profiles, and Tags
Section 16.9. UML Properties and Property Strings
Section 16.10. Generalization, Abstract Classes, Abstract Operations
Section 16.13. Composition Over Aggregation
Section 16.15. Qualified Association
Section 16.16. Association Class
Section 16.17. Singleton Classes
Section 16.18. Template Classes and Interfaces
Section 16.19. User-Defined Compartments
Section 16.21. What's the Relationship Between Interaction and Class Diagrams?
Chapter 17. GRASP: Designing Objects with Responsibilities
Section 17.1. UML versus Design Principles
Section 17.2. Object Design: Example Inputs, Activities, and Outputs
Section 17.3. Responsibilities and Responsibility-Driven Design
Section 17.4. GRASP: A Methodical Approach to Basic OO Design
Section 17.5. What's the Connection Between Responsibilities, GRASP, and UML Diagrams?
Section 17.6. What are Patterns?
Section 17.7. Where are We Now?
Section 17.8. A Short Example of Object Design with GRASP
Section 17.9. Applying GRASP to Object Design
Section 17.11. Information Expert (or Expert)
Section 17.15. Recommended Resources
Chapter 18. Object Design Examples with GRASP
Section 18.1. What is a Use Case Realization?
Section 18.2. Artifact Comments
Section 18.4. Use Case Realizations for the NextGen Iteration
Section 18.5. Use Case Realizations for the Monopoly Iteration
Section 18.6. Process: Iterative and Evolutionary Object Design
Chapter 19. Designing for Visibility
Section 19.1. Visibility Between Objects
Section 19.2. What is Visibility?
Chapter 20. Mapping Designs to Code
Section 20.1. Programming and Iterative, Evolutionary Development
Section 20.2. Mapping Designs to Code
Section 20.3. Creating Class Definitions from DCDs
Section 20.4. Creating Methods from Interaction Diagrams
Section 20.5. Collection Classes in Code
Section 20.6. Exceptions and Error Handling
Section 20.7. Defining the Sale.makeLineItem Method
Section 20.8. Order of Implementation
Section 20.9. Test-Driven or Test-First Development
Section 20.10. Summary of Mapping Designs to Code
Section 20.11. Introduction to the NextGen POS Program Solution
Section 20.12. Introduction to the Monopoly Program Solution
Chapter 21. Test-Driven Development and Refactoring
Section 21.1. Test-Driven Development
Section 21.3. Recommended Resources
Part 4. Elaboration Iteration 2 More Patterns
Chapter 22. UML Tools and UML as Blueprint
Section 22.1. Forward, Reverse, and Round-Trip Engineering
Section 22.2. What is a Common Report of Valuable Features?
Section 22.3. What to Look For in a Tool?
Section 22.4. If Sketching UML, How to Update the Diagrams After Coding?
Section 22.5. Recommended Resources
Chapter 23. Quick Analysis Update
Section 23.1. Case Study: NextGen POS
Section 23.2. Case Study: Monopoly
Chapter 24. Iteration 2More Patterns
Section 24.1. From Iteration 1 to 2
Section 24.2. Iteration-2 Requirements and Emphasis: Object Design and Patterns
Chapter 25. GRASP: More Objects with Responsibilities
Section 25.2. Pure Fabrication
Section 25.4. Protected Variations
Chapter 26. Applying GoF Design Patterns
Section 26.2. Some GRASP Principles as a Generalization of Other Patterns
Section 26.3. "Analysis" Discoveries During Design: Domain Model
Section 26.6. Conclusion of the External Services with Varying Interfaces Problem
Section 26.8. Composite (GoF) and Other Design Principles
Section 26.10. Observer/Publish-Subscribe/Delegation Event Model (GoF)
Section 26.12. Recommended Resources
Part 5. Elaboration Iteration 3 Intermediate Topics
Chapter 27. Iteration 3Intermediate Topics
Chapter 28. UML Activity Diagrams and Modeling
Section 28.2. How to Apply Activity Diagrams?
Section 28.3. More UML Activity Diagram Notation
Section 28.5. Example: NextGen Activity Diagram
Section 28.6. Process: Activity Diagrams in the UP
Chapter 29. UML State Machine Diagrams and Modeling
Section 29.2. Definitions: Events, States, and Transitions
Section 29.3. How to Apply State Machine Diagrams?
Section 29.4. More UML State Machine Diagram Notation
Section 29.5. Example: UI Navigation Modeling with State Machines
Section 29.6. Example: NextGen Use Case State Machine Diagram
Section 29.7. Process: State Machine Diagrams in the UP
Section 29.8. Recommended Resources
Chapter 30. Relating Use Cases
Section 30.1. The include Relationship
Section 30.2. Terminology: Concrete, Abstract, Base, and Addition Use Cases
Section 30.3. The extend Relationship
Section 30.4. The generalize Relationship
Section 30.5. Use Case Diagrams
Chapter 31. More SSDs and Contracts
Chapter 32. Domain Model Refinement
Section 32.1. New Concepts for the NextGen Domain Model
Section 32.3. Defining Conceptual Superclasses and Subclasses
Section 32.4. When to Define a Conceptual Subclass?
Section 32.5. When to Define a Conceptual Superclass?
Section 32.6. NextGen POS Conceptual Class Hierarchies
Section 32.7. Abstract Conceptual Classes
Section 32.8. Modeling Changing States
Section 32.9. Class Hierarchies and Inheritance in Software
Section 32.10. Association Classes
Section 32.11. Aggregation and Composition
Section 32.12. Time Intervals and Product PricesFixing an Iteration 1 "Error"
Section 32.13. Association Role Names
Section 32.14. Roles as Concepts versus Roles in Associations
Section 32.15. Derived Elements
Section 32.16. Qualified Associations
Section 32.17. Reflexive Associations
Section 32.18. Using Packages to Organize the Domain Model
Section 32.19. Example: Monopoly Domain Model Refinements
Chapter 33. Architectural Analysis
Section 33.1. Process: When Do We Start Architectural Analysis?
Section 33.2. Definition: Variation and Evolution Points
Section 33.3. Architectural Analysis
Section 33.4. Common Steps in Architectural Analysis
Section 33.5. The Science: Identification and Analysis of Architectural Factors
Section 33.6. Example: Partial NextGen POS Architectural Factor Table
Section 33.7. The Art: Resolution of Architectural Factors
Section 33.8. Summary of Themes in Architectural Analysis
Section 33.9. Process: Iterative Architecture in the UP
Section 33.10. Recommended Resources
Chapter 34. Logical Architecture Refinement
Section 34.1. Example: NextGen Logical Architecture
Section 34.2. Collaborations with the Layers Pattern
Section 34.3. Other Layer Pattern Issues
Section 34.4. Model-View Separation and "Upward" Communication
Section 34.5. Recommended Resources
Chapter 35. More Object Design with GoF Patterns
Section 35.1. Example: NextGen POS
Section 35.2. Failover to Local Services; Performance with Local Caching
Section 35.3. Handling Failure
Section 35.4. Failover to Local Services with a Proxy (GoF)
Section 35.5. Designing for Non-Functional or Quality Requirements
Section 35.6. Accessing External Physical Devices with Adapters
Section 35.7. Abstract Factory (GoF) for Families of Related Objects
Section 35.8. Handling Payments with Polymorphism and Do It Myself
Section 35.9. Example: Monopoly
Section 36.1. Package Organization Guidelines
Section 36.2. Recommended Resources
Chapter 37. UML Deployment and Component Diagrams
Section 37.1. Deployment Diagrams
Section 37.2. Component Diagrams
Chapter 38. Designing a Persistence Framework with Patterns
Section 38.1. The Problem: Persistent Objects
Section 38.2. The Solution: A Persistence Service from a Persistence Framework
Section 38.4. Requirements for the Persistence Service and Framework
Section 38.6. Pattern: Representing Objects as Tables
Section 38.7. UML Data Modeling Profile
Section 38.8. Pattern: Object Identifier
Section 38.9. Accessing a Persistence Service with a Facade
Section 38.10. Mapping Objects: Database Mapper or Database Broker Pattern
Section 38.11. Framework Design with the Template Method Pattern
Section 38.12. Materialization with the Template Method Pattern
Section 38.13. Configuring Mappers with a MapperFactory
Section 38.14. Pattern: Cache Management
Section 38.15. Consolidating and Hiding SQL Statements in One Class
Section 38.16. Transactional States and the State Pattern
Section 38.17. Designing a Transaction with the Command Pattern
Section 38.18. Lazy Materialization with a Virtual Proxy
Section 38.19. How to Represent Relationships in Tables
Section 38.20. PersistentObject Superclass and Separation of Concerns
Section 38.21. Unresolved Issues
Chapter 39. Documenting Architecture: UML & the N+1 View Model
Section 39.1. The SAD and Its Architectural Views
Section 39.2. Notation: The Structure of a SAD
Section 39.3. Example: A NextGen POS SAD
Section 39.4. Example: A Jakarta Struts SAD
Section 39.5. Process: Iterative Architectural Documentation
Section 39.6. Recommended Resources
Chapter 40. More on Iterative Development and Agile Project Management
Section 40.1. How to Plan an Iteration?
Section 40.2. Adaptive versus Predictive Planning
Section 40.3. Phase and Iteration Plans
Section 40.4. How to Plan Iterations with Use Cases and Scenarios?
Section 40.5. The (In)Validity of Early Estimates
Section 40.6. Organizing Project Artifacts
Section 40.7. You Know You Didn't Understand Iterative Planning When…