Шаблони дизайну, які не є OOP? [зачинено]


70

Я чув лише, що термін "модель дизайну" використовується для об'єктно-орієнтованого коду, а шаблони GoF включають лише схеми дизайну OOP, але шаблони дизайну - це елегантні рішення для часто виникаючих проблем з програмуванням, правда? Ніщо там не говорить про те, що вони повинні бути обмежені OOP, чи не так?

Я хотів би побачити кілька прикладів моделей дизайну поза сферою об'єктно-орієнтованого програмування. Чи є у вас? Чи такі існують (жодна книга, як, наприклад, книга GoF, не обов’язково повинна бути написана, їх просто слід використовувати; цього достатньо)?

Вони можуть бути специфічними для деяких мов програмування, але загальні (на рівні парадигми) переважні інші парадигми, ніж орієнтована на об'єкт.


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

14
Ну, а об'єкти - це шаблон дизайну в мовах, що не належать до ОО :)
back2dos

1
що ще гірше, тому, що книги з візерунками створили цілий клас людей, які вважають, що будь-яку проблему слід вирішити, застосувавши певний зразок (як правило, останній, який навчав учитель школи, який сам вважає те саме).
jwenting

Відповіді:


25

12

Насправді це парадокс - однією з найпопулярніших моделей, що не належать до OO, є ... "Клас".

Оскільки OO був винайдений мовами, що не належать до ОО, розробникам довелося моделювати його (і вони це роблять навіть зараз) - так закономірність народилася. Приклади цього є LISP та C.

Але прийміть мою пораду: не робіть поширених помилок - не використовуйте шаблони тільки тому, що це круто , вам потрібні серйозні причини, щоб виправдати використання шаблону (принаймні, OO).

Візьмемо для прикладу командний зразок - хоча це приємно & він знімає абонента від приймача, він не повинен використовуватися, якщо вам це справді не потрібно - оскільки операції повинні бути виражені за допомогою дієслів - що означає методи. І використовуючи команди на всіх місцях, ви б закінчилися з купою повністю децентралізованих OO-лямбда -> те ж саме було б справедливо і для багатьох стратегій.


11

"Шаблон дизайну" - це насправді евфемізм для "вирішення проблеми". Шаблони дизайну були винайдені для усунення недоліків та недоліків в мовах ОО . Для прикладу візьмемо шаблон ітератора, який врешті-решт призвів до введення колекцій на Java. Groovy позбувся багатьох інших шаблонів, перетворивши їх на мовні особливості: Вам більше не потрібен шаблон декоратора, оскільки ви можете додавати методи до існуючих класів у Groovy.

Це означає, що ви можете знайти шаблони дизайну скрізь. Насправді кожну "найкращу практику" можна вважати простою формою дизайну.


9
Домовились! Від Пола Грема : «Наприклад, в OO світі ви чуєте багато про" шаблонів "[...] Коли я бачу закономірності в моїх програмах, я вважаю , це ознака неблагополуччя форма програми повинна відображати .. тільки будь-яка проблема, яку вона повинна вирішити. Будь-яка інша закономірність коду - це принаймні для мене ознака того, що я використовую абстракції, які не є достатньо потужними - часто я створюю вручну розширення якогось макросу що мені потрібно написати ».
Андрес Ф.

7
Я не згоден з тим, що модель дизайну є вирішувальною. Два - протилежності. Обхідне рішення - це короткочасний виправлення, який складається разом, щоб обійти певну перешкоду. Шаблони дизайну - це довгострокові рішення, які можна використовувати повторно. Метою малюнка декоратора є функціональне додавання "без" модифікації класу. Ви можете розмістити різні декоратори на об'єкт, не знаючи про це об’єкта.
Деспертар

Причина, по якій шаблони вважаються "вирішенням", полягає в тому, що прикраса предмета має бути особливістю мови. Натомість нам потрібно написати багато-багато рядків коду, щоб реалізувати це. Наприклад, модель ітератора стала частиною багатьох сучасних мов. Для старих мов OO вам потрібно перескочити пару обручів, щоб імітувати їх.
Аарон Дігулла

@AaronDigulla Я не бачу, чому ви вважаєте, що така модель, як декоратор, є такою важкою реалізацією; ви говорите про кілька рядків коду. Клас містить інший клас і пересилає до нього запити з деякою додатковою функціональністю. Він використовує успадкування та композицію таким чином, що робить виклик прикрашеного об'єкта рівнозначним виклику самого об'єкта. Я вважаю цю прозорість сильною. Це дозволяє міняти декораторів під час виконання. Коли ви говорите, що groovy не потрібен декоратор, тому що він може додати методи до класу, це здається, що вам не вистачає точки.
Деспертар

2
Шаблон ітератора не був замінений жодною новою мовною особливістю в сучасних мовах. Він просто поставляється з типовою реалізацією для загальних колекцій. Тільки тому, що вона має типову реалізацію, це не означає, що шаблон не використовується. Якщо ви пишете власну колекцію, вам доведеться її реалізувати самостійно.
Деспертар

10

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

Його статті " Шаблони дизайну" як програми для вищого порядку даних (pdf) функціонально моделює банду з чотирьох візерунків: композит, ітератор, відвідувач та будівельник. Він описує закономірності програмування з рекурсивними рівняннями в програмуванні Орігамі (складки та розгортання).



7

Замість того, щоб називати шаблони дизайну, що не входять у виробництво, я хотів би навести кілька прикладів книг, у яких багато моделей дизайну (в них деякі візерунки все ще будуть специфічними для OO):

Сподіваюсь, це допомагає


Це я також рекомендую, а також схеми інтеграції підприємств Hohpe & Woolf's Enterprise .
TMN

Шаблони Фоулера високо OO :)
Девід Конде

@David Conde :) Більшість з них є чистими OO, усі вони записані OO способом, але деякі з них застосовуються і до не OO: подивіться "Шаблони веб-презентацій", "Шаблони стану сеансу", "Шаблони розповсюдження "
KeesDijk


1

Модульне програмування є досить популярним для чисельних бібліотек та математично важких додатків (численному програмному забезпеченню, як відомо, важко моделювати за допомогою об'єктно-орієнтованих шаблонів, головним чином тому, що ви можете інкапсулювати дуже мало).


Використовується в JS & "pure C": en.wikipedia.org/wiki/Module_pattern
umlcat

1

Хороший приклад моделей, що не належать до ООП, - це мій абсолютний улюблений каталог шаблонів: Організаційні патерни Agile Development Software, Джеймс О. Коплін . Ця книга не стосується програмних моделей, а про людей, каталог для створення успішних команд. Кожен керівник повинен прочитати цю книгу!


0

Мені подобається вважати структури структури даних, такі як черги, пов'язані списки, дерева, графіки тощо. Вони визначають певні шаблони для зберігання даних та їх обробки. Вони можуть здатися примітивними порівняно з більш високими кінцевими малюнками «Банди з чотирьох», але все ж вони є моделями. Я маю на увазі, що буде, якби хтось реалізував стек як FIFO замість LIFO і навпаки для черги та назвав їх інакше?

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