To provide a groundwork for my discourse, I define "object oriented programming" as consisting of four "pillars": abstraction into objects, encapsulation of data, inheritance, and polymorphism. Consequently, I view a lack of inheritance and polymorphism as not really "object oriented", but then "object oriented" is not synonymous with "good".
I concur with Boronczyk's point that:
Timothy Boronczyk wrote:The truth is, procedural and OOP paradigms languages express the complexity of their problem space in different ways. Procedural code is flat and wide with functions. OO code is hierarchical with inheritance. OO-code is not inherently better organized than procedural code merely because it is encapsulated in objects. A reusable library can consist of functions just as easily as a collection of objects.
However, I think that Boronczyk's argument prior to this point is flawed. He posits that given this code:
PeanutButterJar.open()
Knife.spread(PeanutButter, Bread)
One must interpret it as "the peanut butter jar opens itself" and "the knife spreads the peanut butter on the bread". But one does not have to interpret it in that way. One can interpret it as "open the peanut butter jar" and "spread the peanut butter on the bread using the knife".
From what I see, in Boronczyk's example, inheritance is used, but polymorphism is not demonstrated. In fact, the code is effectively procedural. It has elements of OOP in terms of abstraction and presumably encapsulation (what one might call "object based programming"), but that is about it. Consequently, the difference between that example and this one is merely syntax:
open(PeanutButterJar)
spread(Knife, PeanutButter, Bread)
The above code does not necessarily mean a loss of encapsulation either: if open and spread make use of the interface of the relevant classes, encapsulation is actually increased since fewer functions have direct access to the internals of the relevant classes.
Therefore, if Boronczyk intended to answer the question of "what's wrong with OOP?", then I consider that he has failed completely.
To answer your question, however...
jwagner wrote:Is OOP really a good thing?
Yes, if it is used appropriately.