Я только слышал, как термин «шаблон проектирования» используется для объектно-ориентированного кода, и шаблоны GoF включают только шаблоны проектирования ООП, но шаблоны проектирования - это элегантные решения для часто возникающих проблем программирования, верно? Там нет ничего, что говорит, что они должны быть ограничены ООП, не так ли?
Я хотел бы увидеть некоторые примеры шаблонов проектирования вне сферы объектно-ориентированного программирования. У тебя есть? Существуют ли они вообще (не должно быть написано ни одной книги, такой как книга GoF, ее просто нужно использовать; этого достаточно)?
Они могут быть специфическими для некоторых языков программирования, но предпочтительны общие (на уровне парадигмы) паттерны других парадигм, чем объектно-ориентированная.
источник
Ответы:
Посмотрите в серии Linux Kernel Design Patterns. Статьи связаны с не объектно-ориентированным языком (C), и я считаю, что они хорошо написаны:
источник
На самом деле это парадокс - один из самых популярных паттернов Non-OO - это ... «Класс».
Поскольку ОО был изобретен не на ОО-языках, разработчикам приходилось имитировать его (и они делают это даже сейчас) - так и появилась модель. LISP и C являются примерами этого.
Но примите мой совет: не делайте типичной ошибки - не используйте шаблоны только потому, что это круто , вам нужны серьезные причины, чтобы оправдать использование шаблонов (по крайней мере, ОО).
Возьмем, к примеру, шаблон Command - хотя он и хорош, и он отсоединяет вызывающего от получателя, его не следует использовать, если он вам действительно не нужен - поскольку операции должны выражаться с помощью глаголов - что означает методы. И используя команды повсюду, вы получите кучу полностью децентрализованных OO-лямбд -> то же самое будет верно для многих стратегий.
источник
«Шаблон дизайна» на самом деле является эвфемизмом для «обходного пути». Шаблоны проектирования были изобретены для устранения недостатков и недостатков в ОО-языках . Например, возьмем шаблон итератора, который в конечном итоге привел к появлению коллекций в Java. Groovy избавился от многих других шаблонов, преобразовав их в языковые функции: вам больше не нужен шаблон декоратора, поскольку вы можете добавлять методы к существующим классам в Groovy.
Это означает, что вы можете найти шаблоны дизайна везде. Фактически, каждая «лучшая практика» может рассматриваться как простая форма шаблона проектирования.
источник
LtU упоминает, что Джереми Гиббонс пишет книгу о шаблонах в функциональном программировании. Посмотрите паттерны Мистера Гиббона в блоге по функциональному программированию, чтобы найти несколько тизеров. Обратите внимание, что он рекомендует читать свои посты от самых старых до новых.
Его статья « Шаблоны проектирования как общие программы типов данных высшего порядка» (pdf) функционально моделирует шаблоны «банды четырех»: составной, итератор, посетитель и построитель. Он описывает шаблоны программирования с помощью рекурсивных уравнений в программировании оригами (складывает и разворачивает).
источник
Существуют шаблоны проектирования SQL .
И некоторые функциональные шаблоны дизайна также существуют - см. Здесь для Scala.
источник
Вместо того, чтобы называть шаблоны проектирования, не относящиеся к oo, я хотел бы привести несколько примеров книг, которые имеют много шаблонов проектирования (в них некоторые шаблоны будут по-прежнему относиться к OO):
Надеюсь это поможет
источник
В функциональном программировании (особенно на Haskell) есть много шаблонов и идиом, которые не очень хорошо отображаются в ООП. Фантомные типы - хорошо известный пример, и вы можете найти гораздо больше на вики-странице haskell по идиомам .
источник
Модульное программирование довольно популярно для числовых библиотек и математических приложений (общеизвестно, что числовое программное обеспечение трудно моделировать с использованием объектно-ориентированных шаблонов, в основном потому, что вы можете инкапсулировать очень мало).
источник
Хорошим примером шаблонов, отличных от ООП, является мой самый любимый каталог шаблонов: « Организационные шаблоны гибкой разработки программного обеспечения » Джеймса О. Коплина . Эта книга не о шаблонах программного обеспечения, а о людях, каталоге для создания успешных команд. Каждый менеджер должен прочитать эту книгу!
источник
Мне нравится думать о Data Strucutres, таких как очереди, связанные списки, деревья, графики и т. Д. Как шаблоны. Они определяют определенные шаблоны для хранения данных и их обработки. Они могут показаться примитивными по сравнению с более высококлассными моделями Gang of Four, но, тем не менее, они являются шаблонами. Я имею в виду, что произошло бы, если бы кто-то реализовал стек как FIFO вместо LIFO и наоборот для очереди и назвал их иначе?
источник