7 ms·
> It's the basis of mainstream OOP as well. Not at all! If I call a.foo(), I know for a fact foo() will be called. That statement is not just going to be igno
by hota_mazi 8y ago
> It's the basis of mainstream OOP as well.
Not at all!
If I call a.foo(), I know for a fact foo() will be called. That statement is not just going to be ignored and dropped on the floor.
What it will do, now nobody has any idea, whether the call is local or remote.
- boomlinde 8y ago> If I call a.foo(), I know for a fact foo() will be called. Likewise, when you send the message foo to a, you know it will be received. In both cases, the only way you'll ever have an idea of its effect, if any, is by knowing the state and implementation of a at the point of sending the message or calling the method. What is different is how you communicate that a method might have had some effect. In Java I'll know at build time whether a method definitely wasn't considered because of its type system. It won't compile if I have not defined the method being called. In a dynamic language like Python, calling a method that is not defined results in an exception. In Smalltalk, an Object receiving a message with an unhandled method will send a #doesNotUnderstand message back to the sender. The default behavior of an Object receiving the #doesNotUnderstand message is to raise an exception. Unless you explicitly override the #doesNotUnderstand method, this becomes an implementation detail and really isn't much different, especially compared to dynamically typed languages with OOP facilities. So as I said before, the message passing mechanism doesn't preclude communicating whether it was handled. Messages get ignored if that's what you want. Java IMO really has the same potential for run-time uncertainty thanks to exceptions.