Yesterday, I was able to take in Robert ("Uncle Bob") Martin's talk at the OOPSLA Educator's Symposium. He allowed the audience to choose the topic. Choices were 'Clean Code' and 'Principles of OOD'. The audience ended up choosing 'Principles of OOD'.
We brought Robert Martin in a little over a year ago and had him talk to our organization about agile development, and therefore, I kind of knew what kind of talk to expect. I have to say that I thoroughly enjoy his engaging speaking style. He's very animated, very passionate, and does a fantastic job connecting with his audience.
His talk covered his SOLID principles of class design. These principles are:
Single Responsibility Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
These are things that every developer should be familiar with and things thought should be considered every time you put together a new class. I'm not going to duplicated Uncle Bob's talk here, but will rather point you to the article on his site that covers the principles in more detail. If you prefer a hardcover reference, check out Agile Software Development, Principles, Patterns, and Practices.