in reply to Often Overlooked OO Programming Guidelines

If I might add one more observation: Don't think about classes (at all) when doing domain modelling! Classes are a structural element of the code not an element of the problem domain. Just think about the objects (what they need to do, what they need to know). Thinking 'classes' too early subverts object-oriented design into class-oriented design, and the result is highly stuctured code (often with deep hierarchies) that doesn't map well to the problem space.