I know this is an older question, but I ran into it as one of the top returns on Google while searching for Object Oriented Design (OOD) links for someone else. I thought it would be useful to add some more info for anyone else who may find this via Google, although it is rather late for the OP.
In order to properly apply OOD to code you really need to understand the theory behind good design principles. Once I read such principles I like to see a good concrete example to improve my understanding so most of the links below will have good examples. An acronym that covers several good OOD principles is SOLID. There is a basic primer on OOD and SOLID here
]. In short SOLID stands for the following 5 principles:
1. Single Responsibility Principal
] - A class should have one, and only one, reason to change.
2. Open/closed principle
] - You should be able to extend a classes behavior, without modifying it.
3. Liskov substitution principle
] - Derived classes must be substitutable for their base classes.
4. Interface segregation principle
] - Make fine grained interfaces that are client specific.
5. Dependency inversion principle
] - Depend on abstractions, not on concretions.
I also recommend reading the Head First Design Patterns
For further reading there is a good series on OOP here
] on CodeProject.