No me enfocaría en los objetos del mundo real, y tampoco me enfocaría en los mensajes. Más bien, un ejemplo que he usado es en gráficos, donde desea tener objetos que "sepan cómo dibujarse".
Si está trabajando en C, por ejemplo, que no tiene OO incorporado, puede que le resulte conveniente almacenar punteros a las funciones dentro de los objetos de datos. Si lo haces, entonces estás abriéndote camino hacia OOP.
No me gusta referirme a Alan Kay como si fuera Moisés entregando las tabletas. Más bien, él fue entrenado en matemáticas y bio, creo. Como matemático, probablemente estaba familiarizado con el cálculo Lambda, que era bastante abstracto, no relacionado con el hardware. En LC, podría decir que todo es un "objeto", como el número 0 y el número 1 son objetos que evalúan cosas diferentes cuando se les da un argumento. Eso lleva a Smalltalk bastante bien. La idea de "mensaje" es para que podamos evitar hablar de hardware. Podrías decir que cuando llamas a una función (o un método de un objeto) le estás enviando un mensaje, y cuando regresa, te está enviando un mensaje (o tu continuación). Eso se enganchó como una forma de describir formas de comunicarse entre programas que se ejecutan de forma asíncrona en hardware separado. Esta bien, pero para la programación ordinaria se está dejando llevar. Para obtener el valor de la idea de OOP, no necesita negar la relevancia de la tarea concreta que está tratando de hacer, o negar la concreción del hardware que está ejecutando. Creo que enseñar sobre OOP en términos de analogías artificiales hace que la gente piense demasiado en el diseño de software en términos de estructura de datos, lo que lleva a su sobre diseño, lo que lleva a problemas de código y problemas de rendimiento masivos, que tengo que pasar tiempo limpiando cuando se pone lo suficientemente mal.