ОО литература по программированию полна шаблонов проектирования. Большинство книг по объектно-ориентированному программированию посвящают одну или две главы разработке шаблонов, таких как фабрики и декораторы. Итак, каковы эквивалентные шаблоны в функциональных языках и почему никто еще не написал книгу о них? Есть ли что-то особенное в функциональных языках, которое устраняет необходимость в шаблонах проектирования?
75
Ответы:
ОО и функциональное программирование - это две совершенно разные парадигмы программирования, а шаблоны проектирования (DP) являются важной частью проектирования и программирования ОО. ДП не играют такой роли в функциональном программировании.
Можно даже сказать, что DP не нужны в функциональном программировании - нет никакого зуда, от которого лечится DP.
Можно утверждать, что шаблоны проектирования являются признаком отсутствия функций в языке программирования.
Питер Норвиг обнаружил, что 16 из 23 шаблонов в книге « Шаблоны проектирования» являются « невидимыми или простыми » в Лиспе или Дилане.
«Многие паттерны подразумевают объектную ориентацию или, в общем, изменяемое состояние, и поэтому могут быть неприменимы в функциональных языках программирования, в которых данные являются неизменяемыми или обрабатываются как таковые». - http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
источник
Джереми Гиббонс пишет книгу. Пока он не закончен, вы можете прочитать его блог « Шаблоны в функциональном программировании» . Он рекомендует читать его посты от самых старых до самых новых.
Просмотрите его публикации также. Он рассматривает шаблоны «Банды четырех» в шаблонах проектирования как «программы общего типа данных высшего порядка» и описывает шаблоны программирования с помощью рекурсивных уравнений в программировании оригами (складывает и разворачивает).
источник
Простой факт заключается в том, что многие OO Patterns будут считаться идиомами в функциональных языках (особенно в оригинальных шаблонах GoF). Например, шаблон Iterator (встроенный в такие языки, как C # сейчас) просто не нужен в Lisp или ML, которые имеют операторы последовательности.
Множество шаблонов, которые мы используем в ОО-системах, помогают нам избавиться от «несущественного», чтобы мы могли сосредоточиться на кодировании объектов. Другими словами, шаблоны являются решениями неинтересных частей приложения. Мы должны использовать шаблоны для решения общих задач, которые были решены ранее (например, шаблоны в шаблонах архитектуры приложений предприятия Фаулера для работы с такими вещами, как передача базы данных или шаблоны xUnit для ускорения модульного тестирования), чтобы мы могли сосредоточиться на повышении эффективности бизнеса для приложения.
Я уверен, что помимо специфики шаблонов GoF, существуют шаблоны проектирования, которые будут применимы и к функциональному программированию. Дело в том, что ОО является доминирующей парадигмой. Написание книги образцов, предназначенной для функциональных разработчиков ... откровенно говоря, не получит одобрения от издателя. Вот к чему это сводится. Рынку функциональных паттернов не хватает, чтобы иметь значительное количество книг, посвященных этой теме.
источник
Хорошая беседа (~ 45 минут) на эту тему Стюарта Сьерры:
http://www.infoq.com/presentations/Clojure-Design-Patterns
Не обязательно обязательный и авторитетный, но я узнал ряд его примеров из собственного опыта использования FP для анализа данных.
Примеры написаны на Clojure, но, вероятно, применимы к любому языку FP. Имена, которые он дает шаблонам, которые он покрывает:
источник
Если вы действительно заинтересованы в изучении шаблонов проектирования, смотрите не дальше, чем на Haskell. Если вы потратите время на то, чтобы выучить язык трудным путем, с которым вы столкнетесь и освоитесь с большинством основополагающих паттернов - они вписаны в язык.
Не пропускайте монады. Есть куча многословных объяснений, и для того, чтобы идеи впитались, нужно приложить некоторые усилия, но если вы продолжите подключаться, в конечном итоге это рассветит вас, и вы будете поражены тем, сколько шаблонов дизайна может быть построить поверх этой одной абстракции / интерфейса.
Как только вы взяли Хакелл, у вас будет достаточно арсенала FP, чтобы быть опасным. Дело в том, продолжай, пока не получишь. Там нет ярлыков.
источник
Поскольку методология проектирования для FP заключается в том, чтобы проектировать ваши типы так, чтобы они точно отражали проблемное пространство, а реализация должна следовать автоматически, FP-эквивалент книги по шаблонам проектирования - это что-то вроде чисто функциональных структур данных Криса Окасаки .
источник