I've read a number of introductions to object-oriented design and programming. This one is the best all-around introduction that I have seen. It starts in the real world, with a discussion of how one plans and organizes a task (sending flowers to a significant other) that requires more than a single person to get done. That's a pleasant change from texts that begin with Dauntingly Dry Definitions ("encapsulation", "inheritance", and my favorite, "polymorphism").
To the author's credit, he avoids launching into inheritance until Chapter 8, by which time he has laid enough groundwork to reduce the concept to common sense. Other concepts are presented in a similar manner.
Note that this book is a survey book, not an in-depth programming manual. You won't learn C++ or Delphi, or any of the other half-dozen languages used for the book's examples. And the book focuses on concepts, rather than implementation. you won't learn how to implement a Singleton pattern in C#, although you will learn what it is and why it is useful. Finally, the book assumes familiarity with traditional, procedural programming. This is not a Programming 101 text.
I would recommend this book enthusiastically as a starting point for anyone making the transition from traditional programming to OOP. If you are moving to the DotNet platform, I have created a list ("So you'd like to ... Transition to DotNet") with some other recommended texts.