Object-Oriented Analysis and Design has established itself as an integral and critically vital part of the software development process. In this paper, we describe an integrated approach to teaching this subject so that it covers vital components of this vast field: analysis, object-oriented design principles such as the Liskov Substitution Principle, the design process, which shows how and where the rules are applied, modeling, design and architectural patterns, language features, and refactoring. The course has evolved over the past 10 years to one that revolves around three major case studies. This evolution has resulted in a course that covers all important aspects of OOAD in a manner that emphasizes their inter-relatedness and hence their relevance to overall design process. Feedback suggests that this approach has improved students' understanding of the OOAD concepts.