| Preface | p. xv |
| Introduction | p. xix |
| OO Principles and Patterns | p. 1 |
| Principles, Patterns, and the OO Paradigm | p. 2 |
| Class Principles | p. 8 |
| Open Closed Principle (OCP) | p. 8 |
| Liskov Substitution Principle (LSP) | p. 11 |
| Dependency Inversion Principle (DIP) | p. 12 |
| Interface Segregation Principle (ISP) | p. 15 |
| Composite Reuse Principle (CRP) | p. 17 |
| Principle of Least Knowledge (PLK) | p. 21 |
| Package Principles | p. 23 |
| Package Dependency | p. 23 |
| Release Reuse Equivalency Principle (REP) | p. 25 |
| Common Closure Principle (CCP) | p. 26 |
| Common Reuse Principle (CReP) | p. 26 |
| Acyclic Dependencies Principle (ADP) | p. 27 |
| Stable Dependencies Principle (SDP) | p. 29 |
| Stable Abstractions Principle (SAP) | p. 31 |
| Patterns | p. 32 |
| Strategy | p. 33 |
| Visitor | p. 34 |
| Layers | p. 36 |
| Conclusion | p. 36 |
| Introduction to the UML | p. 39 |
| The UML Defined | p. 39 |
| Origin | p. 42 |
| Role of Modeling | p. 43 |
| The Challenge | p. 44 |
| Complexity of Architecture | p. 45 |
| The Remedy | p. 46 |
| Benefits | p. 46 |
| Conclusion | p. 48 |
| Fundamental UML | p. 49 |
| Models and Views | p. 49 |
| Fundamental Elements | p. 50 |
| Diagrams | p. 51 |
| Views | p. 51 |
| Core Diagrams | p. 54 |
| Behavioral Diagrams | p. 55 |
| Structural Diagrams | p. 57 |
| Fundamental Elements | p. 58 |
| Structural Elements | p. 58 |
| Java-Independent Entities | p. 59 |
| Java-Dependent Entities | p. 61 |
| Java-Dependent Relationships | p. 62 |
| Annotations | p. 66 |
| Extensibility Mechanisms | p. 66 |
| Introduction to Diagrams | p. 67 |
| Sequence Diagram | p. 68 |
| Class Diagram | p. 70 |
| Package Diagram | p. 70 |
| Conclusion | p. 72 |
| The UML and Software Process | p. 73 |
| Process Defined | p. 74 |
| Best Practices | p. 75 |
| Behavioral Driven | p. 76 |
| Architecture Centric | p. 77 |
| Iterative | p. 77 |
| Refactoring | p. 78 |
| Visual Modeling | p. 79 |
| Simple Prototypes | p. 79 |
| Development Lifecycle and the UML | p. 80 |
| Requirements | p. 83 |
| Analysis and Design | p. 86 |
| Construction | p. 90 |
| Testing | p. 92 |
| Deployment | p. 92 |
| The Full Lifecycle | p. 93 |
| Conclusion | p. 93 |
| Modeling Strategies | p. 97 |
| Integration Goals | p. 98 |
| Development Approach | p. 99 |
| Individual Development | p. 99 |
| Team Development | p. 100 |
| Tool Approach | p. 101 |
| Informal Tool | p. 101 |
| Formal Tool | p. 102 |
| Integration Factors | p. 104 |
| Development Culture | p. 105 |
| Software Process | p. 105 |
| Object-Oriented Experience | p. 106 |
| Technological Aspects | p. 107 |
| Modeling Strategies | p. 107 |
| Conceptual Model | p. 108 |
| Specification Model | p. 108 |
| Implementation Model | p. 109 |
| Integration Strategy | p. 109 |
| Conclusion | p. 113 |
| Requirements Modeling | p. 115 |
| Notation | p. 116 |
| Actor | p. 116 |
| Use Case | p. 117 |
| Relationships | p. 118 |
| Use Case Diagrams | p. 119 |
| Stereotypes | p. 119 |
| Include | p. 119 |
| Extend | p. 120 |
| Requirements Modeling | p. 121 |
| Problem Statement | p. 121 |
| Use Case Diagrams | p. 123 |
| Use Case Specifications | p. 124 |
| Additional Elements | p. 126 |
| Conclusion | p. 127 |
| Problem Analysis | p. 131 |
| Notation | p. 132 |
| Class | p. 132 |
| Association | p. 132 |
| Package | p. 133 |
| Dependency | p. 134 |
| Stereotype | p. 134 |
| Collaboration | p. 134 |
| Realization | p. 135 |
| Identifying Initial Concepts | p. 135 |
| Software Specification | p. 137 |
| Boundary | p. 138 |
| Entity | p. 139 |
| Control | p. 140 |
| Establishing Architecture | p. 142 |
| Allocating Classes | p. 143 |
| Conclusion | p. 143 |
| Behavioral Modeling | p. 145 |
| Notation | p. 146 |
| Object | p. 146 |
| Message | p. 147 |
| Sequence Diagrams | p. 147 |
| Collaboration Diagrams | p. 149 |
| Use Case Realizations | p. 150 |
| Responsibility Allocation | p. 151 |
| Decentralized versus Centralized Flow of Control | p. 157 |
| Controllers as Mediators | p. 157 |
| Managing Collections | p. 160 |
| Accessor and Mutator Methods | p. 160 |
| Additional Diagrams | p. 163 |
| Object References | p. 164 |
| Simple Prototypes | p. 166 |
| Model Structure | p. 168 |
| Conclusion | p. 168 |
| Structural Modeling | p. 171 |
| Notation | p. 172 |
| Class Diagrams | p. 172 |
| Structural Elements | p. 173 |
| Relationships | p. 173 |
| Coupling and Cohesion | p. 174 |
| Useful Class Diagrams | p. 175 |
| Package Diagrams | p. 176 |
| Interface Diagram | p. 177 |
| Implementation Diagram | p. 178 |
| View of Participating Classes (VOPC) | p. 179 |
| Identifying Structure | p. 179 |
| Complex Structure | p. 182 |
| Inheritance | p. 182 |
| Factories | p. 189 |
| Collections | p. 193 |
| Structural Notes | p. 196 |
| Model Structure | p. 196 |
| View of Participating Classes | p. 197 |
| Conclusion | p. 198 |
| Architectual Modeling | p. 201 |
| Defining Architecture | p. 201 |
| Establishing Architecture | p. 202 |
| Architectural Mechanisms | p. 204 |
| Layers | p. 204 |
| Observing | p. 207 |
| Model-View-Controller (MVC) | p. 208 |
| Partitions | p. 209 |
| Views of Architecture | p. 211 |
| Frameworks and Class Libraries | p. 217 |
| Frameworks | p. 217 |
| Framework Example | p. 219 |
| Framework Example Notes | p. 223 |
| Class Libraries | p. 224 |
| Component Architectures | p. 225 |
| Components Defined | p. 225 |
| Components and the UML | p. 226 |
| Component Sample | p. 227 |
| Conclusion | p. 227 |
| Designing Subsystems | p. 229 |
| Defining Subsystems | p. 229 |
| Subsystem Dependencies | p. 230 |
| Subsystems in Java | p. 231 |
| Subsystem Specification | p. 236 |
| Subsystem Identification | p. 239 |
| Subsystem Development | p. 240 |
| Subsystems as Frameworks | p. 240 |
| Conclusion | p. 241 |
| Rational Unified Process (RUP) and Extreme Programming (XP) | p. 243 |
| Rational Unified Process (RUP) | p. 243 |
| Characteristics of RUP | p. 244 |
| Workflows and Phases | p. 245 |
| Tailoring RUP | p. 248 |
| Extreme Programming (XP) | p. 249 |
| Characteristics of XP | p. 249 |
| Is It XP or Isn't It? | p. 251 |
| Similarities and Differences | p. 251 |
| Conclusion | p. 252 |
| J2EE and the UML | p. 253 |
| J2EE: A Brief Overview | p. 254 |
| Servlets | p. 254 |
| Java | p. 254 |
| The UML | p. 255 |
| JavaServer Pages (JSPs) | p. 255 |
| Java | p. 256 |
| The UML | p. 256 |
| Enterprise JavaBeans (EJB) | p. 256 |
| Java | p. 256 |
| The UML | p. 257 |
| Designing with J2EE | p. 258 |
| Conclusion | p. 260 |
| Code Listing for UML Exercise | p. 261 |
| Bibliography | p. 265 |
| Index | p. 267 |
| Table of Contents provided by Syndetics. All Rights Reserved. |