Charles Miller writes in a attempt to explain modeling and implementation to a novice:
If the class is a bad place to store a certain bit of information about an object (i.e. whether a person is considered an adult or not), for whatever reason, then don’t store it there! Your class heirarchy shouldn’t correspond exactly to a real-world taxonomy; you shouldn’t have every natural language is-a represented by a type in your program. That isn’t the function of a class at all.
Only to later be attacked by another expert, James Robertson remarks:
Yes, Java is the end all…. All this verbiage spilled because the crowd can’t see that static typing is the problem – let go of it, and these artificial constraints disappear.
I’m whole heartedly agree with Charles in his statement above. It’s a very subtle statement and all too many Object Oriented developers miss it.
I’ve always been fascinated by the Smalltalk system, it’s one of my big regrets in my career that I had not had the change to work in such a system. It’s a very elegant and pure programming language, however I think this creates a blind spot. The blind spot is that the features of Smalltalk are sufficient to model all domains. The emergence of the Adaptive Object Model architectural style (intoduced by Ralph Johnson, a Smalltalker himself) in an indication of a weakness in the Object Oriented Model.