Re: понимание ООП Алана Кея
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.02.23 05:44
Оценка: 8 (3) +1
Здравствуйте, vaa, Вы писали:

vaa>Вот он говорит:

vaa>

vaa>«Я жалею, что придумал термин «объекты» много лет назад,
vaa>потому что он заставляет людей концентрироваться на мелких идеях.
vaa>По-настоящему большая идея — это сообщения».

vaa>Разве объект не может быть сообщением?
В мире Кея — нет. Кей представлял себе объекты как "отдельные компьютеры". То есть приложение в его модели — это сеть "компьютеров", каждый из которых — чёрный ящик со своим состоянием.
Обмениваются они сообщениями. У сообщения в такой метафоре собственного поведения быть не может.

vaa>
vaa>set x = CreateObject("сообщение")
vaa>call послать x
vaa>

Обратите внимание на то, что кеевским сообщениям в современной ОО-нотации соответствуют методы.
То есть в вашей записи сообщением является "послать", а x — это дополнительный параметр этого сообщения.
Выходит, в современной нотации ваш вопрос можно переформулировать как "разве объект не может быть методом?"
И получается так, что — нет, не может. Поверх ООП можно построить какую-нибудь систему RTTI или рефлексии, где могут быть объекты-дескрипторы элементов системы типов, в том числе и методов.
Но дескриптор метода — не то же самое, что и метод.

vaa>Почему нельзя просто применить к данным функцию?

vaa>
vaa>let r = hash "some data"
vaa>

Потому, что в мире кеевского ООП, нет никаких "данных" и никаких "функций". Это — осознанный выбора, следствие одного из основных дизайн-решений. Кей это решение называл homoiconicity — то есть использование ровно одной метафоры вообще для всего.
В его мире, к примеру, нет "скаляров" или "плоских данных". Чтобы прибавить к двойке пятёрку нужно отправить объекту "2" сообщение "прибавить" с аргументом "5", где "5" — это ссылка на объект-пятёрку.
В ответ на это сообщение двойка пришлёт ссылку на другой объект типа "число". И значением этого числа будет "7".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.