Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архитектура информационных систем. Часть 1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
761 Кб
Скачать

Таблица 7.3

Основные виды поведенческих паттернов

 

Паттерн

 

Назначение

 

 

Цепочка ответ-

Упрощает взаимодействие между объектами путём устранения

ственности

 

жёсткой привязки объекта-отправителя запроса от его получа-

(Chain

of

Re-

теля (обработчика). Для этого объекты обработчики связывают-

sponsibility)

 

ся в цепочку, по которой запрос будет передаваться до тех пор,

 

 

 

 

пока не будет обработан, возможно, несколькими обработчика-

 

 

 

 

ми. При этом отправителю достаточно хранить только одну

 

 

 

 

ссылку на начало цепочки

 

 

Команда (Com-

Предполагает преобразование запроса на обработку, т.е. неко-

mand)

 

 

торой команды, в объект. Это позволяет выполнять над ним

 

 

 

 

любые операции, применимые к объектам: сохранять, переда-

 

 

 

 

вать иным объектам или функциям в качестве параметра, воз-

 

 

 

 

вращать в качестве результата. Может использоваться, напри-

 

 

 

 

мер, в приложениях с интерфейсом пользователя

 

 

Интерпретатор

Определяет грамматику некоторого языка и интерпретирует

(Interpreter)

 

языковые предложения для решения некоторой задачи

 

 

 

 

 

Итератор

(It-

Предоставляет общий метод последовательного доступа к эле-

erator)

 

 

ментам различных структур данных, который не зависит от

 

 

 

 

особенностей структуры и не требует её раскрытия. Упрощает

 

 

 

 

сопряжение различных алгоритмов обхода с различными струк-

 

 

 

 

турами данных

 

 

Моментальный

Получает и сохраняет внутреннее состояние объекта, что по-

«снимок»

или

зволяет, при необходимости, восстановить объект в том же со-

хранитель (Me-

стоянии. Соблюдается инкапсуляция, т.е. сохранённое состоя-

mento)

 

 

ние недоступно для других объектов. Может быть использован

 

 

 

 

для реализации операций типа "Отмена"

 

 

 

Медиатор

или

Предусматривает создание объекта-посредника для снижения

посредник

 

степени связанности сильно-связанных объектов системы. Объ-

(Mediator)

 

екты взаимодействуют друг с другом не непосредственно, а

 

 

 

 

только через объект-посредник, вследствие чего снижается чис-

 

 

 

 

ло взаимосвязей в системе и упрощается её структура

 

 

 

Состояние

 

Обеспечивает возможность для объекта изменять своё поведе-

(State)

 

 

ние при изменении его внутреннего состояния. Улучшает гиб-

 

 

 

 

кость изменения поведения по сравнению с использованием для

 

 

 

 

описания переходов структур данных

 

 

 

Метод

шабло-

Позволяет "замещать" методы базового класса методами произ-

на

(Template

водных классов. Широко используется в каркасах приложений

Method)

 

 

 

 

 

 

 

 

Порожающие паттерны (creational patterns) служат для созда-

ния объектов в системе (табл. 7.4) [4]. В процессе функционирова-

61

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

унифицированный способ создания экземпляров объектов, не требующий указания определенных типов классов в программе;

лёгкость создания объектов: для создания экземпляра объекта не требуется разрабатывать большой объём сложного программного кода;

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

 

 

 

Таблица 7.4

 

 

Основные виды порождающих паттернов

 

 

 

Окончание табл.7.4

 

 

 

Паттерн

 

Назначение

 

 

 

«Абстрактная

 

Предоставляет возможность создания групп взаимосвязан-

фабрика»

 

(Ab-

ных объектов без необходимости указания конкретных

stract Factory)

 

классов объектов. Система становится независимой от ти-

 

 

 

пов создаваемых объектов

 

 

 

«Строитель»

 

Обеспечивает поэтапное создание объектов большой слож-

(Builder)

 

 

ности и отделяет алгоритм его создания от внешнего пред-

 

 

 

ставления объекта. Алгоритм создания сложного объекта

 

 

 

определяется в специальном классе "распорядитель", а от-

 

 

 

вечает за "сборку" иерархия классов Builder, подклассы ко-

 

 

 

торой реализуют его отдельные части

 

 

 

«Фабричный

ме-

Обеспечивает расширяемость и независимость системы от

тод»

(Factory

процесса порождения объектов и их типов на основе ис-

Method)

 

 

пользования механизма полиморфизма. Объекты конкрет-

 

 

 

ных типов создаются в классе-фабрике, методы создания

 

 

 

классов которого называют фабричными.

 

 

 

«Прототип»

 

Упрощает создание объектов на основе прототипов (уже

(Prototype)

 

существующих в системе объектов), поддерживающих кло-

 

нирование, т.е. способных создавать собственные дублика-

 

 

 

 

 

 

ты. Объект может быть создан путём клонирования соот-

 

 

 

ветствующего прототипа

 

 

 

«Одиночка»

 

Позволяет создать в системе лишь один экземпляр объекта

(Singleton)

 

 

некоторого класса, предоставляя доступ к нему остальным

 

 

классам

 

 

 

 

 

 

 

62

Паттерны параллельного программирования призваны обеспе-

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

совместное использование ресурсов: если операции обращаются к одним и тем же данным (ресурсу), то они могут конфликтовать друг с другом, если осуществляют доступ к данным (ресурсу) в один и тот же момент времени. Для корректного выполнения таких операций их необходимо выполнять таким образом, чтобы доступ к общему ресурсу в каждый момент времени получала только одна операция, при этом следует избегать ситуации их взаимной блокировки;

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

Основные типы паттернов параллельного программирования и их назначение показаны в табл. 7.5.

Таблица 7.5

Основные типы паттернов параллельного программирования и их назначение

 

 

Окончание табл.7.5

Паттерн

Назначение

 

 

Однопоточное

Большая часть задач, связанных с управлением доступа к раз-

выполнение

деляемым ресурсам, может быть решена на основе использо-

(Single Threaded

вания однопоточного выполнения

Execution)

 

 

 

Охраняемая

Используется в ситуации, когда поток имеет монопольный

приостановка

доступ к разделяемому ресурсу и не имеет возможности за-

(Guarded

Sus-

вершить выполнение операции над этим ресурсом, так как не

pension)

 

имеет доступа к другим необходимым ресурсам

 

 

 

Объект

блоки-

Используется в ситуации, когда необходимо координировать

ровки (Lock Ob-

доступ к нескольким различным ресурсам

ject)

 

 

 

 

 

Отмена

(Balk-

Используется в ситуации, когда операция либо должна быть

ing)

 

выполнена немедленно, либо не выполнена вообще

 

 

Планировщик

Используется в ситуации, когда имеет значение порядок вы-

(диспетчер)

полнения операций

 

 

 

63

 

 

Окончание табл.7.5

Паттерн

 

Назначение

 

 

 

(Scheduler)

 

 

 

 

Блокировка чте-

Используется в ситуации, когда одни операции могут совме-

ния/записи

 

стно использовать некоторый ресурс одновременно, а другие –

(Read/Write

 

не могут

Lock)

 

 

 

 

Производитель-

Обеспечивает возможность координировать объекты, которые

потребитель

 

создают некоторый ресурс, и объекты, которые используют

(Producer

 

данный ресурс

/consumer)

 

 

 

 

 

Двухфазное

за-

Обеспечивает правильное последовательное закрытие потоков

вершение (Two-

 

Phase Termina-

 

tion)

 

 

 

 

Двойная буфе-

Специальная версия паттерна «Производитель-потребитель»,

ризация (Double

которая позволяет создавать необходимый ресурс заранее

Buffering)

 

 

 

 

Асинхронная

Устраняет необходимость ожидания результата операции, ес-

обработка

 

ли этот результат не требуется немедленно

(Asynchronous

 

Processing)

 

 

 

 

 

Будущее

(Fu-

Позволяет классам, которые вызывают операцию, не иметь

ture)

 

информации о характере операции – является она синхронной

 

 

или асинхронной

 

 

 

Паттерны различных типов могут описываться различными способами. Наиболее часто используется описание, содержащее следующие разделы [10]: название и тип, другие названия (если имеются), назначение, обоснование (решаемые проблемы), условия целесообразного применения, структура паттерна (в объектноориентированной форме), объекты и паттерны, используемые в самом описываемом паттерне, результаты работы, рекомендации по использованию, пример реализации кода, примеры применения, близкие по назначению паттерны.

7.2. Антипаттерны

Антипаттерны (antipatterns), или ловушки (pitfalls) – это типо-

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

64

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

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

Антипаттерны применительно к разработке ИС можно разделить на следующие типовые группы [12]:

в управлении разработкой ПО;

в разработке ПО;

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

в области программирования;

методологические антипаттерны;

организационные антипаттерны.

Наиболее известные антипаттерны в управлении разработкой ПО и их характеристика приведены в табл. 7.6. Антипаттерны в разработке ПО и их характеристика приведены в табл. 7.7. Антипаттерны в объектно-ориентированном проектировании и их характеристика приведены в табл. 7.8.

Таблица 7.6 Антипаттерны в управлении разработкой ПО и их характеристика

Аптипаттерн

Характеристика

 

 

«Дым и зер-

Иллюстрация вида ещё не реализованной системы. Часто ис-

кала»

(Smoke

пользуется для демонстрации финального проекта и его функ-

and mirrors)

ционала. Название связано с двумя популярными средствами,

 

 

которыми пользуются фокусники для сокрытия своих секре-

 

 

тов

 

 

«Раздувание»

Тенденция к увеличению потребностей в ресурсах для каждой

ПО

(Software

последующей версии системы. В более общем контексте при-

bloat)

 

меняется для описания программных систем, которые исполь-

 

 

зуют больше ресурсов, чем необходимо

 

 

«Функции для

Добавление в программу не связанных между собой, плохо

галочки» (Op-

реализованных функций, потребность в которых практически

tions checkbox)

отсутствует (зачастую, для того чтобы лишь прорекламиро-

 

 

вать наличие дополнительных функций)

 

 

 

65

Таблица 7.7 Антипаттерны в разработке ПО и их характеристика

Аптипаттерн

Характеристика

 

 

Неопределенная

Представление модели без указания ракурса ее рассмотрения

точка

 

зрения

 

(Ambiguous

 

viewpoint)

 

 

 

 

«Большой комок

Система, структуру которой невозможно либо очень сложно

грязи»

(Big ball

выявить

of mud)

 

 

 

 

 

«Много шума из

Необоснованно усложнённый дизайн

ничего»

(Gas

 

factory)

 

 

 

 

 

 

 

«Ляп»

 

ввода

Неопределённость в спецификации и неполнота поддержки

данных»

(Input

возможного неверного ввода

kludge)

 

 

 

 

 

«Раздувание ин-

Чрезмерно развитый и сложный интерфейс, трудный в реали-

терфейса» (Inter-

зации

face bloat)

 

 

 

 

«Магическая»

Внедрение логики работы программы в пользовательский ин-

кнопка

(Magic

терфейс, зачастую в программах, созданных в средах визуаль-

pushbutton)

ной разработки

 

 

«Перестыковка»

Введение зависимости, которая не является необходимой

(Re-Coupling)

 

 

 

«Дымоход»

Структура, в которой потоки информации циркулируют пре-

(Stovepipe

sys-

имущественно «вверх-вниз», а не горизонтально, между плохо

tem)

 

 

связанными компонентами

 

 

«Состояние гон-

Непредусмотренная возможность наступления событий в по-

ки» (Race condi-

следовательности, отличной от предполагаемой (в многопо-

tion)

 

 

точных приложениях)

 

 

 

 

66

Таблица 7.8 Антипаттерны в объектно-ориентированном программировании

и их характеристика

 

 

Окончание табл.7.8

Аптипаттерн

Характеристика

 

 

 

Базовый

класс-

Наследование методов из класса-утилиты вместо делегирова-

утилита

(Base

ния к данному классу

Bean)

 

 

 

 

 

Вызов

предка

Метод класса-потомка обязательно требует вызова того же

(Call Super)

метода класса-предка

 

 

«Божествен-

Сосредоточение чрезмерно большого количества данных и

ный»

объект

функций в одной части системы (классе), аналог отказу от мо-

(God object)

дульного программирования

 

 

«Полтергейст»

Наличие объектов, которые используются только для переда-

(Poltergeist)

чи информации другим объектам

 

 

 

«Проблема йо-

Высокая степень размытости сильно связанного кода по ие-

йо» (Yo-yo prob-

рархии классов. Термин происходит от названия игрушки йо-

lem)

 

йо

 

 

Синглтонизм

Использование паттерна Одиночка там, где это не является

(Singletonitis)

необходимым

 

 

 

 

Антипаттерны в области программирования и их характеристика приведены в табл. 7.9. Методологические антипаттерны и их характеристика приведены в табл. 7.10. Организационные антипаттерны и их характеристика приведены в табл. 7.11.

Таблица 7.9 Антипаттерны в области программирования и их характеристика

 

 

 

Окончание табл.7.9

 

Аптипаттерн

Характеристика

 

 

 

 

Ненужная слож-

Получение решения, сложность которого необоснованно вы-

 

ность (Acciden-

сока

 

tal complexity)

 

 

 

 

 

 

 

«Действие

на

Непредусмотренное взаимодействие между удалёнными час-

 

расстоянии»

 

тями системы

 

(Action at a dis-

 

 

 

tance)

 

 

 

 

 

 

 

«Накопить и за-

Использование в качестве параметров подпрограмм набора

 

пустить»

(Ac-

глобальных переменных

 

cumulate

and

 

 

 

fire)

 

 

 

 

 

 

 

 

 

67

 

 

 

Продолжение табл. 7.9

 

 

 

Окончание табл.7.9

Аптипаттерн

Характеристика

 

 

 

 

 

«Лодочный

Сохранение части системы, которая уже не используется

 

якорь» (Boat an-

 

 

 

chor)

 

 

 

 

 

 

 

 

 

Активное ожи-

Организация ожидания события с потреблением ресурсов

 

дание

(Busy

центрального процессора, как правило, при помощи цикличе-

 

spin)

 

 

ски повторяемой проверки, вместо использования системы

 

 

 

 

сообщений

 

 

 

 

 

Кэширование

После обработки ошибки не сброшен её флаг

 

ошибки

(Cach-

 

 

 

ing failure)

 

 

 

 

 

 

 

 

Инерция

кода

Избыточное ограничение части системы, обусловленное по-

 

(Code

momen-

стоянным учётом ее поведения в других частях системы

 

tum)

 

 

 

 

 

 

 

 

Кодирование

Кодирование путём добавления нового кода для реализации

 

путем исключе-

каждого частного случая

 

ния

(Coding by

 

 

 

exception)

 

 

 

 

 

 

«Таинствен-

Использование неизвестных аббревиатур вместо мнемониче-

 

ный» код (Cryp-

ских имен, обеспечивающих самодокументирование про-

 

tic code)

 

граммы

 

 

 

 

 

Жесткое

коди-

Добавление в код предположений об окружении системы в

 

рование

(Hard

чрезмерно большом количестве (задание в программе кон-

 

code)

 

кретных значений, например, путей к файлам, имён процес-

 

 

 

 

сов, серверов и т.д.). Снижает переносимость программ

 

 

 

 

 

Мягкое

кодиро-

Чрезмерное избегание жесткого кодирования, с обеспечением

 

вание

(Soft

возможности настройки слишком большого числа парамет-

 

code)

 

ров, при этом настройка системы существенно усложняется и

 

 

 

 

превращается и программирование

 

 

 

 

 

«Поток

лавы»

Сохранение уже не используемого или некачественного кода

 

(Lava flow)

в связи с возможными высокими затратами на его удаление

 

 

 

 

или в связи с непредсказуемыми последствиями

 

 

 

 

«Магические»

Включение в программы числовых значений без объяснений

 

числа

(Magic

их смысла. Затрудняет понимание программы

 

numbers)

 

 

 

 

 

 

 

Процедурный

Использование процедурной/структурной парадигмы во всех

 

код

(Procedural

случаях. Следует использовать ту парадигму, которая лучше

 

code)

 

соответствует конкретной задаче. Процедурная парадигма на

 

 

 

 

данный момент становится антипаттерном

 

 

 

 

«Спагетти-код»

Код, порядок выполнения которого затруднен для восприятия

 

 

 

 

 

 

 

 

68

 

 

Окончание табл.7.9

Аптипаттерн

Характеристика

 

 

(Spaghetti code)

 

 

 

 

«Мыльный

пу-

Класс, содержащий данные, которые никогда не используют-

зырь»

(Soap

ся

bubble)

 

 

 

 

 

Таблица 7.10 Методологические антипаттерны и их характеристика

Аптипаттерн

Характеристика

 

 

Программиро-

Программа создаётся путём копирования и небольшой моди-

вание

методом

фикации существующего кода вместо создания общего реше-

копирования-

ния. Такая методология зачастую приводит к появлению из-

вставки

 

(Copy

быточно больших, сложно читаемых функций, содержащих

and

paste

pro-

большое количество повторяющихся фрагментов кода

gramming)

 

 

 

 

Дефакторинг

Удаление функциональности с соответствующим изменением

(Defactoring)

документации

 

 

 

«Золотой

моло-

Применение некоторого решения в качестве универсального

ток»

 

(Golden

для решения самых разных задач. Название антипаттерна свя-

hammer)

 

 

зано с английской поговоркой «когда в руках молоток, все

 

 

 

 

проблемы кажутся гвоздями»

 

 

 

Фактор

неверо-

Заблуждение о невозможности срабатывания известной

ятности

 

(Im-

ошибки

probability

fac-

 

tor)

 

 

 

 

 

 

Преждевремен-

Оптимизация на ранних этапах на основе ещё недостаточной

ная оптимизация

информации

(Premature

opti-

 

mization)

 

 

 

 

«Изобретение

Создание собственного решения, когда уже существует хо-

колеса»

 

(Rein-

рошее готовое решение

venting

 

the

 

wheel)

 

 

 

 

 

«Изобретение

Создание плохого собственного решения, когда существует

квадратного ко-

хорошее готовое решение

леса

(Reinvent-

 

ing

the

 

square

 

wheel)

 

 

 

 

 

 

 

 

69

Таблица 7.11 Организационные антипаттерны и их характеристика

 

 

 

Окончание табл.7.11

Аптипаттерн

Характеристика

 

 

«Аналитический

Приложение чрезмерно больших усилий на этапе анализа

паралич»

 

 

проекта. Способно привести к закрытию проекта до начала

(Analysis

paraly-

его реализации

sis)

 

 

 

 

 

 

«Дойная

коро-

Продукт приносит хороший доход без особых затрат, но на

ва» (Cash cow)

его развитие или на разработку новых аналогичных продук-

 

 

 

тов средства не выделяются

 

 

Продолжитель-

Чрезмерно большие усилия, направленные на перенос систе-

ное устаревание

мы в новые окружения

(Continuous

ob-

 

solescence)

 

 

 

 

 

«Ползущее»

 

Улучшение отдельных характеристик в ущерб общему каче-

улучшение

 

ству системы

(Creeping

featur-

 

ism)

 

 

 

 

 

 

«Разработка

ко-

Коллективная разработка проекта при некомпетентном руко-

митетом»

(De-

водстве, т.е. без единого системного архитектора. Зачастую на

sign by commit-

первое место ставятся личные интересы отдельных участни-

tee)

 

 

ков в ущерб качеству 14

 

 

«Продвижение

Продолжение реализации решения даже после того, как была

обязательств»

доказана его некорректность

(Escalation

of

 

commitment)

 

 

 

 

«Я тебе это го-

Неоправданное игнорирование мнения эксперта

ворил»

(I

told

 

you so)

 

 

 

 

 

 

Управление,

ос-

Чрезмерно большое внимание к численным характеристикам,

нованное

 

на

которые либо слабо связаны с управляемой системой, либо

числах

(Man-

сложность получения которых слишком высока

agement by num-

 

bers)

 

 

 

 

 

«Драконовские

Необоснованно жёсткий стиль управления

меры» (Manage-

 

ment by

 

 

 

perkele15)

 

 

 

 

 

 

 

14Известна фраза по тематике этого антипаттерна: «Верблюд – это лошадь, спроектированная комитетом».

15Дьявол (в переводе с финского языка).

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]