stringtranslate.com

Шаблон проектирования программного обеспечения

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

Использование шаблона направлено на использование существующей концепции , а не на ее переизобретение . Это может сократить время разработки программного обеспечения и повысить качество получаемой программы.

Примечательно, что шаблон не состоит из программного артефакта . Большинство ресурсов разработки, которые использует программист , включают настройку кодовой базы для использования артефакта; например, библиотеки . Напротив, для использования шаблона программист пишет код, как описано в шаблоне. Результат каждый раз уникален, даже если результат может быть распознан как основанный на шаблоне.

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

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

История

Паттерны возникли как архитектурная концепция Кристофера Александера еще в 1977 году в A Pattern Language (см. его статью "The Pattern of Streets", JOURNAL OF THE AIP, сентябрь 1966 г., том 32, № 5, стр. 273–278). В 1987 году Кент Бек и Уорд Каннингем начали экспериментировать с идеей применения паттернов к программированию — в частности, языков паттернов — и представили свои результаты на конференции OOPSLA в том же году. [1] [2] В последующие годы Бек, Каннингем и другие продолжили эту работу.

Шаблоны проектирования приобрели популярность в информатике после того, как в 1994 году так называемая «Банда четырех» (Гамма и др.) опубликовала книгу « Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения », которую часто сокращают до «GoF». В том же году прошла первая конференция Pattern Languages ​​of Programming , а в следующем году был создан Portland Pattern Repository для документации шаблонов проектирования. Область применения термина остается предметом споров. Известные книги в жанре шаблонов проектирования включают:

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

Упражняться

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

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

В 1996 году Кристофер Александр был приглашен выступить с программной речью на съезде OOPSLA 1996 года. Здесь он размышлял о том, как развивалась его работа над шаблонами в архитектуре, и о своих надеждах на то, как сообщество разработчиков программного обеспечения может помочь архитектуре расширить шаблоны для создания живых структур, использующих генеративные схемы, которые больше похожи на компьютерный код.

Мотив

Шаблон описывает мотив дизайна , также известный как прототипическая микроархитектура , как набор компонентов программы (например, классов, методов...) и их взаимосвязей. Разработчик адаптирует мотив к своей кодовой базе для решения проблемы, описанной шаблоном. Полученный код имеет структуру и организацию, схожие с выбранным мотивом.

Шаблоны, специфичные для домена

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

Ежегодные материалы конференции Pattern Languages ​​of Programming [12] включают множество примеров шаблонов, специфичных для предметной области.

Объектно-ориентированное программирование

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

Примеры

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

Творческие модели

Структурные модели

Модели поведения

Модели параллелизма

Документация

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

Критика

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

Неправильное использование шаблонов может привести к неоправданному увеличению сложности. [30]

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

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

Смотрите также

Ссылки

  1. ^ Смит, Рид (октябрь 1987 г.). Панель по методологии проектирования . Приложение к Трудам OOPSLA '87. doi :10.1145/62138.62151. Уорд предостерег от требования слишком большого программирования на, как он выразился, «высоком уровне мастеров». Он указал, что письменный «язык шаблонов» может значительно улучшить выбор и применение абстракций. Он предложил «радикальный сдвиг в бремени проектирования и реализации», основывая новую методологию на адаптации работы Кристофера Александра в языках шаблонов, и что ориентированные на программирование языки шаблонов, разработанные в Tektronix, значительно помогли их усилиям по разработке программного обеспечения.
  2. ^ Бек, Кент ; Каннингем, Уорд (сентябрь 1987 г.). Использование шаблонных языков для объектно-ориентированного программирования. Семинар OOPSLA '87 по спецификации и проектированию объектно-ориентированного программирования . Получено 26.05.2006 .
  3. ^ Барони, Алин Люсия; Геэнек, Янн-Гаэль; Альбин-Амио, Эрве (июнь 2003 г.). Формализация шаблонов проектирования (Отчет). Технический отчет EMN. Нант : Высшая национальная школа промышленной и горнодобывающей промышленности Нант. CiteSeerX 10.1.1.62.6466 . S2CID  624834 – через ResearchGate. 
  4. ^ Бишоп, Джудит. "Шаблоны проектирования C# 3.0: используйте мощь C# 3.0 для решения реальных проблем". Книги по C# издательства O'Reilly Media . Получено 15 мая 2012 г. Если вы хотите ускорить разработку приложений .NET, вы готовы к шаблонам проектирования C# — элегантным, общепринятым и проверенным способам решения распространенных проблем программирования.
  5. ^ Tiako, Pierre F. (31 марта 2009 г.). "Формальное моделирование и спецификация шаблонов проектирования с использованием RTPA". В Tiako, Pierre F (ред.). Программные приложения: концепции, методологии, инструменты и приложения: концепции, методологии, инструменты и приложения . стр. 636. doi :10.4018/978-1-60566-060-8. ISBN 9781605660615.
  6. ^ Лааксо, Сари А. (2003-09-16). «Коллекция шаблонов проектирования пользовательского интерфейса». Университет Хельсинки, кафедра компьютерных наук . Получено 2008-01-31 .
  7. ^ Хир, Дж.; Агравала, М. (2006). «Шаблоны проектирования программного обеспечения для визуализации информации». Труды IEEE по визуализации и компьютерной графике . 12 (5): 853–60. CiteSeerX 10.1.1.121.4534 . doi :10.1109/TVCG.2006.178. PMID  17080809. S2CID  11634997. 
  8. ^ Догерти, Чад; Сейр, Кирк; Сикорд, Роберт С.; Свобода, Дэвид; Тогаси, Казуя (2009). Шаблоны безопасного проектирования (PDF) . Институт программной инженерии.
  9. ^ Гарфинкель, Симсон Л. (2005). Принципы и шаблоны проектирования компьютерных систем, которые одновременно безопасны и удобны в использовании (кандидатская диссертация).
  10. ^ "Yahoo! Design Pattern Library". Архивировано из оригинала 29-02-2008 . Получено 31-01-2008 .
  11. ^ «Как разработать бизнес-модель для бережливого стартапа?». 2010-01-06 . Получено 2010-01-06 .
  12. ^ Шаблонные языки программирования, Труды конференции (ежегодно, 1994—) [1]
  13. ^ abc Макконнелл, Стив (июнь 2004). «Проектирование в строительстве». Code Complete (2-е изд.). Microsoft Press . стр. 104. ISBN 978-0-7356-1967-8Таблица 5.1 Популярные шаблоны проектирования
  14. ^ ab Fowler, Martin (2002). Patterns of Enterprise Application Architecture. Addison-Wesley . ISBN 978-0-321-12742-6.
  15. ^ Alur, Deepak; Crupi, John; Malks, Dan (2003). Основные шаблоны J2EE: лучшие практики и стратегии проектирования. Prentice Hall . стр. 166. ISBN 978-0-13-142246-9.
  16. ^ Фаулер, Мартин (2002). Модели архитектуры корпоративных приложений. Addison-Wesley . стр. 344. ISBN 978-0-321-12742-6.
  17. ^ Блох, Джошуа (2008). "Пункт 37: Используйте интерфейсы маркеров для определения типов". Effective Java (Второе изд.). Addison-Wesley. стр. 179. ISBN 978-0-321-35668-0.
  18. ^ «Близнецы — шаблон проектирования для моделирования множественного наследования» (PDF) .
  19. ^ Шмидт, Дуглас К.; Стал, Майкл; Ронерт, Ганс; Бушманн, Франк (2000). Архитектура программного обеспечения, ориентированная на шаблоны, том 2: Шаблоны для параллельных и сетевых объектов . John Wiley & Sons. ISBN 978-0-471-60695-6.
  20. ^ Свойства привязки
  21. ^ Нагель, Кристиан; Эвьен, Билл; Глинн, Джей; Уотсон, Карли; Скиннер, Морган (2008). «Асинхронный шаблон на основе событий». Professional C# 2008. Wiley. С. 570–571. ISBN 978-0-470-19137-8.
  22. ^ Шаблон замка
  23. ^ Франкаланца, Адриан; Табоне, Джерард (октябрь 2023 г.). «ElixirST: система типов на основе сеансов для модулей Elixir». Журнал логических и алгебраических методов в программировании . 135. doi :10.1016/j.jlamp.2023.100891. S2CID  251442539.
  24. ^ Шмидт, Дуглас К.; Виноски, Стив (июль–август 1996 г.). «Взаимосвязи объектов: сравнение альтернативных методов программирования для многопоточных серверов CORBA (столбец 7)» (PDF) . Отчет SIGS C++ . S2CID  2654843.
  25. ^ Габриэль, Дик . "Определение шаблона". Архивировано из оригинала 2007-02-09 . Получено 2007-03-06 .
  26. ^ Фаулер, Мартин (2006-08-01). "Написание шаблонов программного обеспечения" . Получено 2007-03-06 .
  27. ^ Норвиг, Питер (1998). Шаблоны проектирования в динамических языках.
  28. ^ Ханнеманн, Ян; Кицалес, Грегор (2002). "Реализация шаблона проектирования в Java и AspectJ". Труды 17-й конференции ACM SIGPLAN по объектно-ориентированному программированию, системам, языкам и приложениям - OOPSLA '02 . OOPSLA '02. стр. 161. doi :10.1145/582419.582436. ISBN 1581134711.
  29. ^ Грэм, Пол (2002). "Месть ботаников" . Получено 11 августа 2012 г.
  30. ^ Макконнелл, Стив (2004). Code Complete: A Practical Handbook of Software Construction, 2nd Edition . Pearson Education. стр. 105. ISBN 9780735619678.
  31. ^ Мейер, Бертран ; Арноут, Карин (июль 2006 г.). «Компонентизация: пример посетителя» (PDF) . IEEE Computer . 39 (7): 23–30. CiteSeerX 10.1.1.62.6082 . doi :10.1109/MC.2006.227. S2CID  15328522. 

Дальнейшее чтение