Style Guide for Object Design
This book is right in the middle between learning how to write code and learning how to apply design principles and patterns. Using lots of code samples it teaches you the basics of object design. It provides you with simple rules to follow when defining your classes, methods, properties and interfaces.
After the fundamentals, this book provides you with a discussion of object design related topics that are worth investigating.