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

StackOverflow https://stackoverflow.com/questions/1728160

Вопрос

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

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

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

Для AOP?

Это было полезно?

Решение

Связанный вопрос был задан ранее: «Заменяет ли функциональное программирование закономерности проектирования GOF», с отличными ответами.

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

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

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

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

Функциональное программирование имеет свои собственные практики, но они сильно отличаются от «шаблонов дизайна» в ООП. Они включают в себя использование полиморфизма, списков, функций высшего порядка, неизменности/чистоты, лени [не все важны или специфичны для FP] ... см. Также "Каковы основные концепции FP". Анкет Кроме того, классы типов (Haskell), модули и функторы (OCAML), продолжения, Монадс, молнии, Деревья пальцев, моноиды, стрелки, Абкуляционные функторы, Монад Трансформеры, много чисто функциональные структуры данных (книга) так далее. Функциональный жемчуг, Уже упомянутый Рэндаллом Шульц, в лучшем виде создают очень богатый ресурс FP.

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

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

Другие советы

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

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

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

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

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

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

Eсть Дизайн паттен в Руби.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top