Cover 1 Title 5 Copyright 6 Contents 9 Acknowledgments 19 Foreword 21 Preface 23 About the Author 27 Chapter 1 Leading-Edge Software Development 29 1.1 Modern Development Technologies 30 1.1.1 Object Technology 30 1.1.2 Extensible Markup Language (XML) 33 1.1.3 Relational Database (RDB) Technology 34 1.1.4 Web Services 35 1.2 Modern Development Techniques 36 1.2.1 Agile Software Development 37 1.2.2 Unified Modeling Language (UML) 39 1.2.3 The Unified Process (UP) 41 1.2.4 Model-Driven Architecture (MDA) 42 1.2.5 Using Them Together 43 1.3 The Organization of This Book 44 1.4 The Case Studies 47 1.4.1 The Bank Case Study 48 1.5 What You Have Learned 50 Chapter 2 Understanding the Basics–Object-Oriented Concepts 51 2.1 A Brief Overview of OO Concepts 52 2.2 OO Concepts from a Structured Point of View 55 2.3 The Diagrams of UML 2 56 2.4 Objects and Classes 56 2.5 Attributes and Operations/Methods 60 2.6 Abstraction, Encapsulation, and Information Hiding 62 2.6.1 Abstraction 62 2.6.2 Encapsulation 62 2.6.3 Information Hiding 63 2.6.4 An Example 63 2.7 Inheritance 65 2.7.1 Modeling Inheritance 66 2.7.2 Inheritance Tips and Techniques 67 2.7.3 Single and Multiple Inheritance 68 2.7.4 Abstract and Concrete Classes 71 2.8 Persistence 71 2.9 Relationships 72 2.9.1 Associations 73 2.9.2 Modeling the Unknown 76 2.9.3 How Associations Are Implemented 77 2.9.4 Properties 78 2.9.5 Aggregation and Composition 78 2.9.6 Dependencies 80 2.10 Collaboration 82 2.11 Coupling 85 2.12 Cohesion 86 2.13 Polymorphism 87 2.13.1 An Example: The Poker Game 87 2.13.2 Polymorphism at the University 88 2.14 Interfaces 90 2.15 Components 91 2.16 Patterns 93 2.17 What You Have Learned 94 2.18 Review Questions 95 Chapter 3 Full Lifecycle Object-Oriented Testing (FLOOT) 96 3.1 The Cost of Change 97 3.2 Testing Philosophies 102 3.3 Full Lifecycle Object-Oriented Testing (FLOOT) 103 3.4 Regression Testing 106 3.5 Quality Assurance 107 3.6 Testing Your Models 108 3.6.1 Proving It with Code 108 3.6.2 Usage Scenario Testing 109 3.6.3 Prototype Reviews/Walkthroughs 112 3.6.4 User-Interface Testing 113 3.6.5 Model Reviews 113 3.6.6 When to Use Each Technique 115 3.7 Testing Your Code 116 3.7.1 Testing Terminology 116 3.7.2 Testing Tools 117 3.7.3 Traditional Code Testing Concepts 117 3.7.4 Object-Oriented Testing Techniques 120 3.7.5 Code Inspections 122 3.8 Testing Your System in Its Entirety 123 3.9 Testing by Users 124 3.10 Test-Driven Development (TDD) 125 3.11 What You Have Learned 127 3.12 Review Questions 127 Chapter 4 Agile Model–Driven Development (AMDD) 129 4.1 Modeling Philosophies 130 4.2 Project Stakeholders 134 4.3 What Is Agile Modeling (AM)? 135 4.4 The Values of AM 136 4.5 The Principles of AM 137 4.6 The Practices of AM 137 4.7 Easing into Agile Modeling 137 4.8 Agile Model–Driven Development (AMDD) 146 4.8.1 How is AMDD Different? 148 4.9 Fundamental Information Gathering Skills 149 4.9.1 Interviewing 149 4.9.2 Observation 151 4.9.3 Brainstorming 151 4.10 Agile Documentation 152 4.11 Making Whiteboards Work for Software Development 153 4.12 AMDD and Other Agile Methodologies 157 4.13 Agile Modeling and Test-Driven Development (TDD) 157 4.14 What You Have Learned 159 4.15 Review Questions 159 Chapter 5 Usage Modeling 161 5.1 Use Case Modeling 161 5.1.1 Starting Agile 163 5.1.2 Essential Use Case Diagrams 166 5.1.3 Identifying Actors 173 5.1.4 Writing an Essential Use Case 176 5.1.5 Identifying Use Cases 178 5.1.6 System Use Case Diagrams 180 5.1.7 System Use Cases 180 5.1.8 Writing Alternate Courses of Action 187 5.1.9 Other Use Case Styles 190 5.1.10 Comparing Essential and System Use Cases 191 5.1.11 Reuse in Use Case Models: , , and Inheritance 194 5.1.12 Packages 199 5.1.13 Use Case Modeling Tips 200 5.1.14 Remaining Agile 203 5.2 User Stories 204 5.2.1 What About System User Stories? 207 5.3 Features 207 5.4 What You Have Learned 209 5.5 Review Questions 210 Chapter 6 User-Interface Development 211 6.1 Essential User-Interface Prototyping 212 6.2 Traditional User-Interface Prototyping 218 6.3 User-Interface Flow Diagramming 224 6.4 Usability 226 6.5 User-Interface Design Strategies 227 6.6 Agile Stakeholder Documentation 232 6.7 What You Have Learned 234 6.8 Review Questions 234 Chapter 7 Supplementary Requirements 236 7.1 Business Rules 237 7.2 Technical Requirements 241 7.3 Constraints 242 7.4 Object Constraint Language (OCL) 243 7.5 Glossaries 244 7.6 Supplementary Specifications 245 7.7 What You Have Learned 245 7.8 Review Questions 246 Chapter 8 Conceptual Domain Modeling 247 8.1 Robustness Diagrams 248 8.2 Object Role Model (ORM) Diagrams 254 8.3 Class Responsibility Collaborator (CRC) Cards 258 8.4 Analysis Class Diagrams 264 8.4.1 Modeling Classes and Responsibilities 268 8.4.2 Modeling Associations 272 8.4.3 Introducing Reuse between Classes via Inheritance 274 8.4.4 Modeling Composition and Associations 276 8.4.5 Modeling Vocabularies 277 8.5 Logical Data Models (LDMs) 278 8.6 Applying Analysis Patterns Effectively 281 8.7 UML Object Diagram 283 8.8 Keeping Conceptual Domain Modeling Agile 285 8.9 What You Have Learned 286 8.10 Review Questions 287 Chapter 9 Business Process Modeling 289 9.1 Data Flow Diagrams (DFDs) 290 9.2 Flowcharts 295 9.3 UML Activity Diagrams 297 9.4 What You Have Learned 304 9.5 Review Questions 304 Chapter 10 Agile Architecture 305 10.1 Architecture Techniques and Concepts 307 10.1.1 Put Architectural Decisions Off as Long as Possible 307 10.1.2 Accept That Some Architectural Decisions Are Already Made 308 10.1.3 Prove It with Code 308 10.1.4 Set an Architectural Change Strategy 309 10.1.5 Consider Reuse 310 10.1.6 Roll Up Your Sleeves 311 10.1.7 Be Prepared to Make Trade-offs 312 10.1.8 Consider Adopting the Zachman Framework 312 10.1.9 Apply Architectural Patterns Gently 316 10.2 Looking to the Future with Change Cases 316 10.3 UML Package Diagrams 318 10.3.1 Class Package Diagrams 319 10.3.2 Data Package Diagrams 321 10.3.3 Use Case Package Diagrams 321 10.4 UML Component Diagrams 323 10.4.1 Interfaces and Ports 325 10.4.2 Designing Components 327 10.4.3 Creating Component Models 329 10.4.4 Remaining Agile 333 10.5 Free-Form Diagrams 333 10.6 UML Deployment Diagrams 335 10.7 Network Diagrams 340 10.8 Layering Your Architecture 341 10.9 What You Have Learned 344 10.10 Review Questions 344 Chapter 11 Dynamic Object Modeling 346 11.1 UML Sequence Diagrams 348 11.1.1 Visual Coding Via Sequence Diagrams 359 11.1.2 How to Draw Sequence Diagrams 360 11.1.3 Keeping It Agile 361 11.2 UML Communication Diagrams 361 11.3 UML State Machine Diagrams 364 11.4 UML Timing Diagrams 371 11.5 UML Interaction Overview Diagrams 373 11.6 UML Composite Structure Diagrams 375 11.7 What You Have Learned 377 11.8 Review Questions 377 Chapter 12 Structural Design Modeling 378 12.1 UML Class Diagrams 378 12.1.1 Modeling Methods during Design 379 12.1.2 Modeling Attributes during Design 387 12.1.3 Inheritance Techniques 393 12.1.4 Association and Dependency Techniques 395 12.1.5 Composition Techniques 399 12.1.6 Introducing Interfaces into Your Model 400 12.1.7 Class Modeling Design Tips 403 12.2 Applying Design Patterns Effectively 407 12.2.1 The Singleton Design Pattern 407 12.2.2 The Fac¸ade Design Pattern 408 12.2.3 Tips for Applying Patterns Effectively 409 12.3 Physical Data Modeling with the UML 410 12.4 What You Have Learned 417 12.5 Review Questions 417 12.5.1 The Bank Case Study Six Months Later 418 Chapter 13 Object-Oriented Programming 420 13.1 Philosophies for Effective Programming 421 13.2 Programming Tips and Techniques for Writing High-Quality Code 424 13.3 Test-Driven Development (TDD) 427 13.3.1 TDD and AMDD 429 13.3.2 Why TDD? 430 13.4 From Object Design to Java Code 431 13.4.1 From UML Sequence Diagrams to Code 431 13.4.2 From UML Class Diagrams to Code 433 13.4.3 Implementing a Class in Java 435 13.4.4 Declaring Instance Attributes in Java 436 13.4.5 Implementing Instance Methods in Java 437 13.4.6 Implementing Static Methods and Attributes in Java 439 13.4.7 Documenting Methods 444 13.4.8 Implementing Constructors 446 13.4.9 Encapsulating Attributes with Accessors 447 13.4.10 Implementing Inheritance in Java 453 13.4.11 Implementing Interfaces in Java 453 13.4.12 Implementing Relationships in Java 456 13.4.13 Implementing Dependencies 465 13.4.14 Implementing Collaborations in Java 466 13.4.15 Implementing Business Rules 466 13.4.16 Iterate, Iterate, Iterate 467 13.5 What You Have Learned 467 13.6 Review Questions 467 Chapter 14 Agile Database Development 469 14.1 Philosophies for Effective Data Development 471 14.2 Mapping Objects to Relational Databases 472 14.2.1 Shadow Information 473 14.2.2 Mapping Inheritance Structures 474 14.2.3 Mapping Relationships 477 14.3 Strategies for Implementing Persistence Code 479 14.4 From Design to Database Code 481 14.4.1 Defining and Modifying Your Persistence Schema 481 14.4.2 Creating, Retrieving, Updating, and Deleting Data 482 14.4.3 Interacting with a Database from Java 484 14.4.4 Implementing Your Mappings 486 14.5 Data-Oriented Implementation Strategies 486 14.5.1 Concurrency Control 488 14.5.2 Transaction Control 490 14.5.3 Shared Logic and Referential Integrity 492 14.5.4 Security Access Control 496 14.5.5 Searching for Objects 498 14.5.6 Reports 501 14.6 Database Refactoring 502 14.7 Legacy Analysis 506 14.7.1 Formalizing Contract Models 507 14.7.2 Common Legacy Challenges 508 14.7.3 Creating Contract Models 509 14.8 What You Have Learned 510 14.9 Review Questions 511 Chapter 15 Where to Go from Here 512 15.1 Become a Generalizing Specialist 512 15.2 Continuing Your Learning Process 515 15.3 Parting Words 517 Glossary 518 References and Recommended Reading 550 Index 558 Cover 1 Title 5 Copyright 6 Contents 9 Acknowledgments 19 Foreword 21 Preface 23 About the Author 27 Chapter 1 Leading-Edge Software Development 29 1.1 Modern Development Technologies 30 1.1.1 Object Technology 30 1.1.2 Extensible Markup Language (XML) 33 1.1.3 Relational Database (RDB) Technology 34 1.1.4 Web Services 35 1.2 Modern Development Techniques 36 1.2.1 Agile Software Development 37 1.2.2 Unified Modeling Language (UML) 39 1.2.3 The Unified Process (UP) 41 1.2.4 Model-Driven Architecture (MDA) 42 1.2.5 Using Them Together 43 1.3 The Organization of This Book 44 1.4 The Case Studies 47 1.4.1 The Bank Case Study 48 1.5 What You Have Learned 50 Chapter 2 Understanding the Basics–Object-Oriented Concepts 51 2.1 A Brief Overview of OO Concepts 52 2.2 OO Concepts from a Structured Point of View 55 2.3 The Diagrams of UML 2 56 2.4 Objects and Classes 56 2.5 Attributes and Operations/Methods 60 2.6 Abstraction, Encapsulation, and Information Hiding 62 2.6.1 Abstraction 62 2.6.2 Encapsulation 62 2.6.3 Information Hiding 63 2.6.4 An Example 63 2.7 Inheritance 65 2.7.1 Modeling Inheritance 66 2.7.2 Inheritance Tips and Techniques 67 2.7.3 Single and Multiple Inheritance 68 2.7.4 Abstract and Concrete Classes 71 2.8 Persistence 71 2.9 Relationships 72 2.9.1 Associations 73 2.9.2 Modeling the Unknown 76 2.9.3 How Associations Are Implemented 77 2.9.4 Properties 78 2.9.5 Aggregation and Composition 78 2.9.6 Dependencies 80 2.10 Collaboration 82 2.11 Coupling 85 2.12 Cohesion 86 2.13 Polymorphism 87 2.13.1 An Example: The Poker Game 87 2.13.2 Polymorphism at the University 88 2.14 Interfaces 90 2.15 Components 91 2.16 Patterns 93 2.17 What You Have Learned 94 2.18 Review Questions 95 Chapter 3 Full Lifecycle Object-Oriented Testing (FLOOT) 96 3.1 The Cost of Change 97 3.2 Testing Philosophies 102 3.3 Full Lifecycle Object-Oriented Testing (FLOOT) 103 3.4 Regression Testing 106 3.5 Quality Assurance 107 3.6 Testing Your Models 108 3.6.1 Proving It with Code 108 3.6.2 Usage Scenario Testing 109 3.6.3 Prototype Reviews/Walkthroughs 112 3.6.4 User-Interface Testing 113 3.6.5 Model Reviews 113 3.6.6 When to Use Each Technique 115 3.7 Testing Your Code 116 3.7.1 Testing Terminology 116 3.7.2 Testing Tools 117 3.7.3 Traditional Code Testing Concepts 117 3.7.4 Object-Oriented Testing Techniques 120 3.7.5 Code Inspections 122 3.8 Testing Your System in Its Entirety 123 3.9 Testing by Users 124 3.10 Test-Driven Development (TDD) 125 3.11 What You Have Learned 127 3.12 Review Questions 127 Chapter 4 Agile Model–Driven Development (AMDD) 129 4.1 Modeling Philosophies 130 4.2 Project Stakeholders 134 4.3 What Is Agile Modeling (AM)? 135 4.4 The Values of AM 136 4.5 The Principles of AM 137 4.6 The Practices of AM 137 4.7 Easing into Agile Modeling 137 4.8 Agile Model–Driven Development (AMDD) 146 4.8.1 How is AMDD Different? 148 4.9 Fundamental Information Gathering Skills 149 4.9.1 Interviewing 149 4.9.2 Observation 151 4.9.3 Brainstorming 151 4.10 Agile Documentation 152 4.11 Making Whiteboards Work for Software Development 153 4.12 AMDD and Other Agile Methodologies 157 4.13 Agile Modeling and Test-Driven Development (TDD) 157 4.14 What You Have Learned 159 4.15 Review Questions 159 Chapter 5 Usage Modeling 161 5.1 Use Case Modeling 161 5.1.1 Starting Agile 163 5.1.2 Essential Use Case Diagrams 166 5.1.3 Identifying Actors 173 5.1.4 Writing an Essential Use Case 176 5.1.5 Identifying Use Cases 178 5.1.6 System Use Case Diagrams 180 5.1.7 System Use Cases 180 5.1.8 Writing Alternate Courses of Action 187 5.1.9 Other Use Case Styles 190 5.1.10 Comparing Essential and System Use Cases 191 5.1.11 Reuse in Use Case Models: < >, < >, and Inheritance 194 5.1.12 Packages 199 5.1.13 Use Case Modeling Tips 200 5.1.14 Remaining Agile 203 5.2 User Stories 204 5.2.1 What About System User Stories? 207 5.3 Features 207 5.4 What You Have Learned 209 5.5 Review Questions 210 Chapter 6 User-Interface Development 211 6.1 Essential User-Interface Prototyping 212 6.2 Traditional User-Interface Prototyping 218 6.3 User-Interface Flow Diagramming 224 6.4 Usability 226 6.5 User-Interface Design Strategies 227 6.6 Agile Stakeholder Documentation 232 6.7 What You Have Learned 234 6.8 Review Questions 234 Chapter 7 Supplementary Requirements 236 7.1 Business Rules 237 7.2 Technical Requirements 241 7.3 Constraints 242 7.4 Object Constraint Language (OCL) 243 7.5 Glossaries 244 7.6 Supplementary Specifications 245 7.7 What You Have Learned 245 7.8 Review Questions 246 Chapter 8 Conceptual Domain Modeling 247 8.1 Robustness Diagrams 248 8.2 Object Role Model (ORM) Diagrams 254 8.3 Class Responsibility Collaborator (CRC) Cards 258 8.4 Analysis Class Diagrams 264 8.4.1 Modeling Classes and Responsibilities 268 8.4.2 Modeling Associations 272 8.4.3 Introducing Reuse between Classes via Inheritance 274 8.4.4 Modeling Composition and Associations 276 8.4.5 Modeling Vocabularies 277 8.5 Logical Data Models (LDMs) 278 8.6 Applying Analysis Patterns Effectively 281 8.7 UML Object Diagram 283 8.8 Keeping Conceptual Domain Modeling Agile 285 8.9 What You Have Learned 286 8.10 Review Questions 287 Chapter 9 Business Process Modeling 289 9.1 Data Flow Diagrams (DFDs) 290 9.2 Flowcharts 295 9.3 UML Activity Diagrams 297 9.4 What You Have Learned 304 9.5 Review Questions 304 Chapter 10 Agile Architecture 305 10.1 Architecture Techniques and Concepts 307 10.1.1 Put Architectural Decisions Off as Long as Possible 307 10.1.2 Accept That Some Architectural Decisions Are Already Made 308 10.1.3 Prove It with Code 308 10.1.4 Set an Architectural Change Strategy 309 10.1.5 Consider Reuse 310 10.1.6 Roll Up Your Sleeves 311 10.1.7 Be Prepared to Make Trade-offs 312 10.1.8 Consider Adopting the Zachman Framework 312 10.1.9 Apply Architectural Patterns Gently 316 10.2 Looking to the Future with Change Cases 316 10.3 UML Package Diagrams 318 10.3.1 Class Package Diagrams 319 10.3.2 Data Package Diagrams 321 10.3.3 Use Case Package Diagrams 321 10.4 UML Component Diagrams 323 10.4.1 Interfaces and Ports 325 10.4.2 Designing Components 327 10.4.3 Creating Component Models 329 10.4.4 Remaining Agile 333 10.5 Free-Form Diagrams 333 10.6 UML Deployment Diagrams 335 10.7 Network Diagrams 340 10.8 Layering Your Architecture 341 10.9 What You Have Learned 344 10.10 Review Questions 344 Chapter 11 Dynamic Object Modeling 346 11.1 UML Sequence Diagrams 348 11.1.1 Visual Coding Via Sequence Diagrams 359 11.1.2 How to Draw Sequence Diagrams 360 11.1.3 Keeping It Agile 361 11.2 UML Communication Diagrams 361 11.3 UML State Machine Diagrams 364 11.4 UML Timing Diagrams 371 11.5 UML Interaction Overview Diagrams 373 11.6 UML Composite Structure Diagrams 375 11.7 What You Have Learned 377 11.8 Review Questions 377 Chapter 12 Structural Design Modeling 378 12.1 UML Class Diagrams 378 12.1.1 Modeling Methods during Design 379 12.1.2 Modeling Attributes during Design 387 12.1.3 Inheritance Techniques 393 12.1.4 Association and Dependency Techniques 395 12.1.5 Composition Techniques 399 12.1.6 Introducing Interfaces into Your Model 400 12.1.7 Class Modeling Design Tips 403 12.2 Applying Design Patterns Effectively 407 12.2.1 The Singleton Design Pattern 407 12.2.2 The Fac ̧ade Design Pattern 408 12.2.3 Tips for Applying Patterns Effectively 409 12.3 Physical Data Modeling with the UML 410 12.4 What You Have Learned 417 12.5 Review Questions 417 12.5.1 The Bank Case Study Six Months Later 418 Chapter 13 Object-Oriented Programming 420 13.1 Philosophies for Effective Programming 421 13.2 Programming Tips and Techniques for Writing High-Quality Code 424 13.3 Test-Driven Development (TDD) 427 13.3.1 TDD and AMDD 429 13.3.2 Why TDD? 430 13.4 From Object Design to Java Code 431 13.4.1 From UML Sequence Diagrams to Code 431 13.4.2 From UML Class Diagrams to Code 433 13.4.3 Implementing a Class in Java 435 13.4.4 Declaring Instance Attributes in Java 436 13.4.5 Implementing Instance Methods in Java 437 13.4.6 Implementing Static Methods and Attributes in Java 439 13.4.7 Documenting Methods 444 13.4.8 Implementing Constructors 446 13.4.9 Encapsulating Attributes with Accessors 447 13.4.10 Implementing Inheritance in Java 453 13.4.11 Implementing Interfaces in Java 453 13.4.12 Implementing Relationships in Java 456 13.4.13 Implementing Dependencies 465 13.4.14 Implementing Collaborations in Java 466 13.4.15 Implementing Business Rules 466 13.4.16 Iterate, Iterate, Iterate 467 13.5 What You Have Learned 467 13.6 Review Questions 467 Chapter 14 Agile Database Development 469 14.1 Philosophies for Effective Data Development 471 14.2 Mapping Objects to Relational Databases 472 14.2.1 Shadow Information 473 14.2.2 Mapping Inheritance Structures 474 14.2.3 Mapping Relationships 477 14.3 Strategies for Implementing Persistence Code 479 14.4 From Design to Database Code 481 14.4.1 Defining and Modifying Your Persistence Schema 481 14.4.2 Creating, Retrieving, Updating, and Deleting Data 482 14.4.3 Interacting with a Database from Java 484 14.4.4 Implementing Your Mappings 486 14.5 Data-Oriented Implementation Strategies 486 14.5.1 Concurrency Control 488 14.5.2 Transaction Control 490 14.5.3 Shared Logic and Referential Integrity 492 14.5.4 Security Access Control 496 14.5.5 Searching for Objects 498 14.5.6 Reports 501 14.6 Database Refactoring 502 14.7 Legacy Analysis 506 14.7.1 Formalizing Contract Models 507 14.7.2 Common Legacy Challenges 508 14.7.3 Creating Contract Models 509 14.8 What You Have Learned 510 14.9 Review Questions 511 Chapter 15 Where to Go from Here 512 15.1 Become a Generalizing Specialist 512 15.2 Continuing Your Learning Process 515 15.3 Parting Words 517 Glossary 518 References and Recommended Reading 550 Index 558 Scott Ambler, award-winning author of Building Object Applications that Work, Process Patterns, and More Process Patterns, has revised his acclaimed first book, The Object Primer. Long prized by both students and professionals as the best introduction to object-oriented technology, this book is now completely up-to-date, with all modeling notation rewritten in the just-released UML 2.0. All chapters have been revised to take advantage of Agile Modeling (AM), which is presented in the new chapter 2 along with other important new modeling techniques. Review questions at the end of each chapter allow readers to test their newly acquired knowledge. In addition, Ambler takes time to reflect on the lessons learned over the past few years by discussing the proven benefits and drawbacks of the technology. This is the perfect book for any software development professional or student seeking an introduction to the concepts and terminology of object technology. Previous Edition Pb (2001): 0-521-78519-7 Scott W. Ambler is a senior object consultant with Ronin International, Inc. and a popular speaker at conferences worldwide. He has worked with OO technology since 1990 as a business architect, system analyst, system designer, mentor, Smalltalk/C++/Java developer, and OO software process manager. He is a member of the IEEE Computer Society, the ACM, and Mensa. Scott Ambler, award-winning author of Building Object Applications that Work, Process Patterns, and More Process Patterns, has revised his acclaimed first book, The Object Primer. Long prized in its original edition by both students and professionals as the best introduction to object-oriented technology, this book has all modeling notation rewritten in UML 2.0. All chapters have been revised to take advantage of Agile Modeling (AM), which is presented in the new chapter 2 along with other important modeling techniques. Review questions at the end of each chapter allow readers to test their newly acquired knowledge. In addition, the author takes time to reflect on the lessons learned over the past few years by discussing the proven benefits and drawbacks of the technology. This is the perfect book for any software development professional or student seeking an introduction to the concepts and terminology of object technology. "Scott Ambler, award-winning author of Building Object Applications That Work, Process Patterns, and More Process Patterns, has revised his acclaimed first book, The Object Primer. Long prized in its original edition by both students and professionals as the best introduction to object-oriented technology, this book is now completely up-to-date, with all modeling notation rewritten in the just-released UML 2.0. All chapters have been revised to take advantage of Agile Modeling (AM), which is presented in the new Chapter 2 along with other important new modeling techniques."--BOOK JACKET