This book will give you a deep and thorough understanding of the
implications of all the decisions you can make in designing a class, so
you are equipped to develop classes that are robust, flexible and
reusable. In short, this book will take you from a theoretical
understanding of the basic principles of OO programming to the ability
to write well-designed classes in actual applications.