Я б не зосереджувався на об'єктах реального світу, і я також не зосереджувався на обміну повідомленнями. Швидше за прикладом, який я використав, - це графіка, де ви хочете мати об’єкти, які «вміють малювати самі».
Наприклад, якщо ви працюєте в C, де немає вбудованого ОО, вам може зручно зберігати покажчики на функції всередині об’єктів даних. Якщо ви це зробите, то ви вклинюєте свій шлях до OOP.
Я не люблю посилатися на Алана Кей так, ніби він Мойсей роздавав планшети. Швидше, він навчався з математики та біографії, я вважаю. Як математик, він, мабуть, мав деяке знайомство з обчисленням Лямбди, яке було досить абстрактним, не пов'язаним з обладнанням. У LC можна сказати, що все є "об'єктом" - як число 0, так і число 1 - це об'єкти, які оцінюють різні речі при наданні аргументу. Це призводить до Smalltalk досить красиво. Ідея "повідомлення" така, що ми можемо уникати розмов про обладнання. Ви можете сказати, коли ви викликаєте функцію (або метод об'єкта), ви надсилаєте їй повідомлення, а коли він повертається, він надсилає вам повідомлення (або у ваше продовження). Це було застосовано як спосіб опису способів спілкування між програмами, що працюють асинхронно на окремому апаратному забезпеченні. Це чудово, але для звичайного програмування це захоплюється. Щоб отримати значення ідеї OOP, вам не потрібно заперечувати актуальність конкретної задачі, яку ви намагаєтеся виконати, або заперечувати конкретність обладнання, яке ви працюєте. Я думаю, що навчання про OOP з точки зору надуманих аналогій змушує людей занадто сильно замислюватися про розробку програмного забезпечення з точки зору структури даних, що призводить до її надмірного проектування, що призводить до розмивання коду та масових проблем з продуктивністю, що мені доведеться витрачати час на очищення стає досить погано.