Object Oriented Programming has been around for many years, and it used in most of the newer programming languages. According to Wikipedia, the list of object-oriented languages include Java, C++, C#, Python, PHP, Ruby, Perl, Delphi, Objective-C, Swift, Common Lisp, and Smalltalk. I haven’t used all of these languages, but I’ve used Object Oriented Programming for many years in multiple languages.
In this article by Charles Scalfani we learn that maybe everything isn’t all roses and rainbows on the Object Oriented ranch. People are starting to question how useful and powerful these Object Oriented features really are.
At first glance, Inheritance appears to be the biggest benefit of the Object Oriented Paradigm. All the simplistic examples of shape hierarchies that are paraded out as examples to the newly indoctrinated seem to make logical sense.
And Reuse is the word of the day. No… make that the year and perhaps evermore.
I swallowed this whole and rushed out into the world with my newfound insight.
Banana Monkey Jungle Problem
With religion in my heart and problems to solve, I started building Class Hierarchies and writing code. And all was right with the world.
I’ll never forget that day when I was ready to cash in on the promise of Reuse by inheriting from an existing class. This was the moment I had been waiting for.
A new project came along and I thought back to that Class that I was so fond of in my last project.
No problem. Reuse to the rescue. All I gotta do is simply grab that Class from the other project and use it.
Well… actually… not just that Class. We’re gonna need the parent Class. But… But that’s it.
Ugh… Wait… Looks like we gonna also need the parent’s parent too… And then… We’re going to need ALL of the parents. Okay… Okay… I handle this. No problem.
And great. Now it won’t compile. Why?? Oh, I see… This object contains this other object. So I’m gonna need that too. No problem.
Wait… I don’t just need that object. I need the object’s parent and its parent’s parent and so on and so on with every contained object and ALL the parents of what those contain along with their parent’s, parent’s, parent’s…
There’s a great quote by Joe Armstrong, the creator of Erlang:
The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.
Banana Monkey Jungle Solution
I can tame this problem by not creating hierarchies that are too deep. But if Inheritance is the key to Reuse, then any limits I place on that mechanism will surely limit the benefits of Reuse. Right?
So what’s a poor Object Oriented Programmer, who’s had a healthy helping of the Kool-aid, to do?