Alan Kay Was Wrong About Him Being Wrong

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Время от времени кто-то спрашивает меня, что я думаю о том, что Алан Кэй, отец ООП, дизайнер Смолтолка, первого объектно-ориентированного языка, сказал в 1998 году о ООП. Он буквально сказал, что сам термин “объект” вводит в заблуждение, и более подходящим было бы использовать термин “посылка”. Вот что я думаю.

Я считаю, что существуют два ортогональных способа взаимодействия между объектами: посылка и композиция. Допустим, у нас есть точка и холст:

“Вот как будет выглядеть обмен сообщениями:”

Проблема с сообщениями заключается в том, что они поддерживают объекты на одном уровне абстракции. Они взаимодействуют как равноправные и независимые “модули”, отправляя друг другу сообщения с данными. Несмотря на то, что они выглядят объектно-ориентированными, весь шаблон взаимодействия очень процедурный. Мы стараемся инкапсулировать как можно больше внутри одного объекта, однако неизбежно приходится раскрывать много его данных, чтобы “связать” его с другими объектами.

Мы превращаем объекты в “маленькие компьютеры”, как об этом говорят некоторые книги. Они ожидают поступления данных, обрабатывают их и возвращают новые данные. Проблема поддерживаемости не решается с помощью такого подхода - нам все равно приходится иметь дело с большим количеством данных, помня их семантику за пределами объектов. Другими словами, здесь нет истинной инкапсуляции.

С другой стороны, вот как будет выглядеть композиция:

Каждый раз, когда нам нужно обеспечить коммуникацию объектов, мы создаем более крупный объект, который инкапсулирует более примитивные, позволяя им взаимодействовать внутри себя. Конечно, данные также будут передаваться от объекта к объекту, но это будет происходить внутри более крупного объекта. Мы даже можем сделать инкапсулятор и инкапсулированный объект “друзьями”, как я ранее предложил, чтобы сделать это взаимодействие более прозрачным и избежать выставления данных через геттеры или даже принтеры.

Позвольте мне снова процитировать Алана Кея:

Мне кажется, что он имеет в виду модули, которые не являются объектами. Это разные вещи. Модули - это элементы архитектуры, а объекты - элементы дизайна. Это два разных уровня. На уровне архитектуры, очевидно, нам нужны сообщения, и заявление Кея абсолютно верное. Однако, на уровне дизайна нам нужны составные структуры для повышения поддерживаемости, и сообщения не могут помочь нам достичь этой цели.

Таким образом, я считаю, что Алан Кей был прав, когда изобрел объекты, назвал их объектами и дал их программированию название “объектно-ориентированный”.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 10:48

sixnines availability badge   GitHub stars