[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Несколько вопросов вразброс



Артём Н. -> debian-russian@lists.debian.org  @ Wed, 04 Jul 2012 22:16:01 +0400:

 >> Я бы ещё добавил, что ОО-парадигма рождается из желания перейти от
 >> классической модели императивного вычислителя, как единого конечного
 >> автомата, к модели многих изолированных конечных автоматов, взаимодействующих
 >> через чётко ограниченные интерфейсы. Точно так же в электронике от "паука"
 >> на рассыпухе, пришли сначала к модульным схемам, а потом к ИС.
 АН> Ну и? Это естественный, эволюционный процесс. Разве должно быть иначе?

Естественный эволюционный процесс развивается параллельно по нескольким
веткам.  В данном случае это существенно.

 >> В такой интерпретации ясно, что если в неком языке императивный
 >> вычислитель явно не просматривается, то и от ОО-модели этот язык не
 >> особо выиграет.
 АН> Почему не выиграет?

Потому что их приткнуть либо некуда, либо незачем.

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

Все это можно сделать.  Увеличение пользы где?  Если у тебя
функциональная программа уже есть, то зачем тебе объект в виде
функциональной программы?  Чего тебе в языке до введения объектов не
хватало?

Что же до остального...  От того, что ты прячешь природу сущности за
некоторой абстракцией, ты что-то выигрываешь, но чем-то за это и
платишь.  И очень не факт, что только производительностью, а не,
например, выразительной силой.  У функции есть, например, операция
частичного применения, обладающая своей выразительной силой.  У объекта
ее нет.  Использование сопрограммы подразумевает (не для компьютера, для
другого программиста) определенный протокол взаимодействия.  У объекта
он другой.  Можно реализовать его с помощью сопрограммы, но это будет
менее естественно, чем воспользоваться родным, если он годится.

И так далее.  В итоге ты начинаешь вносить в язык, обладающий
достаточной выразительной силой, парадигму, которая выразительную силу
языка не увеличивает, а при неаккуратном употреблении и уменьшает.  А
смысл?

 АН> Парадигма обязательно должна быть императивной, и где я ошибаюсь?

Объект - очень слабая абстракция.  В более сильных парадигмах, чем
императивная (ну хорошо, процедурная) он просто не приносит достаточно
пользы.

А отдельные компоненты этой парадигмы (она же не цельная, она сборная
солянка) в остальных парадигмах либо есть, либо имеют не менее сильные
замены.  В хаскеле, к примеру, нет наследования (иногда эмулируется, но
как правило, оно просто не нужно).  Зато куда более развесистый
полиморфизм.  Инкапсуляция является частным случаем абстракции Abstract
Data Type.  И есть еще прорва парадигм, а если тебе не хватило - можно
легко сделать свою, хватило бы тебе самому на нее мозгов.


Reply to: