...also, you mentioned ood. One of the best books on that topic is Object-oriented Design Heuristics by Riel, from way back in 1996. It gives many guidelines which will really help you understand designing with o-o and the tradeoffs involved. Riel's book is easy to read, but full of information. Occasionally I see inexperienced people shooting themselves in the foot, particularly by using design
patterns where they don't belong. Knowing and understanding Riel's book will help prevent this - it gives you the tools you need to judge if a design is good or not, regardless of how many design patterns have or have not been crammed into it.
I have difficulty saying enough good things about this book. You can get other books explaining stuff like
polymorphism or inheritance or what an abtraction is or how to use nouns/verbs to find classes and so on, but this book really is about object oriented DESIGN. It's good.
This book is underrated (even though it has 5 stars on amazon) and should be much more widely known by software developers, really on par with the GOF.
I purchased this book while taking a grad level o-o course. Get this book even if it means not eating for a little while (ok, maybe that's going a little too far!).
...anyway, that's my $0.02.