This book uses a case-study-based approach for providing a comprehensive introduction to the principles of object-oriented design. The salient points of its coverage are A sound footing on object-oriented concepts such as classes, objects, interfaces, inheritance, polymorphism, dynamic linking, etc.A good introduction to the stage of requirements analysisUse of UML to document user requirements and designAn extensive treatment of the design processCoverage of implementation issuesAppropriate use of design and architectural patternsIntroduction to the art and craft of refactoringPointers to resources that further the reader's knowledgeThe stress of the book is on implementation aspects, without which the learning is incomplete. This is achieved through the use of case studies for introducing the various concepts of analysis and design, ensuring that the theory is never separate from the implementation aspects. In the first edition, UML was introduced on an “as-needed” basis; certain UML diagrams that were not needed were not covered. This edition includes a new chapter for providing a concise introduction to the remaining UML diagrams using the same holistic approach used in the first edition. All the main case studies used in this book have been implemented by the authors using Java. An appendix on Java provides a useful short tutorial on the language