Де всі схеми дизайну функціонального програмування? [зачинено]


75

Література з програмування OO рясна моделями дизайну. Більшість книг з об’єктно-орієнтованого програмування присвячують главу чи другу розробці моделей, таких як фабрики та декоратори. Отже, які еквівалентні зразки функціональних мов і чому ще ніхто не написав про них книгу? Чи є щось особливе у функціональних мовах, що заперечує потребу в моделях дизайну?


6
Однозначно є функціональні шаблони дизайну - візьмемо для прикладу пам’яті або монади - мені також цікаво, чи хтось зібрав їх в одному місці, хоча ...
— FinnNk

2
FinnNk Monad - це більше тип типу, ніж модель дизайну ^ _ ^
— альтернатива

Що стосується haskell, у Габріеля Гонзалеса є кілька публікацій у блозі, наприклад haskellforall.com/2012/08/the-category-design-pattern.html
— bennofs


1
Зменшення карти - це одне. Я розчарований, що не дуже хороший список моделей
— Шрідхар Сарнобат

Відповіді:


47

OO та функціональне програмування - це дві дуже різні парадигми програмування, а схеми проектування (DP) є важливою частиною проектування та програмування OO. DP не мають такої ролі у функціональному програмуванні.

Можна навіть сказати, що DP не потрібні у функціональному програмуванні - немає свербіння, від якого DP вилікується.

  • Можна стверджувати, що шаблони дизайну є ознакою відсутніх функцій мови програмування.

  • Пітер Норвіг встановив, що 16 з 23 моделей у книзі " Шаблони дизайну " є " невидимими або простими г" у Ліспі чи Ділані.

  • "Багато моделей передбачають орієнтацію на об'єкт або більш загальний стан, що змінюється, і тому можуть бути неприйнятними для функціональних мов програмування, в яких дані є незмінними або трактуються як такі". - http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29


41
Я не впевнений, що погоджуюся, що шаблони дизайну не стосуються ПП. ПП все ще представляє загальні проблеми, які вирішуються, зокрема, загальними шляхами. Різні проблеми вирішуються в ОО, але все-таки проблеми. Я думаю, що це, мабуть, просто щось, на що приділяється набагато менше уваги, ніж в ОО, оскільки ПП на сьогодні є менш поширеним у комерційному світі.
— d11wtq

22
Стверджувати, що модель дизайну не існує у функціональному програмуванні - це дезінформація. Найпростіший зустрічний приклад - монада. Не потрібно використовувати монаду у функціональному програмуванні, але це дуже поширений зразок, який люди дотримуються, щоб полегшити застосування програмування чистого функціоналу. Це по суті є визначення структури дизайну.
— voidvector

3
Шаблони дизайну стосуються всіх видів дизайну, будь то програмування чи дизайн будинку. Насправді самі поняття мов візерунків походять з архітектури: en.wikipedia.org/wiki/A_Pattern_Language .
— BobDalgleish

2
Хм. Помітні потоки, перевірка залізниць та пекло, майже кожна монада - це модель дизайну, правда?
— Чет

2
@voidvector Monads - це не просто модель дизайну. У FP монади використовуються як функтори між системами типів, а сама концепція походить від Теорії категорій, галузі математики. Вони використовуються для опису конкретного виду зв’язків між алгебраїчними структурами загалом. Точніше було б сказати, що функціональне програмування - це дизайн-датерн для полегшення використання математики в програмуванні.
— Іван Крамер

67

Джеремі Гіббонс пише книгу. Поки це не закінчено, ви можете прочитати його блог « Шаблони у функціональному програмуванні» . Він рекомендує читати свої пости від найдавніших до найновіших.

Перегляньте і його публікації . Він охоплює банду з чотирьох моделей у шаблонах дизайну як загальноприйнятих програм типу вищих порядків та описує схеми програмування з рекурсивними рівняннями в програмуванні Орігамі (складки та розгортання).


13

Простий факт полягає в тому, що багато моделей OO вважатимуться ідіомами функціональних мов (особливо оригінальних моделей GoF). Наприклад, шаблон Iterator (вбудований до таких мов, як C # зараз) просто не потрібен у Lisp або ML, у яких є оператори послідовності.

Багато моделей, які ми використовуємо в системах OO, є для того, щоб допомогти нам вивести «несуттєві» речі, щоб ми могли зосередитись на об'єктах кодування. Іншими словами, шаблони - це рішення нецікавих частин програми. Ми повинні використовувати шаблони для вирішення загальних потреб, які були вирішені раніше (як, наприклад, шаблони в Fowlers Patterns of Enterprise Application Architecture для роботи з такими речами, як передача бази даних, або xUnit Patterns для підвищення рівня тестування вашого блоку), щоб ми могли зосередитись на додаванні вартості бізнесу. для застосування.

Я впевнений, що поза специфікою моделей GoF, є моделі дизайну, які будуть застосовні і до функціонального програмування. Вся справа в тому, що ОО є домінуючою парадигмою. Написання книги з малюнком, націленої на функціональних розробників ... відверто кажучи, від видавця не потрапить зелене світло. Ось до чого зводиться. Не вистачає ринку функціональних моделей, щоб мати значну кількість книг, присвячених цій темі.


9

Гарна розмова (~ 45 хв) на цю тему Стюарт Сьєрра:

http://www.infoq.com/presentations/Clojure-Design-Patterns

Не обов'язково і авторитетно, але я визнав низку його прикладів із власного досвіду використання ФП для аналізу даних.

Приклади, написані Clojure, але, ймовірно, застосовні до будь-якої мови FP. Імена, які він надає шаблонам, які він охоплює:

  • Стан / Подія
  • Наслідки
  • Акумулятор
  • Зменшити / поєднати
  • Рекурсивне розширення
  • Трубопровід
  • Обгортка
  • Токен
  • Спостерігач
  • Стратегія

6

Якщо ви щиро зацікавлені у вивченні шаблонів дизайну, не дивіться далі, ніж Haskell. Якщо ви знайдете час, щоб вивчити мову важким способом, з яким ви зіткнетесь, і вам стане затишно з більшістю основоположних моделей - вони випечені на мові.

Не пропускайте монадів. Існує купа давно пояснених пояснень, і це потребує певних дій, щоб ідеї занурилися, але якщо ви продовжуєте підключатись, врешті-решт, це світає на вас, і ви будете вражені тим, скільки моделей дизайну може бути будувати поверх цієї однієї абстракції / інтерфейсу.

Після того, як ви покровите Haskell, вам вистачить арсеналу FP у вашому розпорядженні, щоб бути небезпечним. Справа в тому, тримайте його, поки не отримаєте. Немає ярликів.


-3

Оскільки методологія проектування FP полягає у розробці типів, щоб точно відображати проблемний простір, а реалізація повинна слідувати автоматично, еквівалент FP книги про шаблони дизайну є чимось подібним до чисто функціональних структур даних Кріса Окасакі .


1
Книга Окасакі є еквівалентом частини структури даних у численних структурах даних та книгах алгоритмів, які зазвичай розглядають лише змінні структури даних.
— AProgrammer

1
Я не думаю, що прирівнювати структури даних до моделей моделей відповідає законопроекту. Це не так, як програмісти ОО просто махають руками, поки не з’являться правильні визначення класу.
— davidk01

Так, книга Окасакі знаходиться на нижчому рівні, ніж дизайнерські зразки.
— FinnNk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.