Re: Несколько вопросов вразброс
Артём Н. -> debian-russian@lists.debian.org @ Wed, 04 Jul 2012 22:16:01 +0400:
>> Я бы ещё добавил, что ОО-парадигма рождается из желания перейти от
>> классической модели императивного вычислителя, как единого конечного
>> автомата, к модели многих изолированных конечных автоматов, взаимодействующих
>> через чётко ограниченные интерфейсы. Точно так же в электронике от "паука"
>> на рассыпухе, пришли сначала к модульным схемам, а потом к ИС.
АН> Ну и? Это естественный, эволюционный процесс. Разве должно быть иначе?
Естественный эволюционный процесс развивается параллельно по нескольким
веткам. В данном случае это существенно.
>> В такой интерпретации ясно, что если в неком языке императивный
>> вычислитель явно не просматривается, то и от ОО-модели этот язык не
>> особо выиграет.
АН> Почему не выиграет?
Потому что их приткнуть либо некуда, либо незачем.
АН> Объекты могут быть независимыми сущностями (собственно, так и есть,
АН> если они строго через интерфейсы взаимодействуют). Как объект
АН> реализован внутри - не важно (например, это может быть
АН> функциональная программа), порядок их взаимодействия тоже не очень
АН> важен (или он регулируется самими объектами). Ну, возможно назвать
АН> это какой-нибудь сопрограммой, например, а не объектом. Но суть от
АН> этого разве поменяется?
Все это можно сделать. Увеличение пользы где? Если у тебя
функциональная программа уже есть, то зачем тебе объект в виде
функциональной программы? Чего тебе в языке до введения объектов не
хватало?
Что же до остального... От того, что ты прячешь природу сущности за
некоторой абстракцией, ты что-то выигрываешь, но чем-то за это и
платишь. И очень не факт, что только производительностью, а не,
например, выразительной силой. У функции есть, например, операция
частичного применения, обладающая своей выразительной силой. У объекта
ее нет. Использование сопрограммы подразумевает (не для компьютера, для
другого программиста) определенный протокол взаимодействия. У объекта
он другой. Можно реализовать его с помощью сопрограммы, но это будет
менее естественно, чем воспользоваться родным, если он годится.
И так далее. В итоге ты начинаешь вносить в язык, обладающий
достаточной выразительной силой, парадигму, которая выразительную силу
языка не увеличивает, а при неаккуратном употреблении и уменьшает. А
смысл?
АН> Парадигма обязательно должна быть императивной, и где я ошибаюсь?
Объект - очень слабая абстракция. В более сильных парадигмах, чем
императивная (ну хорошо, процедурная) он просто не приносит достаточно
пользы.
А отдельные компоненты этой парадигмы (она же не цельная, она сборная
солянка) в остальных парадигмах либо есть, либо имеют не менее сильные
замены. В хаскеле, к примеру, нет наследования (иногда эмулируется, но
как правило, оно просто не нужно). Зато куда более развесистый
полиморфизм. Инкапсуляция является частным случаем абстракции Abstract
Data Type. И есть еще прорва парадигм, а если тебе не хватило - можно
легко сделать свою, хватило бы тебе самому на нее мозгов.
Reply to: