Objects are containers
In case of Abstract Data Types, objects hold Data and Methods.
Objects are the most natural fit for ADTs.
In case of Design Patterns, objects hold code. This is where majority
of the complains come from.
However if you limit the Design Patterns to just,
you will find that OOP is fairly manageable.
If the object which is not an ADT and has many public methods, you
are probably overdoing it. Coupled with inheritance this is a
disaster. Why is that ? Because if the object has more public
methods, you will have to go through huge troubles to implement
Object Substitution. By troubles, I mean
So don’t do it ! Use lots of Commands in your codebase you just
have to replace one method, execute, for Object Substitution. This
simplifies many things and that is the way to go.