В программной инженерии , A разработки программного обеспечения модель является общим, многоразовые решением для часто встречающихся проблем в данном контексте в разработке программного обеспечения . Это не законченный проект, который можно преобразовать непосредственно в исходный или машинный код . Скорее, это описание или шаблон решения проблемы, который можно использовать во многих различных ситуациях. Шаблоны проектирования - это формализованные передовые практики, которые программист может использовать для решения общих проблем при разработке приложения или системы.
Шаблоны объектно-ориентированного проектирования обычно показывают взаимосвязи и взаимодействия между классами или объектами , не указывая конечные классы или объекты приложения, которые участвуют. Шаблоны, которые подразумевают изменяемое состояние, могут не подходить для языков функционального программирования , некоторые шаблоны могут быть ненужными в языках, которые имеют встроенную поддержку для решения проблемы, которую они пытаются решить, а объектно-ориентированные шаблоны не обязательно подходят для не-объектных -ориентированные языки.
Шаблоны проектирования можно рассматривать как структурированный подход к компьютерному программированию, промежуточный между уровнями парадигмы программирования и конкретным алгоритмом .
В обзорном исследовании 2020 года 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 подкласса в зависимости от типа решаемой ими проблемы. Шаблоны создания предоставляют возможность создавать объекты на основе необходимого критерия и контролируемым образом. Структурные шаблоны - это организация различных классов и объектов для формирования более крупных структур и обеспечения новой функциональности. Наконец, поведенческие паттерны связаны с выявлением общих паттернов общения между объектами и их реализацией.
Творческие шаблоны
Имя | Описание | В шаблонах проектирования | В полном коде [15] | Другой |
---|---|---|---|---|
Абстрактная фабрика | Предоставьте интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. | да | да | N / A |
Строитель | Отделяйте построение сложного объекта от его представления, позволяя одному и тому же процессу построения создавать различные представления. | да | Нет | N / A |
Внедрение зависимости | Класс принимает требуемые объекты от инжектора вместо того, чтобы создавать объекты напрямую. | Нет | Нет | N / A |
Заводской метод | Определите интерфейс для создания одного объекта, но позвольте подклассам решать, какой класс создать. Фабричный метод позволяет классу отложить создание экземпляров до подклассов. | да | да | N / A |
Ленивая инициализация | Тактика откладывания создания объекта, расчета стоимости или другого дорогостоящего процесса до первой необходимости. Этот шаблон появляется в каталоге GoF как «виртуальный прокси», стратегия реализации для шаблона прокси . | Нет | Нет | PoEAA [16] |
Мультитон | Убедитесь, что у класса есть только именованные экземпляры, и предоставьте им глобальную точку доступа. | Нет | Нет | N / A |
Пул объектов | Избегайте дорогостоящего приобретения и высвобождения ресурсов путем утилизации неиспользуемых объектов. Может рассматриваться как обобщение пула соединений и пул потоков шаблонов. | Нет | Нет | N / A |
Опытный образец | Укажите типы объектов для создания с использованием прототипа и создайте новые объекты из «скелета» существующего объекта, таким образом повышая производительность и сводя к минимуму объем памяти. | да | Нет | N / A |
Приобретение ресурсов - это инициализация (RAII) | Убедитесь, что ресурсы высвобождаются должным образом, привязав их к сроку службы подходящих объектов. | Нет | Нет | N / A |
Синглтон | Убедитесь, что у класса есть только один экземпляр, и предоставьте ему глобальную точку доступа. | да | да | N / A |
Структурные образцы
Имя | Описание | В шаблонах проектирования | В полном коде [15] | Другой |
---|---|---|---|---|
Адаптер , оболочка или переводчик | Преобразуйте интерфейс класса в другой интерфейс, ожидаемый клиентами. Адаптер позволяет классам работать вместе, что иначе было бы невозможно из-за несовместимых интерфейсов. Эквивалент модели интеграции предприятия - переводчик. | да | да | N / A |
Мост | Отделите абстракцию от ее реализации, позволяя им изменяться независимо друг от друга. | да | да | N / A |
Композитный | Объединяйте объекты в древовидные структуры для представления иерархий «часть-целое». Composite позволяет клиентам одинаково обрабатывать отдельные объекты и композиции объектов. | да | да | N / A |
Декоратор | Добавляйте дополнительные обязанности к объекту, динамически сохраняя тот же интерфейс. Декораторы предоставляют гибкую альтернативу созданию подклассов для расширения функциональности. | да | да | N / A |
Объект расширения | Добавление функциональности в иерархию без изменения иерархии. | Нет | Нет | Гибкая разработка программного обеспечения, принципы, шаблоны и практики [17] |
Фасад | Предоставляет единый интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы. | да | да | N / A |
Наилегчайший вес | Используйте общий доступ для эффективной поддержки большого количества похожих объектов. | да | Нет | N / A |
Фронтальный контроллер | Шаблон относится к дизайну веб-приложений. Он обеспечивает централизованную точку входа для обработки запросов. | Нет | Нет | Шаблоны J2EE [18] PoEAA [19] |
Маркер | Пустой интерфейс для связывания метаданных с классом. | Нет | Нет | Эффективная Java [20] |
Модуль | Сгруппируйте несколько связанных элементов, таких как классы, синглтоны, методы, используемые во всем мире, в единую концептуальную сущность. | Нет | Нет | N / A |
Прокси | Предоставьте суррогат или заполнитель для другого объекта для управления доступом к нему. | да | Нет | N / A |
Близнец [21] | Twin позволяет моделировать множественное наследование на языках программирования, которые не поддерживают эту функцию. | Нет | Нет | N / A |
Поведенческие модели
Имя | Описание | В шаблонах проектирования | В полном коде [15] | Другой |
---|---|---|---|---|
Доска | Шаблон искусственного интеллекта для объединения разрозненных источников данных (см. Систему доски ) | Нет | Нет | N / A |
Цепочка ответственности | Избегайте связывания отправителя запроса с его получателем, давая возможность более чем одному объекту обработать запрос. Объедините получающие объекты в цепочку и передайте запрос по цепочке, пока объект не обработает его. | да | Нет | N / A |
Командование | Инкапсулируйте запрос как объект, тем самым позволяя параметризацию клиентов с различными запросами, а также создание очереди или протоколирование запросов. Это также позволяет поддерживать отменяемые операции. | да | Нет | N / A |
Устный переводчик | Для данного языка определите представление для его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на языке. | да | Нет | N / A |
Итератор | Обеспечивает способ последовательного доступа к элементам агрегированного объекта, не раскрывая его базовое представление. | да | да | N / A |
Посредник | Определите объект, который инкапсулирует, как взаимодействует набор объектов. Посредник способствует слабой связи , не позволяя объектам явно ссылаться друг на друга, и позволяет их взаимодействию изменяться независимо. | да | Нет | N / A |
Memento | Не нарушая инкапсуляцию, захватите и экстернализируйте внутреннее состояние объекта, позволяя объекту вернуться в это состояние позже. | да | Нет | N / A |
Нулевой объект | Избегайте нулевых ссылок, предоставляя объект по умолчанию. | Нет | Нет | N / A |
Наблюдатель или Опубликовать / подписаться | Определите зависимость «один ко многим» между объектами, где изменение состояния одного объекта приводит к автоматическому уведомлению и обновлению всех его зависимых элементов. | да | да | N / A |
Слуга | Определите общую функциональность для группы классов. Шаблон слуги также часто называют реализацией вспомогательного класса или служебного класса для данного набора классов. Вспомогательные классы обычно не имеют объектов, следовательно, у них есть все статические методы, которые действуют на различные типы объектов класса. | Нет | Нет | N / A |
Технические характеристики | Recombinable бизнес - логика в булевой моде. | Нет | Нет | N / A |
Состояние | Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Объект изменит свой класс. | да | Нет | N / A |
Стратегия | Определите семейство алгоритмов, инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют. | да | да | N / A |
Шаблонный метод | Определите скелет алгоритма в операции, отложив некоторые шаги до подклассов. Шаблонный метод позволяет подклассам переопределять определенные шаги алгоритма без изменения структуры алгоритма. | да | да | N / A |
Посетитель | Представляют операцию, выполняемую над элементами структуры объекта. Visitor позволяет определить новую операцию, не изменяя классы элементов, с которыми она работает. | да | Нет | N / A |
Шаблоны параллелизма
Имя | Описание | В POSA2 [22] | Другой |
---|---|---|---|
Активный объект | Отделяет выполнение метода от вызова методов, которые находятся в их собственном потоке управления. Цель состоит в том, чтобы ввести параллелизм с помощью вызова асинхронного метода и планировщика для обработки запросов. | да | N / A |
Бороться | Выполняйте действие над объектом только тогда, когда объект находится в определенном состоянии. | Нет | N / A |
Связующие свойства | Объединение нескольких наблюдателей для принудительной синхронизации или согласования свойств в разных объектах каким-либо образом. [23] | Нет | N / A |
Вычислить ядро | Одно и то же вычисление, выполняемое много раз параллельно, отличающееся целочисленными параметрами, используемыми с математикой без ветвления указателя в общих массивах, таких как оптимизированное для графического процессора умножение матриц или сверточная нейронная сеть . | Нет | N / A |
Двойная проверка блокировки | Уменьшите накладные расходы на получение блокировки, сначала проверив критерий блокировки («подсказку блокировки») небезопасным способом; только в том случае, если это удастся, будет действовать фактическая логика блокировки. Может быть небезопасным при реализации в некоторых сочетаниях языка и оборудования. Поэтому иногда его можно рассматривать как антипаттерн . | да | N / A |
Асинхронный на основе событий | Решает проблемы с асинхронным шаблоном, возникающие в многопоточных программах. [24] | Нет | N / A |
Охраняемая подвеска | Управляет операциями, которые требуют как блокировки, так и выполнения предварительного условия перед выполнением операции. | Нет | N / A |
Присоединиться | Шаблон соединения обеспечивает способ написания параллельных, параллельных и распределенных программ с помощью передачи сообщений. По сравнению с использованием потоков и блокировок это модель программирования высокого уровня. | Нет | N / A |
Замок | Один поток устанавливает «блокировку» на ресурс, не позволяя другим потокам обращаться к нему или изменять его. [25] | Нет | PoEAA [16] |
Шаблон проектирования обмена сообщениями (MDP) | Позволяет обмениваться информацией (например, сообщениями) между компонентами и приложениями. | Нет | N / A |
Монитор объекта | Объект, методы которого подлежат взаимному исключению , что предотвращает ошибочные попытки нескольких объектов использовать его одновременно. | да | N / A |
Реактор | Объект реактора предоставляет асинхронный интерфейс для ресурсов, которые должны обрабатываться синхронно. | да | N / A |
Блокировка чтения-записи | Разрешает одновременный доступ для чтения к объекту, но требует монопольного доступа для операций записи. | Нет | N / A |
Планировщик | Явно контролируйте, когда потоки могут выполнять однопоточный код. | Нет | N / A |
Пул потоков | Для выполнения ряда задач создается ряд потоков, которые обычно организованы в очередь. Обычно задач намного больше, чем потоков. Можно рассматривать как частный случай паттерна пула объектов . | Нет | N / A |
Хранилище для конкретных потоков | Статическая или «глобальная» память, локальная для потока. | да | N / A |
Документация
Документация по шаблону проектирования описывает контекст, в котором используется шаблон, силы в контексте, которые шаблон пытается разрешить, и предлагаемое решение. [26] Не существует единого стандартного формата для документирования шаблонов проектирования. Скорее, разные авторы шаблонов использовали множество различных форматов. Однако, по словам Мартина Фаулера , определенные формы паттернов стали более известными, чем другие, и, следовательно, стали обычными отправными точками для новых усилий по написанию паттернов. [27] Одним из примеров широко используемого формата документации является тот, который использовали Эрих Гамма , Ричард Хелм , Ральф Джонсон и Джон Влиссидес в их книге « Шаблоны проектирования» . Он состоит из следующих разделов:
- Имя и классификация шаблона: описательное и уникальное имя, которое помогает идентифицировать шаблон и ссылаться на него.
- Намерение: описание цели, стоящей за шаблоном, и причины его использования.
- Также известен как: другие названия узора.
- Мотивация (силы): сценарий, состоящий из проблемы и контекста, в котором можно использовать этот шаблон.
- Применимость: ситуации, в которых можно использовать этот шаблон; контекст для шаблона.
- Структура: графическое представление узора. Диаграммы классов и взаимодействие диаграмма могут быть использованы для этой цели.
- Участники: список классов и объектов, используемых в шаблоне, и их роли в дизайне.
- Сотрудничество: описание того, как классы и объекты, используемые в шаблоне, взаимодействуют друг с другом.
- Последствия: описание результатов, побочных эффектов и компромиссов, вызванных использованием шаблона.
- Реализация: описание реализации шаблона; часть решения выкройки.
- Пример кода: иллюстрация того, как шаблон можно использовать в языке программирования.
- Известные применения: примеры реального использования паттерна.
- Связанные шаблоны: другие шаблоны, которые имеют некоторую связь с шаблоном; обсуждение различий между шаблоном и похожими шаблонами.
Критика
Было замечено, что шаблоны проектирования могут быть просто признаком того, что некоторые функции отсутствуют в данном языке программирования (например, Java или C ++ ). Питер Норвиг демонстрирует, что 16 из 23 шаблонов в книге Design Patterns (которая в основном ориентирована на C ++) упрощены или устранены (посредством прямой языковой поддержки) в Lisp или Dylan . [28] Соответствующие наблюдения были сделаны Ханнеманом и Кицалесом, которые реализовали несколько из 23 шаблонов проектирования с использованием аспектно-ориентированного языка программирования (AspectJ) и показали, что зависимости на уровне кода были удалены из реализаций 17 из 23 шаблонов проектирования и что аспектно-ориентированное программирование может упростить реализацию шаблонов проектирования. [29] См. Также эссе Пола Грэма «Месть ботаников». [30]
Неправильное использование шаблонов может излишне усложнять. [31]
Смотрите также
- Принцип абстракции
- Алгоритмический скелет
- Анти-шаблон
- Архитектурный образец
- Шаблоны отладки
- Шаблон дизайна
- Распределенные шаблоны проектирования
- Функция двойного шанса
- Фреймворк архитектуры предприятия
- GRASP (объектно-ориентированный дизайн)
- Класс помощника
- Шаблон проектирования взаимодействия
- Список философий разработки программного обеспечения
- Список тем программной инженерии
- Язык шаблонов
- Теория паттернов
- Педагогические образцы
- Репозиторий портлендских паттернов
- Рефакторинг
- Методология разработки программного обеспечения
Рекомендации
- ^ Ведьян, Фади; Абуфахер, Сомия (01.02.2020). «Влияние шаблонов проектирования на качество программного обеспечения: систематический обзор литературы» . Программное обеспечение IET . 14 (1): 1–17. DOI : 10,1049 / МТВ-sen.2018.5446 . ISSN 1751-8806 .
- ^ Смит, Рид (октябрь 1987 г.). Панель по методологии проектирования . Дополнение OOPSLA '87 к сборникам материалов. DOI : 10.1145 / 62138.62151 .
Уорд предостерег от необходимости слишком много программирования на, как он выразился, «высоком уровне волшебников». Он указал, что письменный «язык шаблонов» может значительно улучшить выбор и применение абстракций. Он предложил «радикальное изменение бремени проектирования и реализации», основав новую методологию на адаптации работы Кристофера Александера по языкам шаблонов, и что ориентированные на программирование языки шаблонов, разработанные в Tektronix , значительно помогли их усилиям по разработке программного обеспечения.
- ^ Бек, Кент ; Каннингем, Уорд (сентябрь 1987 г.). Использование языков шаблонов для объектно-ориентированной программы . OOPSLA '87 семинар по спецификации и проектированию для объектно-ориентированного программирования . Проверено 26 мая 2006 .
- ^ Барони, Алин Лусия; Генек, Янн-Гаэль; Альбин-Амио, Эрве (июнь 2003 г.). «Формализация паттернов дизайна». Нант : Высшая национальная школа промышленных технологий и горных работ в Нанте. CiteSeerX 10.1.1.62.6466 . Цитировать журнал требует
|journal=
( помощь ) - ^ Епископ Юдифь. «Шаблоны проектирования C # 3.0: используйте возможности C # 3.0 для решения реальных проблем» . Книги C # от O'Reilly Media . Проверено 15 мая 2012 .
Если вы хотите ускорить разработку своих .NET-приложений, вы готовы к шаблонам проектирования C # - элегантным, общепринятым и проверенным способам решения распространенных проблем программирования.
- ^ Тиако, Пьер Ф. (31 марта 2009 г.). «Формальное моделирование и спецификация шаблонов проектирования с использованием RTPA». Программные приложения: концепции, методологии, инструменты и приложения: концепции, методологии, инструменты и приложения . п. 636. DOI : 10,4018 / 978-1-60566-060-8 . ISBN 9781605660615.
- ^ Мейер, Бертран ; Арноут, Карин (июль 2006 г.). «Компонентизация: пример посетителей» (PDF) . Компьютер IEEE . 39 (7): 23–30. CiteSeerX 10.1.1.62.6082 . DOI : 10,1109 / MC.2006.227 . S2CID 15328522 .
- ^ Лааксо, Сари А. (16 сентября 2003 г.). «Сборник шаблонов дизайна пользовательского интерфейса» . Университет Хельсинки, факультет компьютерных наук . Проверено 31 января 2008 .
- ^ 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 .
- ^ Догерти, Чад; Сэйр, Кирк; Сикорд, Роберт С.; Свобода, Давид; Тогаши, Казуя (2009). Шаблоны безопасного проектирования (PDF) . Институт программной инженерии.
- ^ Гарфинкель, Симсон Л. (2005). Принципы и шаблоны проектирования компьютерных систем, которые одновременно являются безопасными и удобными (кандидатская диссертация).
- ^ «Библиотека шаблонов дизайна Yahoo!» . Архивировано из оригинала на 2008-02-29 . Проверено 31 января 2008 .
- ^ «Как разработать свою бизнес-модель как экономичный стартап?» . 2010-01-06 . Проверено 6 января 2010 .
- ^ Шаблонные языки программирования, Труды конференции (ежегодно, 1994—) [1]
- ^ а б в МакКоннелл, Стив (июнь 2004 г.). «Дизайн в строительстве». Код завершен (2-е изд.). Microsoft Press . п. 104 . ISBN 978-0-7356-1967-8.
Таблица 5.1 Популярные шаблоны дизайна
- ^ а б Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли . ISBN 978-0-321-12742-6.
- ^ К. Мартин, Роберт (2002). «28. Объект расширения» . Гибкая разработка программного обеспечения, принципы, шаблоны и практики . п. 408 . ISBN 978-0135974445.
- ^ Алур, Дипак; Крапи, Джон; Малкс, Дэн (2003). Основные шаблоны J2EE: передовой опыт и стратегии проектирования . Прентис Холл . п. 166. ISBN. 978-0-13-142246-9.
- ^ Фаулер, Мартин (2002). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли . п. 344. ISBN 978-0-321-12742-6.
- ^ Блох, Джошуа (2008). «Правило 37: Используйте интерфейсы маркеров для определения типов» . Эффективная Java (Второе изд.). Эддисон-Уэсли. п. 179 . ISBN 978-0-321-35668-0.
- ^ «Двойник - шаблон проектирования для моделирования множественного наследования» (PDF) .
- ^ Schmidt, Douglas C .; Сталь, Михаил; Ронерт, Ганс; Бушманн, Франк (2000). Шаблонно-ориентированная архитектура программного обеспечения, Том 2: Шаблоны для параллельных и сетевых объектов . Джон Вили и сыновья. ISBN 978-0-471-60695-6.
- ^ Свойства привязки
- ^ Нагель, Кристиан; Эвьен, Билл; Глинн, Джей; Уотсон, Карли; Скиннер, Морган (2008). «Асинхронный шаблон, основанный на событиях». Профессиональный C # 2008 . Вайли. С. 570–571. ISBN 978-0-470-19137-8.
- ^ Шаблон блокировки
- ^ Габриэль, Дик . «Определение паттерна» . Архивировано из оригинала на 2007-02-09 . Проверено 6 марта 2007 .
- ^ Фаулер, Мартин (1 августа 2006 г.). «Написание программных паттернов» . Проверено 6 марта 2007 .
- ^ Норвиг, Питер (1998). Шаблоны проектирования на динамических языках .
- ^ Ханнеманн, Ян ; Кичалес, Грегор (2002). Реализация шаблона проектирования на Java и AspectJ . OOPSLA '02. DOI : 10.1145 / 582419.582436 .CS1 maint: location ( ссылка )
- ^ Грэм, Пол (2002). Месть ботаников . Проверено 11 августа 2012 .
- ^ МакКоннелл, Стив (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.