Smalltalk OOP is good, I'd argue nowadays OOP in modern lingo is not objects and message passing anymore (call it actor model if you want to be understood) but C++ / Java classes.
Namely I would say:
- Inheritance: bad because adding layers makes it harder to understand what code is running - favor composition instead
- Encapsulation: bad because it encourages mutable internal state and couple functions with data - favor immutable state
Plenty of practices of doing good OOP are all about doing less OOP (eg. Avoid deep inheritance hierarchies).
Aren't inheritance, encapsulation concepts of OOP more than guiding principles "to be followed"? Understanding inheritance vs composition becomes the basis for anything OOP, as are with other concepts.
Inheritance is considered harmful nowadays even if you ask the most hardcore OOP folks.
That leaves us with composition, which isn't unique to OOP and eliminates one of the core "benefits" claimed by OOP proponents. (Object oriented thinking basically. Animal <- Cat, Dog, etc.)
Your argument (as many others) falls into the category of OOP minimalism. Basically, it says: "Do less OOP". That's part of the philosophy for years now. It shows that OOP is essentially self defeating as there will be nothing of it left after every new "best practice" has advised us to get rid of each single OOP concept.
Namely I would say: - Inheritance: bad because adding layers makes it harder to understand what code is running - favor composition instead - Encapsulation: bad because it encourages mutable internal state and couple functions with data - favor immutable state
Plenty of practices of doing good OOP are all about doing less OOP (eg. Avoid deep inheritance hierarchies).