Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет pinocchio964 ([info]pinocchio964)
@ 2011-10-07 13:46:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение: hungry
Музыка:Los Hermanos - A Flor

ООП vs ФП
ООП держится на трёх основаниях - инкапсуляции, наследовании и полиморфизме.

Правильно ли говорить что ФП это рекурсия, иммутабельность и ленивость?

Вопрос не праздного любопытства, кстати, а практики.

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

Реально ли создать на основе только рекурсии, иммутабельности и ленивости что-то вроде SOLID'а для функциональных языков? Т.е. что бы задачи проектирования сводились к оптимизации конструкций в рамках конкретных критериев отвечающих функциональным языкам программирования.

Пока что ответа я не знаю.



(Добавить комментарий)


[info]tristes_tigres
2011-10-07 22:08 (ссылка)
> Правильно ли говорить что ФП это рекурсия, иммутабельность и ленивость?

Мне кажется, что важнее обращение с функциями как first-class values.

(Ответить) (Ветвь дискуссии)


[info]pinocchio964
2011-10-08 16:10 (ссылка)
Спорно, в C++ например и объекты не в полной мере являются first-class values. Мы можем создавать только либо встроенные типы, либо объявленные классы, структуры и объединения. Нет возможности сконструировать объект в runtime. Но это не мешает быть ему объектно-ориентированным языком.

Даже если требовать в первую очередь функции как first-class values, то что это даёт в проектировании? Т.е. где критерии хорошего ФП кода?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]tristes_tigres
2011-10-08 21:20 (ссылка)
> Т.е. где критерии хорошего ФП кода?

Речь идёт не о коде, а о языке.

Ленивость же к функциональности отношения не имеет вообще никакого, функциональные языки есть как ленивые, так и строгие.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]pinocchio964
2011-10-08 21:35 (ссылка)
Наверное поэтому я использовал аббревиатуру ФП, а не ФЯ? Потому что мне интересней проектирование в рамках функциональной парадигмы, а не сами функциональные языки программирования. ФП можно применять и в c++. И она применяется, довольно эффективно. Но к сожалению только как вспомогательное средство.
Ленивость в ООП оценивают неоднозначно, есть несколько критических статей о отложенном копировании в c++ у Саттера.
В ФП мне казалось ленивость более распространена, по крайней с критикой ленивых вычислений там я не сталкивался. А в Haskell'е наоборот ленивость является одной из отличительных особенностей.
Хотя проектированием приложений в Haskell'е я особо не занимался, и не знаю насколько это продуктивно.

(Ответить) (Уровень выше)