Since Smalltalk was mentioned: there is a fundamental difference in how actions are triggered on the object vs. invoking a function. In Smalltalk object actions are triggered by sending a message. When the object receives the message, it then chooses to execute the related method (and it can choose not to). It may seem minor, but it a significant difference in how you see objects and their contained state. Functions feel like a ‘transfer of global control’; sending a message feels like a ‘request’. This difference influences how you think; your design will be different (probably more decoupled) when you think in terms of sending messages.