Book description
“This edition contains Larman’s usual accurate and
thoughtful writing. It is a very good book made even
better.”
—Alistair Cockburn, author, Writing Effective Use
Cases and Surviving OO Projects
“Too few people have a knack for explaining things. Fewer
still have a handle on software analysis and design. Craig Larman
has both.”
—John Vlissides, author, Design Patterns and
Pattern Hatching
“People often ask me which is the best book to introduce
them to the world of OO design. Ever since I came across it
Applying UML and Patterns has been my unreserved
choice.”
—Martin Fowler, author, UML Distilled and
Refactoring
“This book makes learning UML enjoyable and pragmatic by
incrementally introducing it as an intuitive language for
specifying the artifacts of object analysis and design. It is a
well written introduction to UML and object methods by an expert
practitioner.”
—Cris Kobryn, Chair of the UML Revision Task Force and
UML 2.0 Working Group
A brand new edition of the world’s most admired introduction to object-oriented analysis and design with UML
Fully updated for UML 2 and the latest iterative/agile practices
Includes an all-new case study illustrating many of the book’s key points
Applying UML and Patterns is the world’s #1 business and college introduction to “thinking in objects”—and using that insight in real-world object-oriented analysis and design. Building on two widely acclaimed previous editions, Craig Larman has updated this book to fully reflect the new UML 2 standard, to help you master the art of object design, and to promote high-impact, iterative, and skillful agile modeling practices.
Developers and students will learn object-oriented analysis and design (OOA/D) through three iterations of two cohesive, start-to-finish case studies. These case studies incrementally introduce key skills, essential OO principles and patterns, UML notation, and best practices. You won’t just learn UML diagrams—you’ll learn how to apply UML in the context of OO software development.
Drawing on his unsurpassed experience as a mentor and consultant, Larman helps you understand evolutionary requirements and use cases, domain object modeling, responsibility-driven design, essential OO design, layered architectures, “Gang of Four” design patterns, GRASP, iterative methods, an agile approach to the Unified Process (UP), and much more. This edition’s extensive improvements include
A stronger focus on helping you master OOA/D through case studies that demonstrate key OO principles and patterns, while also applying the UML
New coverage of UML 2, Agile Modeling, Test-Driven Development, and refactoring
Many new tips on combining iterative and evolutionary development with OOA/D
Updates for easier study, including new learning aids and graphics
New college educator teaching resources
Guidance on applying the UP in a light, agile spirit, complementary with other iterative methods such as XP and Scrum
Techniques for applying the UML to documenting architectures
A new chapter on evolutionary requirements, and much more
Applying UML and Patterns, Third Edition, is a lucid and practical introduction to thinking and designing with objects—and creating systems that are well crafted, robust, and maintainable.
Table of contents
- Copyright
- Contents by Major Topics
- Foreword
- Preface
-
1. Introduction
- 1. Object-Oriented Analysis and Design
-
2. Iterative, Evolutionary, and Agile
- Introduction
- 2.1. What is the UP? Are Other Methods Complementary?
- 2.2. What is Iterative and Evolutionary Development?
- 2.3. What About the Waterfall Lifecycle?
- 2.4. How to do Iterative and Evolutionary Analysis and Design?
- 2.5. What is Risk-Driven and Client-Driven Iterative Planning?
- 2.6. What are Agile Methods and Attitudes?
- 2.7. What is Agile Modeling?
- 2.8. What is an Agile UP?
- 2.9. Are There Other Critical UP Practices?
- 2.10. What are the UP Phases?
- 2.11. What are the UP Disciplines?
- 2.12. How to Customize the Process? The UP Development Case
- 2.13. You Know You Didn't Understand Iterative Development or the UP When...
- 2.14. History
- 2.15. Recommended Resources
- 3. Case Studies
-
2. Inception
- 4. Inception is Not the Requirements Phase
-
5. Evolutionary Requirements
- Introduction
- 5.1. Definition: Requirements
- 5.2. Evolutionary vs. Waterfall Requirements
- 5.3. What are Skillful Means to Find Requirements?
- 5.4. What are the Types and Categories of Requirements?
- 5.5. How are Requirements Organized in UP Artifacts?
- 5.6. Does the Book Contain Examples of These Artifacts?
- 5.7. Recommended Resources
-
6. Use Cases
- Introduction
- 6.1. Example
- 6.2. Definition: What are Actors, Scenarios, and Use Cases?
- 6.3. Use Cases and the Use-Case Model
- 6.4. Motivation: Why Use Cases?
- 6.5. Definition: Are Use Cases Functional Requirements?
- 6.6. Definition: What are Three Kinds of Actors?
- 6.7. Notation: What are Three Common Use Case Formats?
- 6.8. Example: Process Sale, Fully Dressed Style
- 6.9. What do the Sections Mean?
- 6.10. Notation: Are There Other Formats? A Two-Column Variation
- 6.11. Guideline: Write in an Essential UI-Free Style
- 6.12. Guideline: Write Terse Use Cases
- 6.13. Guideline: Write Black-Box Use Cases
- 6.14. Guideline: Take an Actor and Actor-Goal Perspective
- 6.15. Guideline: How to Find Use Cases
- 6.16. Guideline: What Tests Can Help Find Useful Use Cases?
- 6.17. Applying UML: Use Case Diagrams
- 6.18. Applying UML: Activity Diagrams
- 6.19. Motivation: Other Benefits of Use Cases? Requirements in Context
- 6.20. Example: Monopoly Game
-
6.21. Process: How to Work With Use Cases in Iterative Methods?
- How to Evolve Use Cases and Other Specifications Across the Iterations?
- When Should Various UP Artifact (Including Use Cases) be Created?
- How to Write Use Cases in Inception?
- How to Write Use Cases in Elaboration?
- How to Write Use Cases in Construction?
- Case Study: Use Cases in the NextGen Inception Phase
- 6.22. History
- 6.23. Recommended Resources
-
7. Other Requirements
- Introduction
- Other Requirement Artifacts
- 7.1. How Complete are these Examples?
- 7.2. Guideline: Should We Analyze These Thoroughly During Inception?
- 7.3. Guideline: Should These Artifacts be at the Project Website?
- 7.4. NextGen Example: (Partial) Supplementary Specification
- 7.5. Commentary: Supplementary Specification
- 7.6. NextGen Example: (Partial) Vision
- 7.7. Commentary: Vision
- 7.8. NextGen Example: A (Partial) Glossary
- 7.9. Commentary: Glossary (Data Dictionary)
- 7.10. NextGen Example: Business Rules (Domain Rules)
- 7.11. Commentary: Domain Rules
- 7.12. Process: Evolutionary Requirements in Iterative Methods
- 7.13. Recommended Resources
-
3. Elaboration Iteration 1—Basics
- 8. Iteration 1—Basics
-
9. Domain Models
- Introduction
- 9.1. Example
- 9.2. What is a Domain Model?
- 9.3. Motivation: Why Create a Domain Model?
- 9.4. Guideline: How to Create a Domain Model?
- 9.5. Guideline: How to Find Conceptual Classes?
- 9.6. Example: Find and Draw Conceptual Classes
- 9.7. Guideline: Agile Modeling—Sketching a Class Diagram
- 9.8. Guideline: Agile Modeling—Maintain the Model in a Tool?
- 9.9. Guideline: Report Objects—Include 'Receipt' in the Model?
- 9.10. Guideline: Think Like a Mapmaker; Use Domain Terms
- 9.11. Guideline: How to Model the Unreal World?
- 9.12. Guideline: A Common Mistake with Attributes vs. Classes
- 9.13. Guideline: When to Model with 'Description' Classes?
-
9.14. Associations
- Guideline: When to Show an Association?
- Guideline: Why Should We Avoid Adding Many Associations?
- Perspectives: Will the Associations Be Implemented In Software?
- Applying UML: Association Notation
- Applying UML: Roles
- Applying UML: Multiplicity
- Applying UML: Multiple Associations Between Two Classes
- Guideline: How to Find Associations with a Common Associations List
- 9.15. Example: Associations in the Domain Models
- 9.16. Attributes
- 9.17. Example: Attributes in the Domain Models
- 9.18. Conclusion: Is the Domain Model Correct?
- 9.19. Process: Iterative and Evolutionary Domain Modeling
- 9.20. Recommended Resources
-
10. System Sequence Diagrams
- Introduction
- 10.1. Example: NextGen SSD
- 10.2. What are System Sequence Diagrams?
- 10.3. Motivation: Why Draw an SSD?
- 10.4. Applying UML: Sequence Diagrams
- 10.5. What is the Relationship Between SSDs and Use Cases?
- 10.6. How to Name System Events and Operations?
- 10.7. How to Model SSDs Involving Other External Systems?
- 10.8. What SSD Information to Place in the Glossary?
- 10.9. Example: Monopoly SSD
- 10.10. Process: Iterative and Evolutionary SSDs
- 10.11. History and Recommended Resources
-
11. Operation Contracts
- Introduction
- 11.1. Example
- 11.2. Definition: What are the Sections of a Contract?
- 11.3. Definition: What is a System Operation?
- 11.4. Definition: Postconditions
- 11.5. Example: enterItem Postconditions
- 11.6. Guideline: Should We Update the Domain Model?
- 11.7. Guideline: When Are Contracts Useful?
- 11.8. Guideline: How to Create and Write Contracts
- 11.9. Example: NextGen POS Contracts
- 11.10. Example: Monopoly Contracts
- 11.11. Applying UML: Operations, Contracts, and the OCL
- 11.12. Process: Operation Contracts Within the UP
- 11.13. History
- 11.14. Recommended Resources
- 12. Requirements to Design—Iteratively
-
13. Logical Architecture and UML Package Diagrams
- Introduction
- 13.1. Example
- 13.2. What is the Logical Architecture? And Layers?
- 13.3. What Layers are the Focus in the Case Studies?
- 13.4. What is Software Architecture?
- 13.5. Applying UML: Package Diagrams
-
13.6. Guideline: Design with Layers
- Benefits of Using Layers
- Guideline: Cohesive Responsibilities; Maintain a Separation of Concerns
- Code: Mapping Code Organization to Layers and UML Packages
- Definition: Domain Layer vs. Application Logic Layer; Domain Objects
- Definition: Tiers, Layers, and Partitions
- Guideline: Don't Show External Resources as the Bottom Layer
- 13.7. Guideline: The Model-View Separation Principle
- 13.8. What's the Connection Between SSDs, System Operations, and Layers?
- 13.9. Example: NextGen Logical Architecture and Package Diagram
- 13.10. Example: Monopoly Logical Architecture?
- 13.11. Recommended Resources
-
14. On to Object Design
- Introduction
- 14.1. Agile Modeling and Lightweight UML Drawing
- 14.2. UML CASE Tools
- 14.3. How Much Time Spent Drawing UML Before Coding?
- 14.4. Designing Objects: What are Static and Dynamic Modeling?
- 14.5. The Importance of Object Design Skill over UML Notation Skill
- 14.6. Other Object Design Techniques: CRC Cards
-
15. UML Interaction Diagrams
- Introduction
- 15.1. Sequence and Communication Diagrams
- 15.2. Novice UML Modelers Don't Pay Enough Attention to Interaction Diagrams!
- 15.3. Common UML Interaction Diagram Notation
-
15.4. Basic Sequence Diagram Notation
- Lifeline Boxes and Lifelines
- Messages
- Focus of Control and Execution Specification Bars
- Illustrating Reply or Returns
- Messages to “self” or “this”
- Creation of Instances
- Object Lifelines and Object Destruction
- Diagram Frames in UML Sequence Diagrams
- Looping
- Conditional Messages
- Conditional Messages in UML 1.x Style—Still Useful?
- Mutually Exclusive Conditional Messages
- Iteration Over a Collection
- Nesting of Frames
- How to Relate Interaction Diagrams?
- Messages to Classes to Invoke Static (or Class) Methods
- Polymorphic Messages and Cases
- Asynchronous and Synchronous Calls
-
15.5. Basic Communication Diagram Notation
- Links
- Messages
- Messages to “self” or “this”
- Creation of Instances
- Message Number Sequencing
- Conditional Messages
- Mutually Exclusive Conditional Paths
- Iteration or Looping
- Iteration Over a Collection
- Messages to a Classes to Invoke Static (Class) Methods
- Polymorphic Messages and Cases
- Asynchronous and Synchronous Calls
-
16. UML Class Diagrams
- Introduction
- 16.1. Applying UML: Common Class Diagram Notation
- 16.2. Definition: Design Class Diagram
- 16.3. Definition: Classifier
- 16.4. Ways to Show UML Attributes: Attribute Text and Association Lines
- 16.5. Note Symbols: Notes, Comments, Constraints, and Method Bodies
- 16.6. Operations and Methods
- 16.7. Keywords
- 16.8. Stereotypes, Profiles, and Tags
- 16.9. UML Properties and Property Strings
- 16.10. Generalization, Abstract Classes, Abstract Operations
- 16.11. Dependency
- 16.12. Interfaces
- 16.13. Composition Over Aggregation
- 16.14. Constraints
- 16.15. Qualified Association
- 16.16. Association Class
- 16.17. Singleton Classes
- 16.18. Template Classes and Interfaces
- 16.19. User-Defined Compartments
- 16.20. Active Class
- 16.21. What's the Relationship Between Interaction and Class Diagrams?
-
17. GRASP: Designing Objects with Responsibilities
- 17.1. UML versus Design Principles
- 17.2. Object Design: Example Inputs, Activities, and Outputs
- 17.3. Responsibilities and Responsibility-Driven Design
- 17.4. GRASP: A Methodical Approach to Basic OO Design
- 17.5. What's the Connection Between Responsibilities, GRASP, and UML Diagrams?
- 17.6. What are Patterns?
- 17.7. Where are We Now?
- 17.8. A Short Example of Object Design with GRASP
- 17.9. Applying GRASP to Object Design
- 17.10. Creator
- 17.11. Information Expert (or Expert)
- 17.12. Low Coupling
- 17.13. Controller
- 17.14. High Cohesion
- 17.15. Recommended Resources
-
18. Object Design Examples with GRASP
- Introduction
- 18.1. What is a Use Case Realization?
- 18.2. Artifact Comments
- 18.3. What's Next?
- 18.4. Use Case Realizations for the NextGen Iteration
- 18.5. Use Case Realizations for the Monopoly Iteration
- 18.6. Process: Iterative and Evolutionary Object Design
- 18.7. Summary
- 19. Designing for Visibility
-
20. Mapping Designs to Code
- Introduction
- 20.1. Programming and Iterative, Evolutionary Development
- 20.2. Mapping Designs to Code
- 20.3. Creating Class Definitions from DCDs
- 20.4. Creating Methods from Interaction Diagrams
- 20.5. Collection Classes in Code
- 20.6. Exceptions and Error Handling
- 20.7. Defining the Sale.makeLineItem Method
- 20.8. Order of Implementation
- 20.9. Test-Driven or Test-First Development
- 20.10. Summary of Mapping Designs to Code
- 20.11. Introduction to the NextGen POS Program Solution
- 20.12. Introduction to the Monopoly Program Solution
- 21. Test-Driven Development and Refactoring
- 22. UML Tools and UML as Blueprint
-
4. Elaboration Iteration 2—More Patterns
- 23. Iteration 2—More Patterns
- 24. Quick Analysis Update
- 25. GRASP: More Objects with Responsibilities
-
26. Applying GoF Design Patterns
- Introduction
- 26.1. Adapter (GoF)
- 26.2. Some GRASP Principles as a Generalization of Other Patterns
- 26.3. “Analysis” Discoveries During Design: Domain Model
- 26.4. Factory
- 26.5. Singleton (GoF)
- 26.6. Conclusion of the External Services with Varying Interfaces Problem
- 26.7. Strategy (GoF)
- 26.8. Composite (GoF) and Other Design Principles
- 26.9. Facade (GoF)
- 26.10. Observer/Publish-Subscribe/Delegation Event Model (GoF)
- 26.11. Conclusion
- 26.12. Recommended Resources
-
5. Elaboration Iteration 3—Intermediate Topics
- 27. Iteration 3—Intermediate Topics
- 28. UML Activity Diagrams and Modeling
-
29. UML State Machine Diagrams and Modeling
- Introduction
- 29.1. Example
- 29.2. Definitions: Events, States, and Transitions
- 29.3. How to Apply State Machine Diagrams?
- 29.4. More UML State Machine Diagram Notation
- 29.5. Example: UI Navigation Modeling with State Machines
- 29.6. Example: NextGen Use Case State Machine Diagram
- 29.7. Process: State Machine Diagrams in the UP
- 29.8. Recommended Resources
- 30. Relating Use Cases
-
31. Domain Model Refinement
- Introduction
- 31.1. New Concepts for the NextGen Domain Model
- 31.2. Generalization
- 31.3. Defining Conceptual Superclasses and Subclasses
- 31.4. When to Define a Conceptual Subclass?
- 31.5. When to Define a Conceptual Superclass?
- 31.6. NextGen POS Conceptual Class Hierarchies
- 31.7. Abstract Conceptual Classes
- 31.8. Modeling Changing States
- 31.9. Class Hierarchies and Inheritance in Software
- 31.10. Association Classes
- 31.11. Aggregation and Composition
- 31.12. Time Intervals and Product Prices—Fixing an Iteration 1 “Error”
- 31.13. Association Role Names
- 31.14. Roles as Concepts versus Roles in Associations
- 31.15. Derived Elements
- 31.16. Qualified Associations
- 31.17. Reflexive Associations
- 31.18. Using Packages to Organize the Domain Model
- 31.19. Example: Monopoly Domain Model Refinements
- 32. More SSDs and Contracts
-
33. Architectural Analysis
- Introduction
- 33.1. Process: When Do We Start Architectural Analysis?
- 33.2. Definition: Variation and Evolution Points
- 33.3. Architectural Analysis
- 33.4. Common Steps in Architectural Analysis
- 33.5. The Science: Identification and Analysis of Architectural Factors
- 33.6. Example: Partial NextGen POS Architectural Factor Table
- 33.7. The Art: Resolution of Architectural Factors
- 33.8. Summary of Themes in Architectural Analysis
- 33.9. Process: Iterative Architecture in the UP
- 33.10. Recommended Resources
-
34. Logical Architecture Refinement
- Introduction
- 34.1. Example: NextGen Logical Architecture
- 34.2. Collaborations with the Layers Pattern
- 34.3. Other Layer Pattern Issues
- 34.4. Model-View Separation and “Upward” Communication
- 34.5. Recommended Resources
-
35. Package Design
- Introduction
-
35.1. Package Organization Guidelines
- Guideline: Package Functionally Cohesive Vertical and Horizontal Slices
- Guideline: Package a Family of Interfaces
- Guideline: Package by Work and by Clusters of Unstable Classes
- Guideline: Most Responsible Are Most Stable
- Guideline: Factor out Independent Types
- Guideline: Use Factories to Reduce Dependency on Concrete Packages
- Guideline: No Cycles in Packages
- 35.2. Recommended Resources
-
36. More Object Design with GoF Patterns
- Introduction
- 36.1. Example: NextGen POS
- 36.2. Failover to Local Services; Performance with Local Caching
- 36.3. Handling Failure
- 36.4. Failover to Local Services with a Proxy (GoF)
- 36.5. Designing for Non-Functional or Quality Requirements
- 36.6. Accessing External Physical Devices with Adapters
- 36.7. Abstract Factory (GoF) for Families of Related Objects
- 36.8. Handling Payments with Polymorphism and Do It Myself
- 36.9. Example: Monopoly
- 36.10. Conclusion
-
37. Designing a Persistence Framework with Patterns
- Introduction
- 37.1. The Problem: Persistent Objects
- 37.2. The Solution: A Persistence Service from a Persistence Framework
- 37.3. Frameworks
- 37.4. Requirements for the Persistence Service and Framework
- 37.5. Key Ideas
- 37.6. Pattern: Representing Objects as Tables
- 37.7. UML Data Modeling Profile
- 37.8. Pattern: Object Identifier
- 37.9. Accessing a Persistence Service with a Facade
- 37.10. Mapping Objects: Database Mapper or Database Broker Pattern
- 37.11. Framework Design with the Template Method Pattern
- 37.12. Materialization with the Template Method Pattern
- 37.13. Configuring Mappers with a MapperFactory
- 37.14. Pattern: Cache Management
- 37.15. Consolidating and Hiding SQL Statements in One Class
- 37.16. Transactional States and the State Pattern
- 37.17. Designing a Transaction with the Command Pattern
- 37.18. Lazy Materialization with a Virtual Proxy
- 37.19. How to Represent Relationships in Tables
- 37.20. PersistentObject Superclass and Separation of Concerns
- 37.21. Unresolved Issues
- 38. UML Deployment and Component Diagrams
- 39. Documenting Architecture: UML & the N+1 View Model
-
6. Special Topics
-
40. More on Iterative Development and Agile Project Management
- Introduction
- 40.1. How to Plan an Iteration?
- 40.2. Adaptive versus Predictive Planning
- 40.3. Phase and Iteration Plans
- 40.4. How to Plan Iterations with Use Cases and Scenarios?
- 40.5. The (In)Validity of Early Estimates
- 40.6. Organizing Project Artifacts
- 40.7. You Know You Didn't Understand Iterative Planning When...
- 40.8. Recommended Resources
-
40. More on Iterative Development and Agile Project Management
- Bibliography
- Glossary
- Inside Front Cover
- Praise for Applying UML and Patterns
- Inside Back Cover
Product information
- Title: Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Third Edition
- Author(s):
- Release date: October 2004
- Publisher(s): Pearson
- ISBN: 0131489062
You might also like
book
UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition
Would you like to understand the most important elements of Class diagrams? (See page 35.) Do …
book
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, Second Edition
"People often ask me which is the best book to introduce them to the world of …
book
Designing Data-Intensive Applications, 2nd Edition
Data is at the center of many challenges in system design today. Difficult issues such as …
book
Head First Design Patterns, 2nd Edition
What will you learn from this book? You know you don't want to reinvent the wheel, …