
A thought in passing... Properly done object modeling is not a complete modeling in software of all the real-world attributes and interactions of the real-world objects being dealt with. There is (likely) no need to note the color of a mail piece in the software object that represents it. On the other hand, there is frequently a need to add to them entirely conceptual attributes such as synchronization objects (e.g. mutexes, semaphores) or properties such as being a singleton or serialization methods, which have no real world analog. These allow the object to cross into an orthogonal domain from the real world problem domain, and later pop back into it, easing the solution of the real world problem. A sort of conceptual hyper-space jump, you might say. :) Being a mail piece is an entirely different domain from being a synchronization object is an entirely different domain from being serializable to persistent storage.