Michael Kennedy's session in SoCal codecamp, "Five Fundamental Object Oriented Design Principles for Agile Development" discussed the following postulates of class design mentioned in several Fowler’s Refactoring with examples.
These are just one line summaries. Details can be found on links specified below. I found Barbara Liskov’s “Liskov Substitution Principle” most interesting as it has transitioned from this:
Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.[1]
To this
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it [2]
In class hierarchies, it should be possible to treat a specialized object as if it were a base class object. [3]
Refactoring: Improving the Design of Existing Code by Martin Fowler, et al
Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin
Principles of Object-Oriented Design
Class Design Principles
Design Patterns