The Dark Side of Objects? (Luke, I am your father.)
Sometimes you need reins on developers and designers. Not because they aren’t doing a good job, but because if you don’t you may end up in a quagmire of objects that no one can understand. Objects are good, but they can be overdone. Not everything should be an object and not everything lends itself to being objectified. Sometimes a developers goes too deep when trying to create objects.
When I was learning about objects I had a great mentor who understood the real world boundaries of objects: when to use them, how to use them and far to decompose them into additional objects. Shortly after having "seen the light" with regard to objects I was helping a young man (okay, at my age everyone is young) write an application which was actually the sequel to the data entry application I mentioned in the previous note. He needed to do some funky calculations so he created his own numeric objects. Instead of using the built in Integer types he decided that he would create his own Number object. This number object would have a collection of digits When any calculations needed to be done he would tell one of the digits the operation to be performed and let that digit tell the other digits what to do. Well, this gave him a method whereby he could perform any simple numeric operation (+-/*) on a number with a precision of his own choosing. He spent weeks on perfecting this so that his number scheme could handle integers and floating point numbers of any size. It was truly a work of art.
And weeks of wasted time.
What he needed to do was multiple two numbers together or add up a series of numbers. Nothing ever went beyond two decimal points of precision and no amount was greater than one million. These are all functions built into the darn language and didn’t need to be enhanced or made better. The developer got carried away with objects and objectified everything when it didn’t or in this case, shouldn’t have been done.
Knowing when to stop using objects is just as important as knowing when to use objects.