Goodbye, Object Oriented Programming
In this article, the author suggests that OOP brings more awkward complexity than it removes.
His Main Points:
OOP, through inheritance, brings far more context than is needed, which can be at best awkward and at worst buggy and coupling.
Encapsulation doesn't protect internal objects from mutation.
That OOP doesn't allow for inheritance across categories, but only top-down. There is no trait 'sharing' possible, just trait inheritance.
But these objections seem to reflect only misuse of OOP
You should use rules for inheritance, just like you should use rules for writing all code, to prevent unnecessary coupling.
Encapsulation actually is a very valuable concept even if objects can be mutated. Encapsulation is not about protecting from mutation, it's about hiding the internal implementation of the object. It is the programmer‘s responsibility to ensure she does not mutate objects as they are passed by reference.
Some programming languages make it possible to use inheritance in a composition-style, like PHP and trait
classes. Otherwise in OOP it is possible and recommended to implement interfaces for Composition.
Thus, his arguments don't really demonstrate that OOP itself and the original purposes for which it was created are now null. But rather that it can be misused in specific ways and has some inherent complexities when misused. But that's true of all programming styles.