Jump to content

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

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

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

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

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

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

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

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

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

Упражняться

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

Творческие шаблоны

[ редактировать ]
Имя Описание В шаблонах проектирования Код завершен [ 13 ] Другой
Абстрактная фабрика Предоставьте интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. Да Да
Строитель Отделите построение сложного объекта от его представления, позволяя в одном и том же процессе построения создавать различные представления. Да Да
Внедрение зависимостей Класс принимает объекты, которые ему требуются, от инжектора, вместо того, чтобы создавать объекты напрямую. Да
Фабричный метод Определите интерфейс для создания одного объекта, но позвольте подклассам решать, экземпляр какого класса создавать. Фабричный метод позволяет классу отложить создание экземпляра до подклассов. Да Да
Ленивая инициализация Тактика отсрочки создания объекта, расчета стоимости или какого-либо другого дорогостоящего процесса до тех пор, пока он не понадобится в первый раз. Этот шаблон отображается в каталоге GoF как «виртуальный прокси» — стратегия реализации шаблона «Прокси» . Да Да ПОЭА [ 14 ]
Мультитонна Убедитесь, что класс имеет только именованные экземпляры, и обеспечьте глобальную точку доступа к ним. Да Да Да
Пул объектов Избегайте дорогостоящего приобретения и высвобождения ресурсов путем переработки объектов, которые больше не используются. Можно считать обобщением шаблонов пула соединений и пула потоков . Да Да Да
Прототип Укажите типы объектов, которые нужно создать, используя прототипный экземпляр, и создавайте новые объекты из «скелета» существующего объекта, тем самым повышая производительность и сводя к минимуму объем памяти. Да Да Да
Получение ресурсов — это инициализация (RAII) Обеспечьте правильное высвобождение ресурсов, привязав их к продолжительности жизни подходящих объектов. Да Да Да
Синглтон Убедитесь, что класс имеет только один экземпляр, и предоставьте глобальную точку доступа к нему. Да Да Да
Имя Описание В шаблонах проектирования Код завершен [ 13 ] Другой
Адаптер , оболочка или переводчик Преобразуйте интерфейс класса в другой интерфейс, ожидаемый клиентами. Адаптер позволяет классам работать вместе, что иначе невозможно из-за несовместимости интерфейсов. Эквивалентом шаблона корпоративной интеграции является транслятор. Да Да Да
Мост Отделите абстракцию от ее реализации, позволяя им изменяться независимо. Да Да Да
Композитный Составляйте объекты в древовидные структуры для представления иерархий «части-целые». Компоновка позволяет клиентам единообразно обрабатывать отдельные объекты и композиции объектов. Да Да Да
Декоратор Прикрепите дополнительные обязанности к объекту, динамически сохраняя тот же интерфейс. Декораторы предоставляют гибкую альтернативу созданию подклассов для расширения функциональности. Да Да Да
Делегация Расширяйте класс путем композиции вместо создания подклассов. Объект обрабатывает запрос, делегируя его второму объекту (делегату). Да Да Да
Объект расширения Добавление функциональности в иерархию без изменения иерархии. Да Да Да
Фасад Предоставьте унифицированный интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы. Да Да Да
Наилегчайший вес Используйте совместное использование для эффективной поддержки большого количества похожих объектов. Да Да Да
Передний контроллер Шаблон относится к проектированию веб-приложений. Он обеспечивает централизованную точку входа для обработки запросов. Да Да

J2EE-паттерны [ 15 ] ПОЭА [ 16 ]

Маркер Пустой интерфейс для связи метаданных с классом. Да Да Эффективная Java [ 17 ]
Модуль Сгруппируйте несколько связанных элементов, таких как классы, синглтоны, методы, используемые глобально, в единую концептуальную сущность. Да Да Да
Прокси Предоставьте суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему. Да Да Да
Твин [ 18 ] Twin позволяет моделировать множественное наследование на языках программирования, которые не поддерживают эту функцию. Да Да Да

Поведенческие модели

[ редактировать ]
Имя Описание В шаблонах проектирования Код завершен [ 13 ] Другой
доска Шаблон искусственного интеллекта для объединения разрозненных источников данных (см. систему доски ) Да Да Да
Цепочка ответственности Избегайте связывания отправителя запроса с его получателем, предоставляя возможность обработать запрос нескольким объектам. Объедините принимающие объекты и передавайте запрос по цепочке, пока объект его не обработает. Да Да Да
Команда Инкапсулируйте запрос как объект, тем самым позволяя параметризовать клиентов с различными запросами, а также ставить в очередь или регистрировать запросы. Это также позволяет поддерживать отменяемые операции. Да Да Да
Свободный интерфейс Спроектируйте API так, чтобы он был связан в цепочку методов и читался как DSL. Каждый вызов метода возвращает контекст, через который становятся доступными следующие вызовы логического метода. Да Да Да
Устный переводчик Учитывая язык, определите представление его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на языке. Да Да Да
Итератор Предоставьте способ последовательного доступа к элементам агрегатного объекта , не раскрывая его базовое представление. Да Да Да
Посредник Определите объект, который инкапсулирует взаимодействие набора объектов. Медиатор способствует слабой связи , не позволяя объектам явно ссылаться друг на друга, и позволяет их взаимодействию изменяться независимо. Да Да Да
сувенир Не нарушая инкапсуляцию, фиксируйте и экстернализуйте внутреннее состояние объекта, позволяя позже восстановить объект в это состояние. Да Да Да
Нулевой объект Избегайте нулевых ссылок, предоставляя объект по умолчанию. Да Да Да
Наблюдатель или Публикация/подписка Определите зависимость «один ко многим» между объектами, при которой изменение состояния одного объекта приводит к автоматическому уведомлению и обновлению всех его зависимых объектов. Да Да Да
Слуга Определите общую функциональность для группы классов. Шаблон слуги также часто называют реализацией вспомогательного класса или служебного класса для данного набора классов. Вспомогательные классы обычно не имеют объектов, поэтому у них есть все статические методы, которые действуют на различные типы объектов классов. Да Да Да
Спецификация Рекомбинируемая бизнес-логика способом булевым . Да Да Да
Состояние Разрешить объекту изменять свое поведение при изменении его внутреннего состояния. Будет казаться, что объект меняет свой класс. Да Да Да
Стратегия Определите семейство алгоритмов, инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют. Да Да Да
Шаблонный метод Определите скелет алгоритма в операции, отложив некоторые шаги подклассам. Метод шаблона позволяет подклассам переопределять определенные шаги алгоритма без изменения структуры алгоритма. Да Да Да
Посетитель Представляет операцию, выполняемую над экземплярами набора классов. Посетитель позволяет определить новую операцию без изменения классов элементов, с которыми она работает. Да Да Да

Шаблоны параллелизма

[ редактировать ]
Имя Описание В ПОСА2 [ 19 ] Другой
Активный объект Отделяет выполнение метода от вызова метода, который находится в собственном потоке управления. Цель состоит в том, чтобы внедрить параллелизм за счет использования асинхронного вызова методов и планировщика для обработки запросов. Да
Упрямство Выполняйте действие над объектом только тогда, когда объект находится в определенном состоянии. Нет
Свойства привязки Объединение нескольких наблюдателей для принудительной синхронизации или координации свойств различных объектов каким-либо образом. [ 20 ] Нет
Вычислительное ядро Одно и то же вычисление много раз параллельно, отличаясь целочисленными параметрами, используемыми с математическими вычислениями указателей без ветвления в общие массивы, такими как для графического процессора оптимизированное матричное умножение или сверточная нейронная сеть . Нет
Двойная проверка блокировки Сократите затраты на получение блокировки, сначала проверив критерий блокировки («подсказка блокировки») небезопасным способом; только если это удастся, фактическая логика блокировки продолжится.

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

Да
Асинхронный на основе событий Устраняет проблемы с асинхронным шаблоном, возникающие в многопоточных программах. [ 21 ] Нет
Защищенная подвеска Управляет операциями, которые требуют как получения блокировки, так и выполнения предварительного условия, прежде чем операция может быть выполнена. Нет
Присоединиться Шаблон соединения обеспечивает возможность написания параллельных, параллельных и распределенных программ посредством передачи сообщений. По сравнению с использованием потоков и блокировок это модель программирования высокого уровня. Нет
Замок Один поток «блокирует» ресурс, не позволяя другим потокам получить к нему доступ или изменить его. [ 22 ] Нет ПОЭА [ 14 ]
Шаблон проектирования обмена сообщениями (MDP) Обеспечивает обмен информацией (т.е. сообщениями) между компонентами и приложениями. Нет
Мониторинг объекта Объект, методы которого подлежат взаимному исключению , что предотвращает ошибочную попытку использования его несколькими объектами одновременно. Да
Реактор Объект-реактор предоставляет асинхронный интерфейс для ресурсов, которые должны обрабатываться синхронно. Да
Блокировка чтения-записи Разрешает одновременный доступ для чтения к объекту, но требует монопольного доступа для операций записи. Для записи может использоваться базовый семафор, а механизм копирования при записи может использоваться, а может и не использоваться. Нет
Планировщик Явно контролируйте, когда потоки могут выполнять однопоточный код. Нет
Шаблон обработчика службы Для каждого запроса сервер создает специальный обработчик клиента для обработки запроса. [ 23 ] Также называется потоком за сеанс . [ 24 ] Нет
Пул потоков Для выполнения ряда задач создается несколько потоков, которые обычно организуются в очередь. Обычно задач намного больше, чем потоков. Можно считать частным случаем шаблона пула объектов . Нет
Потокоспецифическое хранилище Статическая или «глобальная» память, локальная для потока. Да
Безопасный параллелизм с эксклюзивным владением Избегание необходимости в параллельных механизмах во время выполнения, поскольку можно доказать исключительное право собственности. Это примечательная возможность языка Rust, но проверка во время компиляции не является единственным средством. Программист часто вручную создает такие шаблоны в коде, пропуская использование механизма блокировки, поскольку программист оценивает, что данная переменная никогда не будет использована. к одновременному доступу. Нет
Атомная операция процессора x86 и другие архитектуры ЦП поддерживают ряд атомарных инструкций, которые гарантируют безопасность памяти для изменения и доступа к примитивным значениям (целым числам). Например, два потока могут безопасно увеличивать счетчик. Эти возможности также можно использовать для реализации механизмов для других шаблонов параллелизма, как указано выше. Для этих возможностей язык C# использует класс Interlocked . Нет

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

[ редактировать ]

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

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

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

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

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

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

См. также

[ редактировать ]
  1. ^ Смит, Рид (октябрь 1987 г.). Панельная дискуссия по методологии проектирования . OOPSLA Приложение к протоколу '87. дои : 10.1145/62138.62151 . Уорд предостерег от чрезмерного программирования на, как он выразился, «высоком уровне волшебников». Он отметил, что письменный «язык шаблонов» может значительно улучшить выбор и применение абстракций. Он предложил «радикальное изменение бремени проектирования и реализации», основывая новую методологию на адаптации работы Кристофера Александера в области языков шаблонов, и что языки шаблонов, ориентированные на программирование, разработанные в Tektronix, значительно помогли их усилиям по разработке программного обеспечения.
  2. ^ Бек, Кент ; Каннингем, Уорд (сентябрь 1987 г.). Использование языков шаблонов для объектно-ориентированных программ . OOPSLA Семинар '87 по спецификациям и проектированию объектно-ориентированного программирования . Проверено 26 мая 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. ^ Тиако, Пьер Ф. (31 марта 2009 г.). «Формальное моделирование и спецификация шаблонов проектирования с использованием RTPA» . В Тиако, Пьер Ф. (ред.). Программные приложения: концепции, методологии, инструменты и приложения: концепции, методологии, инструменты и приложения . п. 636. дои : 10.4018/978-1-60566-060-8 . ISBN  9781605660615 .
  6. ^ Лааксо, Сари А. (16 сентября 2003 г.). «Сборник шаблонов проектирования пользовательского интерфейса» . Хельсинкский университет, факультет компьютерных наук . Проверено 31 января 2008 г.
  7. ^ Хир, Дж.; Агравала, М. (2006). «Шаблоны проектирования программного обеспечения для визуализации информации» . Транзакции IEEE по визуализации и компьютерной графике . 12 (5): 853–60. CiteSeerX   10.1.1.121.4534 . дои : 10.1109/TVCG.2006.178 . ПМИД   17080809 . S2CID   11634997 .
  8. ^ Догерти, Чад; Сэйр, Кирк; Сикорд, Роберт С.; Свобода, Давид; Тогаши, Казуя (2009). Шаблоны безопасного проектирования (PDF) . Институт программной инженерии.
  9. ^ Гарфинкель, Симсон Л. (2005). Принципы и шаблоны проектирования компьютерных систем, которые одновременно безопасны и удобны в использовании (кандидатская диссертация).
  10. ^ «Yahoo! Библиотека шаблонов проектирования» . Архивировано из оригинала 29 февраля 2008 г. Проверено 31 января 2008 г.
  11. ^ «Как разработать свою бизнес-модель как бережливый стартап?» . 06.01.2010 . Проверено 6 января 2010 г.
  12. ^ Шаблонные языки программирования, Материалы конференции (ежегодно, 1994 г.) [1]
  13. ^ Перейти обратно: а б с МакКоннелл, Стив (июнь 2004 г.). «Дизайн в строительстве». Код завершен (2-е изд.). Майкрософт Пресс . п. 104 . ISBN  978-0-7356-1967-8 . Таблица 5.1. Популярные шаблоны проектирования
  14. ^ Перейти обратно: а б Фаулер, Мартин (2002). Шаблоны архитектуры корпоративных приложений . Аддисон-Уэсли . ISBN  978-0-321-12742-6 .
  15. ^ Алур, Дипак; Крупи, Джон; Малкс, Дэн (2003). Базовые шаблоны J2EE: лучшие практики и стратегии проектирования . Прентис Холл . п. 166. ИСБН  978-0-13-142246-9 .
  16. ^ Фаулер, Мартин (2002). Шаблоны архитектуры корпоративных приложений . Аддисон-Уэсли . п. 344. ИСБН  978-0-321-12742-6 .
  17. ^ Блох, Джошуа (2008). «Пункт 37. Используйте интерфейсы маркеров для определения типов» . Эффективная Java (Второе изд.). Аддисон-Уэсли. п. 179 . ISBN  978-0-321-35668-0 .
  18. ^ «Твин — шаблон проектирования для моделирования множественного наследования» (PDF) .
  19. ^ Шмидт, Дуглас К.; Сталь, Майкл; Ронерт, Ганс; Бушманн, Франк (2000). Шаблонно-ориентированная архитектура программного обеспечения, Том 2: Шаблоны для параллельных и сетевых объектов . Джон Уайли и сыновья. ISBN  978-0-471-60695-6 .
  20. ^ Свойства привязки
  21. ^ Нагель, Кристиан; Эвджен, Билл; Глинн, Джей; Уотсон, Карли; Скиннер, Морган (2008). «Асинхронный шаблон на основе событий». Профессиональный C# 2008 . Уайли. стр. 570–571. ISBN  978-0-470-19137-8 .
  22. ^ Шаблон блокировки
  23. ^ Франкаланца, Адриан; Табоне, Жерар (октябрь 2023 г.). «ElixirST: система типов на основе сеансов для модулей Elixir». Журнал логических и алгебраических методов программирования . 135 . дои : 10.1016/j.jlamp.2023.100891 . S2CID   251442539 .
  24. ^ Шмидт, Дуглас К.; Виноски, Стив (июль – август 1996 г.). «Взаимосвязь объектов: сравнение альтернативных методов программирования для многопоточных серверов CORBA (столбец 7)» (PDF) . Отчет SIGS C++ . S2CID   2654843 .
  25. ^ Габриэль, Дик . «Определение шаблона» . Архивировано из оригинала 9 февраля 2007 г. Проверено 6 марта 2007 г.
  26. ^ Фаулер, Мартин (1 августа 2006 г.). «Написание шаблонов программного обеспечения» . Проверено 6 марта 2007 г.
  27. ^ Норвиг, Питер (1998). Шаблоны проектирования в динамических языках .
  28. ^ Ханнеманн, Ян; Кицалес, Грегор (2002). «Реализация шаблона проектирования в Java и AspectJ». Материалы 17-й конференции ACM SIGPLAN по объектно-ориентированному программированию, системам, языкам и приложениям — OOPSLA '02 . ООПСЛА '02. п. 161. дои : 10.1145/582419.582436 . ISBN  1581134711 .
  29. ^ Грэм, Пол (2002). «Месть ботанов» . Проверено 11 августа 2012 г.
  30. ^ МакКоннелл, Стив (2004). Code Complete: Практическое руководство по созданию программного обеспечения, 2-е издание . Пирсон Образование. п. 105 . ISBN  9780735619678 .
  31. ^ Мейер, Бертран ; Арнут, Карин (июль 2006 г.). «Компонентизация: пример посетителя» (PDF) . IEEE-компьютер . 39 (7): 23–30. CiteSeerX   10.1.1.62.6082 . дои : 10.1109/MC.2006.227 . S2CID   15328522 .

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

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 465a7b87c47ab69c71e9c71d4b4108fa__1720581840
URL1:https://arc.ask3.ru/arc/aa/46/fa/465a7b87c47ab69c71e9c71d4b4108fa.html
Заголовок, (Title) документа по адресу, URL1:
Software design pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)