Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В программной инженерии , A разработки программного обеспечения модель является общим, многоразовые решением для часто встречающихся проблем в данном контексте в разработке программного обеспечения . Это не законченный дизайн, который можно преобразовать непосредственно в исходный или машинный код . Скорее, это описание или шаблон решения проблемы, который можно использовать во многих различных ситуациях. Шаблоны проектирования - это формализованные передовые практики, которые программист может использовать для решения общих проблем при разработке приложения или системы.

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

Шаблоны проектирования можно рассматривать как структурированный подход к компьютерному программированию, промежуточный между уровнями парадигмы программирования и конкретным алгоритмом .

В недавнем исследовании обзора, Wedyan и Abufakher изучить шаблоны проектирования и качества программного обеспечения и вывод: «Наше исследование показало , что первичные исследования дают эмпирические данные о положительном влиянии документации экземпляров конструкций шаблонов на программу понимания, и , следовательно, ремонтопригодность. Хотя этот результат неудивителен, он, тем не менее, имеет два признака. Во-первых, разработчикам следует приложить больше усилий, чтобы добавить такую ​​документацию, даже если в форме простых комментариев в исходный код. Во-вторых, при сравнении результатов различных исследований влияние документации необходимо учитывать ". [1]

История [ править ]

Узоры возникла как архитектурная концепция по Кристоферу Александер , как уже в 1977 г. (ср «Узор улиц,» Журнал AIP, сентябрь, 1977, т. 32, № 3, стр. 273-278). В 1987 году Кент Бек и Уорд Каннингем начали экспериментировать с идеей применения шаблонов в программировании, особенно в языках шаблонов, и представили свои результаты на конференции OOPSLA в том же году. [2] [3] В последующие годы Бек, Каннингем и другие продолжили эту работу.

Паттерны проектирования приобрели популярность в информатике после того, как в 1994 году так называемой «Бандой четырех» (Gamma et al.) Была опубликована книга « Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования» , которую часто называют «GoF». В том же году была проведена первая конференция по языкам шаблонов программирования , а в следующем году был создан Портлендский репозиторий шаблонов для документации шаблонов проектирования. Объем термина остается предметом споров. Известные книги в жанре паттернов дизайна включают:

  • Гамма, Эрих ; Хелм, Ричард ; Джонсон, Ральф ; Влиссидес, Джон (1995). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон-Уэсли . ISBN 978-0-201-63361-0.
  • Бринч Хансен, Пер (1995). Исследования в области вычислительной науки: парадигмы параллельного программирования . Прентис Холл. ISBN 978-0-13-439324-7.
  • Бушманн, Франк ; Менье, Регина; Ронерт, Ганс; Соммерлад, Питер (1996). Шаблонно-ориентированная архитектура программного обеспечения, Том 1: Система шаблонов . Джон Вили и сыновья. ISBN 978-0-471-95869-7.
  • Бек, Кент (1997). Шаблоны передовой практики Smalltalk . Прентис Холл. ISBN 978-0134769042.
  • Шмидт, Дуглас К .; Сталь, Михаил; Ронерт, Ганс; Бушманн, Франк (2000). Шаблонно-ориентированная архитектура программного обеспечения, Том 2: Шаблоны для параллельных и сетевых объектов . Джон Вили и сыновья. ISBN 978-0-471-60695-6.
  • Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли . ISBN 978-0-321-12742-6.
  • Хохпе, Грегор; Вульф, Бобби (2003). Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями . Эддисон-Уэсли . ISBN 978-0-321-20068-6.
  • Фриман, Эрик Т; Робсон, Элизабет; Бейтс, Берт; Сьерра, Кэти (2004). Начните с шаблонов проектирования . O'Reilly Media . ISBN 978-0-596-00712-6.

Хотя шаблоны проектирования применяются практически давно, формализация концепции шаблонов проектирования томилась на несколько лет. [4]

Практика [ править ]

Шаблоны проектирования могут ускорить процесс разработки, предоставляя проверенные, проверенные парадигмы разработки. [5] Эффективный дизайн программного обеспечения требует рассмотрения вопросов, которые могут не проявиться до конца реализации. В недавно написанном коде часто могут быть скрытые тонкие проблемы, на обнаружение которых требуется время, проблемы, которые иногда могут вызвать серьезные проблемы в будущем. Повторное использование шаблонов проектирования помогает предотвратить такие тонкие проблемы [6], а также улучшает читаемость кода для программистов и архитекторов, знакомых с шаблонами.

Для достижения гибкости шаблоны проектирования обычно вводят дополнительные уровни косвенного обращения , что в некоторых случаях может усложнять конечный дизайн и снижать производительность приложения.

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

Методы проектирования программного обеспечения трудно применить к более широкому кругу проблем. [ необходима цитата ] Шаблоны проектирования предоставляют общие решения, задокументированные в формате, который не требует специфики, привязанной к конкретной проблеме.

Структура [ править ]

Шаблоны проектирования состоят из нескольких разделов (см. § Документация ниже). Особый интерес представляют разделы «Структура», «Участники» и «Сотрудничество». В этих разделах описывается мотив дизайна : прототипная микроархитектура, которую разработчики копируют и адаптируют к своим конкретным проектам для решения повторяющейся проблемы, описываемой шаблоном проектирования. Микроархитектура - это набор составляющих программы (например, классов, методов ...) и их взаимосвязей. Разработчики используют шаблон проектирования, внедряя в свои проекты эту прототипную микроархитектуру, что означает, что микроархитектуры в их проектах будут иметь структуру и организацию, аналогичные выбранному шаблону дизайна.

Шаблоны для конкретных доменов [ править ]

Также были предприняты усилия по кодификации шаблонов проектирования в конкретных областях, включая использование существующих шаблонов проектирования, а также шаблонов проектирования для конкретных областей. Примеры включают шаблоны проектирования пользовательского интерфейса , [8] визуализацию информации , [9] безопасный дизайн, [10] «безопасное использование», [11] веб-дизайн [12] и дизайн бизнес-модели. [13]

Ежегодные материалы конференции по языкам шаблонов программирования [14] включают множество примеров шаблонов, специфичных для предметной области.

Классификация и список [ править ]

Паттерны проектирования изначально были разделены на 3 подкласса в зависимости от типа решаемой ими проблемы. Шаблоны создания предоставляют возможность создавать объекты на основе необходимого критерия и контролируемым образом. Структурные шаблоны - это организация различных классов и объектов для формирования более крупных структур и обеспечения новой функциональности. Наконец, поведенческие паттерны предназначены для выявления общих паттернов общения между объектами и реализации этих паттернов.

Творческие шаблоны [ править ]

Структурные образцы [ править ]

Модели поведения [ править ]

Шаблоны параллелизма [ править ]

Документация [ править ]

Документация по шаблону проектирования описывает контекст, в котором используется шаблон, силы в контексте, которые шаблон пытается разрешить, и предлагаемое решение. [26] Не существует единого стандартного формата для документирования шаблонов проектирования. Скорее, разные авторы шаблонов использовали множество различных форматов. Однако, по словам Мартина Фаулера , определенные формы паттернов стали более известными, чем другие, и, следовательно, стали обычными отправными точками для новых усилий по написанию паттернов. [27] Одним из примеров широко используемого формата документации является тот, который использовали Эрих Гамма , Ричард Хелм , Ральф Джонсон и Джон Влиссидес.в своей книге « Паттерны дизайна» . Он состоит из следующих разделов:

  • Имя и классификация шаблона: описательное и уникальное имя, которое помогает идентифицировать шаблон и ссылаться на него.
  • Намерение: описание цели, стоящей за шаблоном, и причины его использования.
  • Также известен как: другие названия узора.
  • Мотивация (силы): сценарий, состоящий из проблемы и контекста, в котором можно использовать этот шаблон.
  • Применимость: ситуации, в которых можно использовать этот шаблон; контекст для шаблона.
  • Структура: графическое представление узора. Диаграммы классов и взаимодействие диаграмма могут быть использованы для этой цели.
  • Участники: список классов и объектов, используемых в шаблоне, и их роли в дизайне.
  • Сотрудничество: описание того, как классы и объекты, используемые в шаблоне, взаимодействуют друг с другом.
  • Последствия: описание результатов, побочных эффектов и компромиссов, вызванных использованием шаблона.
  • Реализация: описание реализации шаблона; часть решения выкройки.
  • Пример кода: иллюстрация того, как шаблон можно использовать в языке программирования.
  • Известные применения: примеры реального использования паттерна.
  • Связанные шаблоны: другие шаблоны, которые имеют некоторую связь с шаблоном; обсуждение различий между шаблоном и похожими шаблонами.

Критика [ править ]

Было замечено, что шаблоны проектирования могут быть просто признаком того, что некоторые функции отсутствуют в данном языке программирования (например, Java или C ++ ). Питер Норвиг демонстрирует, что 16 из 23 шаблонов в книге Design Patterns (которая в основном ориентирована на C ++) упрощены или устранены (посредством прямой языковой поддержки) в Lisp или Dylan . [28] Соответствующие наблюдения были сделаны Ханнеманом и Кицалесом, которые реализовали несколько из 23 шаблонов проектирования с использованием аспектно-ориентированного языка программирования.(AspectJ) и показал, что зависимости на уровне кода были удалены из реализаций 17 из 23 шаблонов проектирования и что аспектно-ориентированное программирование может упростить реализацию шаблонов проектирования. [29] См. Также эссе Пола Грэма «Месть ботаников». [30]

Неправильное использование шаблонов может излишне усложнять. [31]

См. Также [ править ]

  • Принцип абстракции
  • Алгоритмический скелет
  • Анти-шаблон
  • Архитектурный образец
  • Шаблоны отладки
  • Шаблон дизайна
  • Распределенные шаблоны проектирования
  • Функция двойного шанса
  • Фреймворк архитектуры предприятия
  • GRASP (объектно-ориентированный дизайн)
  • Класс помощника
  • Шаблон проектирования взаимодействия
  • Список философий разработки программного обеспечения
  • Список тем программной инженерии
  • Язык шаблонов
  • Теория паттернов
  • Педагогические образцы
  • Репозиторий портлендских паттернов
  • Рефакторинг
  • Методология разработки программного обеспечения

Ссылки [ править ]

  1. ^ Ведьян, Фади; Абуфахер, Сомия (01.02.2020). «Влияние шаблонов проектирования на качество программного обеспечения: систематический обзор литературы» . Программное обеспечение IET . 14 (1): 1–17. DOI : 10,1049 / МТВ-sen.2018.5446 . ISSN 1751-8806 . 
  2. ^ Смит, Рид (октябрь 1987). Панель по методологии проектирования . Дополнение OOPSLA '87 к сборникам материалов. DOI : 10.1145 / 62138.62151 . Уорд предостерег от необходимости слишком много программирования на, как он выразился, «высоком уровне волшебников». Он указал, что письменный «язык шаблонов» может значительно улучшить выбор и применение абстракций. Он предложил «радикальное изменение бремени проектирования и реализации», основав новую методологию на адаптации работы Кристофера Александера по языкам шаблонов, и что ориентированные на программирование языки шаблонов, разработанные в Tektronix , значительно помогли их усилиям по разработке программного обеспечения.
  3. ^ Бек, Кент ; Каннингем, Уорд (сентябрь 1987 г.). Использование языков шаблонов для объектно-ориентированной программы . OOPSLA '87 семинар по спецификации и проектированию для объектно-ориентированного программирования . Проверено 26 мая 2006 .
  4. Baroni, Aline Lúcia; Генек, Янн-Гаэль; Альбин-Амио, Эрве (июнь 2003 г.). «Формализация паттернов дизайна». Нант : Высшая национальная школа промышленных технологий и горных работ в Нанте. CiteSeerX 10.1.1.62.6466 .  Цитировать журнал требует |journal=( помощь )
  5. Епископ, Юдифь. «Шаблоны проектирования C # 3.0: используйте возможности C # 3.0 для решения реальных проблем» . Книги C # от O'Reilly Media . Проверено 15 мая 2012 . Если вы хотите ускорить разработку своих .NET-приложений, вы готовы к шаблонам проектирования C # - элегантным, общепринятым и проверенным способам решения распространенных проблем программирования.
  6. ^ Tiako, Пьер Ф. (31 марта 2009). «Формальное моделирование и спецификация шаблонов проектирования с использованием RTPA». Программные приложения: концепции, методологии, инструменты и приложения: концепции, методологии, инструменты и приложения . п. 636. DOI : 10,4018 / 978-1-60566-060-8 . ISBN 9781605660615.
  7. ^ Мейер, Бертран ; Арноут, Карин (июль 2006 г.). «Компонентизация: пример посетителей» (PDF) . Компьютер IEEE . 39 (7): 23–30. CiteSeerX 10.1.1.62.6082 . DOI : 10,1109 / MC.2006.227 . S2CID 15328522 .   
  8. ^ Лааксо, Сари А. (2003-09-16). «Сборник шаблонов дизайна пользовательского интерфейса» . Университет Хельсинки, факультет компьютерных наук . Проверено 31 января 2008 .
  9. ^ Heer, J .; Агравала, М. (2006). «Шаблоны проектирования программного обеспечения для визуализации информации» . IEEE Transactions по визуализации и компьютерной графике . 12 (5): 853-60. CiteSeerX 10.1.1.121.4534 . DOI : 10.1109 / TVCG.2006.178 . PMID 17080809 . S2CID 11634997 .   
  10. ^ Догерти, Чад; Сэйр, Кирк; Сикорд, Роберт С.; Свобода, Давид; Тогаши, Казуя (2009). Шаблоны безопасного проектирования (PDF) . Институт программной инженерии.
  11. Перейти ↑ Garfinkel, Simson L. (2005). Принципы и шаблоны проектирования компьютерных систем, которые одновременно являются безопасными и удобными (кандидатская диссертация).
  12. ^ "Библиотека шаблонов дизайна Yahoo!" . Архивировано из оригинала на 2008-02-29 . Проверено 31 января 2008 .
  13. ^ "Как разработать свою бизнес-модель как экономичный стартап?" . 2010-01-06 . Проверено 6 января 2010 .
  14. ^ Шаблонные языки программирования, Труды конференции (ежегодно, 1994—) [1]
  15. ^ a b c МакКоннелл, Стив (июнь 2004 г.). «Дизайн в строительстве». Код завершен (2-е изд.). Microsoft Press . п. 104 . ISBN 978-0-7356-1967-8. Таблица 5.1 Популярные шаблоны дизайна
  16. ^ a b Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли . ISBN 978-0-321-12742-6.
  17. ^ С. Мартин, Роберт (2002). «28. Объект расширения» . Гибкая разработка программного обеспечения, принципы, шаблоны и практики . п. 408 . ISBN 978-0135974445.
  18. ^ Алур, Дипак; Крапи, Джон; Малкс, Дэн (2003). Основные шаблоны J2EE: передовой опыт и стратегии проектирования . Прентис Холл . п. 166. ISBN. 978-0-13-142246-9.
  19. ^ Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли . п. 344. ISBN 978-0-321-12742-6.
  20. ^ Блох, Джошуа (2008). «Правило 37: Используйте интерфейсы маркеров для определения типов» . Эффективная Java (Второе изд.). Эддисон-Уэсли. п. 179 . ISBN 978-0-321-35668-0.
  21. ^ "Twin - шаблон проектирования для моделирования множественного наследования" (PDF) .
  22. ^ Шмидт, Дуглас С .; Сталь, Михаил; Ронерт, Ганс; Бушманн, Франк (2000). Шаблонно-ориентированная архитектура программного обеспечения, Том 2: Шаблоны для параллельных и сетевых объектов . Джон Вили и сыновья. ISBN 978-0-471-60695-6.
  23. ^ Свойства привязки
  24. ^ Нагель, Кристиан; Эвьен, Билл; Глинн, Джей; Уотсон, Карли; Скиннер, Морган (2008). «Асинхронный шаблон, основанный на событиях». Профессиональный C # 2008 . Вайли. С. 570–571. ISBN 978-0-470-19137-8.
  25. ^ Шаблон блокировки
  26. ^ Габриэль, Дик . «Определение паттерна» . Архивировано из оригинала на 2007-02-09 . Проверено 6 марта 2007 .
  27. ^ Фаулер, Мартин (1 августа 2006 г.). «Написание программных паттернов» . Проверено 6 марта 2007 .
  28. ^ Норвиг, Питер (1998). Шаблоны проектирования на динамических языках .
  29. ^ Ханнеманн, Ян ; Кичалес, Грегор (2002). Реализация шаблона проектирования на Java и AspectJ . OOPSLA '02. DOI : 10.1145 / 582419.582436 .CS1 maint: location ( ссылка )
  30. ^ Грэм, Пол (2002). Месть ботаников . Проверено 11 августа 2012 .
  31. ^ МакКоннелл, Стив (2004). Код завершен: Практическое руководство по построению программного обеспечения, 2-е издание . п. 105 .

Дальнейшее чтение [ править ]

  • Александр, Кристофер ; Исикава, Сара; Сильверстайн, Мюррей; Якобсон, Макс; Фиксдаль-Кинг, Ингрид; Ангел, Шломо (1977). Язык паттернов: Города, Здания, Строительство . Нью-Йорк: Издательство Оксфордского университета. ISBN 978-0-19-501919-3.
  • Алур, Дипак; Крапи, Джон; Малкс, Дэн (май 2003 г.). Core J2EE Patterns: Best Practices and Design Strategies (2-е изд.). Прентис Холл . ISBN 978-0-13-142246-9.
  • Бек, Кент (октябрь 2007 г.). Шаблоны реализации . Эддисон-Уэсли . ISBN 978-0-321-41309-3.
  • Бек, Кент ; Crocker, R .; Meszaros, G .; Coplien, JO ; Dominick, L .; Paulisch, F .; Влиссидес, Дж. (Март 1996 г.). Материалы 18-й Международной конференции по программной инженерии . С. 25–30.
  • Борчерс, Янв (2001). Паттерн-подход к интерактивному дизайну . Джон Вили и сыновья . ISBN 978-0-471-49828-5.
  • Коплиен, Джеймс О .; Шмидт, Дуглас К. (1995). Языки шаблонов проектирования программ . Эддисон-Уэсли . ISBN 978-0-201-60734-5.
  • Коплиен, Джеймс О .; Влиссидес, Джон М .; Керт, Норман Л. (1996). Языки шаблонов проектирования программ 2 . Эддисон-Уэсли . ISBN 978-0-201-89527-8.
  • Элоранта, Вели-Пекка; Коскинен, Йоханнес; Леппянен, Марко; Рейхонен, Вилле (2014). Проектирование распределенных систем управления: подход на языке шаблонов . Вайли. ISBN 978-1118694152.
  • Фаулер, Мартин (1997). Шаблоны анализа: многоразовые объектные модели . Эддисон-Уэсли . ISBN 978-0-201-89542-1.
  • Фаулер, Мартин (2003). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли . ISBN 978-0-321-12742-6.
  • Фриман, Эрик; Фриман, Элизабет; Сьерра, Кэти ; Бейтс, Берт (2004). Начните с шаблонов проектирования . O'Reilly Media . ISBN 978-0-596-00712-6.
  • Хоманн, Люк; Фаулер, Мартин; Кавасаки, Гай (2003). Помимо архитектуры программного обеспечения . Эддисон-Уэсли . ISBN 978-0-201-77594-5.
  • Габриэль, Ричард (1996). Образцы программного обеспечения: рассказы сообщества разработчиков программного обеспечения (PDF) . Издательство Оксфордского университета . п. 235. ISBN 978-0-19-512123-0. Архивировано из оригинального (PDF) 01.08.2003.
  • Гамма, Эрих ; Хелм, Ричард ; Джонсон, Ральф ; Влиссидес, Джон (1995). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон-Уэсли . ISBN 978-0-201-63361-0.
  • Хохпе, Грегор; Вульф, Бобби (2003). Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями . Эддисон-Уэсли . ISBN 978-0-321-20068-6.
  • Голуб, Аллен (2004). Голуб на выкройках . Апресс . ISBN 978-1-59059-388-2.
  • Кирхер, Майкл; Фёльтер, Маркус; Здун, Уве (2005). Шаблоны удаленного взаимодействия: основы межплатформенного программного обеспечения для предприятий, Интернета и распределенных объектов в реальном времени . Джон Вили и сыновья . ISBN 978-0-470-85662-8.
  • Ларман, Крэйг (2005). Применение UML и шаблонов . Прентис Холл . ISBN 978-0-13-148906-6.
  • Лисков, Варвара ; Гуттаг, Джон (2000). Разработка программ на Java: абстракция, спецификация и объектно-ориентированный дизайн . Эддисон-Уэсли . ISBN 978-0-201-65768-5.
  • Манолеску, Драгош; Voelter, Маркус; Благородный, Джеймс (2006). Шаблонные языки разработки программ 5 . Эддисон-Уэсли . ISBN 978-0-321-32194-7.
  • Маринеску, Флойд (2002). Шаблоны проектирования EJB: расширенные шаблоны, процессы и идиомы . Джон Вили и сыновья . ISBN 978-0-471-20831-0.
  • Мартин, Роберт Сесил ; Риле, Дирк; Бушманн, Франк (1997). Языки шаблонов проектирования программ 3 . Эддисон-Уэсли . ISBN 978-0-201-31011-5.
  • Mattson, Timothy G; Сандерс, Беверли А .; Массингилл, Берна Л. (2005). Паттерны для параллельного программирования . Эддисон-Уэсли. ISBN 978-0-321-22811-6.
  • Шеллоуэй, Алан; Тротт, Джеймс Р. (2001). Объяснение шаблонов дизайна, второе издание: новый взгляд на объектно-ориентированный дизайн . Эддисон-Уэсли. ISBN 978-0-321-24714-8.
  • Влиссидес, Джон М. (1998). Штриховка по образцу: примененные шаблоны дизайна . Эддисон-Уэсли . ISBN 978-0-201-43293-0.
  • Вейр, Чарльз; Благородный, Джеймс (2000). Программное обеспечение с малой памятью: шаблоны для систем с ограниченной памятью . Эддисон-Уэсли . ISBN 978-0-201-59607-6. Архивировано из оригинала на 2007-06-17.