Я не сосредоточился бы на объектах реального мира, и я не сосредоточился бы также на обмене сообщениями. Скорее пример, который я использовал, в графике, где вы хотите иметь объекты, которые «умеют рисовать сами».
Например, если вы работаете в C, в котором нет встроенного ОО, вам может быть удобно хранить указатели на функции внутри объектов данных. Если вы это сделаете, то вы вклиниваетесь в ООП.
Мне не нравится ссылаться на Алана Кея, как если бы он был Моисеем, раздающим таблетки. Скорее, он был обучен математике и био, я считаю. Как математик, он, вероятно, был знаком с Lambda Calculus, который был довольно абстрактным, не связанным с аппаратным обеспечением. В LC вы можете сказать, что все является «объектом» - например, число 0 и число 1 являются объектами, которые оценивают разные вещи при задании аргумента. Это очень хорошо ведет в Smalltalk. Идея «сообщения» такова, что мы можем избежать разговоров об аппаратном обеспечении. Вы можете сказать, что когда вы вызываете функцию (или метод объекта), вы отправляете ему сообщение, а когда он возвращается, он отправляет вам сообщение (или вашему продолжению). Это было зафиксировано как способ описания способов взаимодействия между программами, работающими асинхронно на отдельном оборудовании. Все в порядке, но для обычного программирования это увлекается. Чтобы понять ценность идеи ООП, вам не нужно отрицать актуальность конкретной задачи, которую вы пытаетесь выполнить, или отрицать конкретность оборудования, на котором вы работаете. Я думаю, что преподавание ООП с помощью надуманных аналогий заставляет людей слишком много задумываться о разработке программного обеспечения с точки зрения структуры данных, что приводит к чрезмерному проектированию, приводит к раздутию кода и огромным проблемам с производительностью, которые мне приходится тратить на очистку, когда это становится достаточно плохо.