Шаблоны для функционального, динамического и аспектно-ориентированного программирования - PullRequest
10 голосов
/ 13 ноября 2009

У нас есть очень хорошая книга GoF (Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения) о шаблонах в объектно-ориентированном программировании, а также множество статей и ресурсов в Интернете на эту тему.

Существуют ли книги (статьи, ресурсы) по шаблонам (передовым методам) для функционального программирования?

Для динамического программирования на таких языках, как Python и Ruby?

Для АОП?

Ответы [ 6 ]

15 голосов
/ 30 ноября 2009

Ранее был задан связанный вопрос: "Заменяет ли функциональное программирование шаблоны проектирования GoF" , с отличными ответами.

Эквивалент «шаблонов проектирования» в FP очень расплывчатый. В общем, каждый раз, когда вы видите «образец» в вашем коде, вы должны создавать что-то, чтобы покрыть все его применения единообразным способом. Часто это будет функция высшего порядка.

Например, следующий код C

for (int i = 0; i < n; i++)
  if (a[i] == 42)
    return true;
return false;

можно подумать о некотором базовом «шаблоне проектирования» - проверке, есть ли какой-то особый элемент в списке. Этот фрагмент может появиться много раз в коде с различными условиями. В FP вы просто используете функцию более высокого порядка несколько раз. Это больше не «шаблон».

Функциональное программирование имеет свои собственные практики, но они сильно отличаются от «шаблонов проектирования» в ООП. Они включают в себя использование полиморфизма, списков, функций высшего порядка, неизменности / чистоты, лени [не все являются существенными или специфичными для FP] ... См. Также «что является основными понятиями FP» . Также, классы типов (Haskell), модули и функторы (OCaml), продолжения , монады , молнии , пальца деревьев , моноиды , стрелки , аппликативные функторы , монадные трансформаторы , многие чисто функциональные структуры данных ( книга * 1033) *) и т. д. Функциональные жемчужины , уже упомянутые Рэндаллом Шульцем, в лучшем случае образуют очень богатый ресурс FP.

Чтобы научиться писать идиоматический код, подойдет любая книга / ресурс на функциональном языке программирования IMHO (например, RWH и LYAH ); различия между императивным и функциональным мышлением всегда объясняются там.

В динамических языках ссылка Джеффа Фостера - хорошая коллекция; здесь - очень умное использование мемоизации в JavaScript, которое можно рассматривать как «шаблон проектирования».

6 голосов
/ 28 ноября 2009

Список шаблонов проектирования, описанных в GoF, написан для таких языков, как C ++ и Java. Иногда это считают списком обходных путей, чтобы сделать негибкие языки более динамичными. Например, шаблон Visitor на самом деле не нужен в Ruby, потому что вы можете просто изменить добавление функций-членов в свой класс во время выполнения. Шаблон Decorator устарел, если вы можете использовать миксины.

По моему опыту, когда я реализую решение на C ++, я склонен тратить большую часть своего времени на написание кода скаффолдинга. Я начинаю с создания платформы, которая позволяет мне мыслить в программной области моего приложения. Шаблоны проектирования, вероятно, были разработаны для классификации различных типов лесов.

Я должен отметить, что когда я программирую на Ruby, у меня не так много кода поддержки. Кажется, в этом нет необходимости.

Моя теория состоит в том, что другие языки не подчеркивают концепцию шаблонов проектирования просто потому, что их базовые языковые конструкции достаточны. В защиту Java и C ++: возможно, это связано с тем, что функциональные языки и языки AOP часто используются в более конкретных проблемных областях или нишах, а Java и C ++ используются для всего.

А теперь для чего-то другого. Если вам надоест дизайн ОО и вы хотите узнать что-то новое, то вас может заинтересовать книга Элементы программирования , написанная Степанов . В этой книге он объясняет, как к программированию можно подходить с математической точки зрения. Для предварительного просмотра, ознакомьтесь с его примечаниями к классу для Adobe (можно найти среди прочих на эта страница ). Вы также можете быть заинтересованы в Сборник статей Adobe .

2 голосов
/ 13 ноября 2009
1 голос
/ 24 ноября 2009

Разве Функциональные Жемчужины (один из) не являются каноническим набором (-ами) шаблонов проектирования для функционального программирования?

0 голосов
/ 01 декабря 2009

Лично мой самый важный образец для динамических языков - писать тесты. Это даже важнее, чем в статически типизированных языках.

0 голосов
/ 13 ноября 2009

В Ruby есть Design patten .

Помимо шаблонов проектирования, упомянутых в GOF, в нем также перечислены некоторые другие шаблоны, например Соглашение о конфигурации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...