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


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.