Object-oriented programming methodology is an open invitation to gratuitous generalization and the growing of formal gardens of complexity kudzu. Indeed some OO wizards recommend that you add code and levels of generality to object-oriented programs simply on the grounds of completeness and possible future need. But the thrust of commercial programming is to do more with less, not less with more. The idea is to synthesize, to make programs smaller, to refine and focus them. If what you really want is an omelet, you don't start with a Faberge egg.