OOP is just another way to organize code, and has its place. I’ve found peace with myself by adopting a minimalist use of OOP, namely just sticking with encapsulation (which is everywhere BTW, functions have scope too), separating classes for data (i.e. transport classes or models) and actions, and preferring composition over inheritance.
It shows that you can model class-style inheritance IS-A relationships using concatenation. You can do the same with delegate prototypes, too, which is what happens when you use `class…extends`.
But the example is not a good example of composition done right. You can drive off a cliff in any model car.
Interesting article. As a person who fell into computer programming in the late 90s with a philosophy background, I immediately saw the object-oriented model as being an application of Aristotle’s classification model. Furthermore, the “latter” Wittgenstein’s idea of language having “family resemblances”, or language as representing objects with…