OOP has many merits:
- hierarchical data, like nested data structures
- interfaces like ad-hoc (type) polymorphism and mathematical classes
- code reuse using inheritance
OOP can have not so much nice features like:
- sub types and inheritance sometime does not make sense
- some “is-a” hierarchies sometime does not make sense from a logical point of view
In Dok probably I can use OOP for:
- nested data structures like
(def-data /Tree (/Branch /Leaf))
- slots associated to an object
- interface/class support of a protocol
In Dok, probably I will not use OOP for inheritance implying subtypes.
In Dok probably I will not use OOP for creating a system of cooperating objects, but I will use different paradigms, accordingparadigm/runtime-oriented-programming
In Pharo and Smalltalk, OOP is very powerful because: everything is an object; metaprogramming using OOP. But it can create also obscure code because every part of an OOP application can be hidden in class, metaclass and similar customizations.