Різниця між шаблоном і принципом


20

Яка різниця між об'єктно-орієнтованими моделями дизайну та принципами? Вони різні речі? Наскільки я зрозумів, вони обидва намагаються досягти якоїсь спільної мети (наприклад, гнучкість). Тож чи можу я сказати, що модель є принципом і навпаки?

Принцип проектування = твердий (тобто принцип інверсії залежності)

Шаблон дизайну = Gof (тобто абстрактний заводський візерунок)

Відповіді:


24

Ні, вони не однакові.

Шаблони - це звичайні рішення об'єктно-орієнтованих проблем програмування . (Мені невідомі жодні подібні книги для функціонального чи декларативного програмування.) Ідея викристалізувалася у знаменитій книзі "Шаблони дизайну" "Бандою чотирьох" у 1995 році.

Як зазначає Андре, зразки поширені у кожній парадигмі. Я ще раз повторюю своє попереднє твердження: я не знаю жодної подібної книги для функціонального чи декларативного програмування, але Андре виправив моє невігластво за допомогою посилання, яке він подав нижче. (Дякую, Андре.)

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


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

@ AndréParamés Швидке спостереження змушує мене повірити, що Джеремі Гіббонс говорить про мовні ідіоми , а не про схеми дизайну.
Ізката


19

Ці поняття не однакові:

* Принцип дизайну: * Принципи проектування програмного забезпечення - це набір керівних принципів, які допомагають нам уникнути поганого дизайну. як: Відкрити принцип закриття

* Шаблон дизайну: * Шаблон дизайну - це загальне багаторазове рішення часто зустрічається проблеми в заданому контексті в розробці програмного забезпечення. Як: Сінглтон


7

Візерунки - це принципи, а реалізація - шаблони.

Принципом було б "непряме", яке може бути виконане за допомогою "фабричного" зразка, який в кінцевому підсумку реалізовується як клас із заводськими методами.


3

Ну, Принципи - це правила, а шаблони - їх конкретні приклади.


1
ви можете навести кілька прикладів?

Будь ласка, розкажіть нам принцип, який вимагає створення заводу або ланцюжка відповідальності або легкої ваги.
duffymo

2
@duffymo Well Factory, наприклад, дотримується принципу інверсії залежності (не впорскування); і клієнт, і екземпляр залежать від абстракції - інтерфейсу. Ланцюг відповідальності базується на принципах вільного з’єднання та розділення контролів. Легкий вага, я вважаю, має лише підвищення продуктивності.
m3th0dman

3

Візерунки - це речі більш високого рівня, ніж принципи. Шаблони вирішують конкретні проблеми. Принципи можуть застосовуватися в будь-якому місці незалежно від контексту. Насправді шаблони, засновані на принципах (SRP, DRY тощо)

EG Давайте розглянемо стратегію. Він визначає сімейство алгоритмів, інкапсулює кожен з них і робить їх взаємозамінними. Отже, у вас тут концепція алгоритму високого рівня. З державним зразком у вас є концепція держави на високому рівні. З принципами у вас немає понять високого рівня. Принципи - це будівельні блоки, які використовуються малюнками для досягнення мети. При реалізації схеми стратегії ви використовуєте SOLID:

  • SRP - Ви визначаєте код, який відповідає за алгоритм і витягуєте його з іншого коду.
  • OCP - Ви визначаєте абстракцію, яка представляє всі різні алгоритми та використовуєте її
  • LSP - ви не використовуєте конкретні класи алгоритмів у коді клієнта, а лише абстракцію

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

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

4
Я бачу, що ви мали на увазі під цим, і зрозуміти ваше мислення з цього питання. Однак це суперечить загальному значенню понять "високий рівень" та "низький рівень" у контексті програмного забезпечення. (Чомусь я не можу @ -назначити вас.)

1
"Шаблони - це речі більш високого рівня, ніж принципи". Я прошу відрізнятись ==> Шаблон близький до реалізації (тобто низький рівень), а принцип - правило високого рівня.
Рауль

2

Шаблони, де спочатку документували архітектуру. В архітектурі застосовують речі, починаючи від розміщення дверей у кімнаті і закінчуючи компонуванням села.

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

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

Розглянемо

  • Вам запропоновано використовувати шаблон, як абстрактний заводський візерунок, як єдиний підхід для розробки програми. Це було б доречно? Ні, тоді це швидше закономірність.
  • Вам запропоновано застосувати DRY до всіх компонентів? Це було б доречно? Так, тоді, швидше за все, це буде Принцип.

1

Принцип дизайну ОО -

Принцип ОО - це набір керівних принципів, що забезпечує концепцію ООП. Виходячи з концепції OOP, це визначає способи проектування кращого, кращого дизайну. Основний принцип проектування OO - SOLID.

Шаблон дизайну забезпечує загальне рішення проблеми дизайну. Зверніть увагу, що "шаблон дизайну" може бути застосований і до об'єкта, орієнтованого на полудень. Отже, схеми проектування ОО (OODP) - це ті, що дають загальне рішення для об'єктно-орієнтованого дизайну, заснованого на принципі ОО. Шаблони дизайну виявлені, а не винайдені. Існує кілька способів визначення OODP, і найвідоміший - BSC [Behavioral Structural Creational].

Далі йде посилання для детального пояснення. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

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