...in that you almost required to have dynamic typing - as shutting these things down at compile time prevents the ability to dispatch on "Message Not Understood".
But you also have a different mental model for those messages that are "matched". That is, if we have:
i = math.factorial(5);
or
i := math factorial:5.
We could interpret either of these to mean either (a) call the factorial function attached to the math object; or (b) send a factorial message to the math object with the parameter 5. Operationally they are probably identical, with syntax really not determining how you interpret the call.
However, from a mental standpoint, we would say that in a Message based system, that the math object is not just a repository of functions to be called, but rather a service (or process or task) that can accessed through various messages that can be sent to it - including the factorial message. More fundamentally, each object is basically a Program onto itself but instead of communicating through a Pipe or Command Shell, it communicates via messages.