Дизайн шаблона как (отсутствует) языковая особенность - PullRequest
6 голосов
/ 27 октября 2010

Иногда люди называют шаблоны проектирования отсутствующими функциями языка программирования.Чтобы избежать споров о том, что такое шаблон проектирования, допустим, что мы рассматриваем только оригинальные шаблоны GoF.Например, шаблон синглтона исчезает в Scala, который поддерживает одноэлементные объекты, используя ключевое слово object.

Существует немного ресурсов по этому поводу, в частности . В шаблонах дизайна отсутствуют функции языка из вики C2 или Являются ли шаблоны дизайна действительно языковыми недостатками? из SO.Но я не смог найти беспристрастного, объективного и всестороннего освещения этого вопроса.

В идеале мне нужна матрица с шаблонами проектирования GoF (строка) и некоторыми основными языками программирования (столбцы), где каждая ячейка будет ссылаться на обсуждение шаблона на конкретном языке программирования.

Чтобы избежать дебатов о том, что PL следует учитывать, мы также можем это исправить и выбрать: Java (как представитель ОО со статической типизацией), Smalltalk (как представитель с динамической типизацией), Haskell (как представитель функциональной функции), Scala (как гибридный oo / функциональный представитель), Lisp (как представитель метапрограммирования), JavaScript (как представитель на основе прототипов).И оставьте другие PL для примечаний или комментариев.Я знаю, что мы можем поспорить об этом выборе, но это было бы уже очень интересно иметь для этих языков.

В любом случае это всегда будет открытым вопросом, но я чувствую, что его спросили, как есть, это сфокусированодостаточно иметь лучший ответ.

Может быть, эта матрица уже где-то существует?Или у кого-то достаточно знаний для его создания?Или кто-то достаточно заинтересован, чтобы начать и сделать ответ вики, чтобы другие могли продолжить?

Ответы [ 2 ]

5 голосов
/ 27 октября 2010

Шаблоны в шаблонах проектирования являются подмножеством постоянно растущего набора шаблонов, которые люди используют при программировании на разных языках. Авторы совершенно ясно, что эти шаблоны применяются только к языкам ООП, поэтому многие из них не имеют смысла вне этого контекста.

В то же время существует множество шаблонов на других языках, которые не нужны на языке ООП. Учтите, что сами объекты являются образцом при реализации в C или Scheme. В сборке стек вызовов является шаблоном.

1 голос
/ 27 октября 2010

Лично я, потратив несколько лет на выполнение ООП, обнаружил, что проблема с шаблонами проектирования заключается в том, что они действительно выделяют проблемы с ООП и то, как трудно видеть шаблоны в данных, которые так связаны с областью, в которойэто моделируется.Иногда очень трудно увидеть лес за деревьями.Некоторые артефакты в ООП просто существуют для того, чтобы излечить проблемы, возникающие при мышлении в этой конкретной парадигме или обходе инкапсулированного состояния и доступа.

Я думаю, что шаблоны проектирования великолепны, и я их использую, однако они были расценены как решение проблемы, которая может существовать в неспособности ООП быть объективными в отношении структур и функций данных, поэтому пытались ипроверенная формула может быть применена.Простым примером будет объект Singleton.Это просто исчезает при использовании функциональных языков и не является проблемой.

Как сказал один джентльмен из SO, когда я спросил о UML и можно ли его использовать для моделирования функциональных языков, он сказал, что язык моделирования функциональныхЯзыки программирования это математика.Я думаю, что это ключ к пониманию того, почему шаблоны не имеют отношения к функциональным языкам программирования, поскольку теория, лежащая в их основе, заложена в структурах математики.

Я не могу помочь вам с листом кроватки, ноЯ могу быть совершенно уверен, что шаблоны GOF не применимы к функциональным языкам программирования, поскольку они напрямую переходят к реальным шаблонам математики, поскольку красота функциональных языков заключается в том, что они напрямую (в большинстве случаев) отображаются на многие годы решения проблем.в математике.Возможно, нахальное утверждение состоит в том, что шаблоны проектирования функциональных языков - это математические теоремы с отношением один к одному, где ОО имеет форму искусственных абстракций, которые иногда мешают.

Я думаю, что есть некоторые принципы проектированиякоторые пересекаются со всеми языками, такими как MVC, многоуровневая архитектура, масштабирование и масштабирование.Но я бы сказал, что это не шаблоны проектирования, а скорее хорошие практики проектирования программного обеспечения.

...