Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!Шпора по ООПиП (3).docx
Скачиваний:
35
Добавлен:
22.09.2019
Размер:
2.31 Mб
Скачать

58. Анти-шаблоны разработки программ

Анти-паттерны в разработке ПО

  1. Инверсия абстракции (Abstraction inversion): Создание простых конструкций поверх сложных (спорный)

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

Последствия

  • Уменьшается скорость программы, увеличиваются расходы памяти.

  • Пользователям приходится писать то, что уже написано.

Как обойти

Разработчикам модуля:

  • Если в модуле есть сходные функции (например, критическая секция и мютекс), тщательно выясните, что писать с нуля, и что делать «обёрткой».

  • Не заставляйте пользователей писать то, что у вас написано.

Пользователям модуля:

  • Выбирайте, какой модуль использовать. Иногда более новая версия имеет эту проблему, в то время как более старая свободна от неё.

Неправильное применение термина

  • Этим словом неправильно называют сложный модуль с простым интерфейсом (что, как правило, желательно).

  • Иногда это навешивают как «ярлык» на ненравящуюся архитектуру.

Примеры

  • В объектно-ориентированных языках программирования простые конструкции приходится реализовывать сложными путями. Например, чтобы создать поток в Java, нужно подключить интерфейс Runnable и переопределить метод run(). Иногда это служит единственным объяснением классу.

  • Во многих библиотеках работы с графикой в Windows палитра реализуется через WinAPI (даже если библиотека WinAPI не используется). В этом случае могут быть проблемы с созданием палитровых рисунков с количеством цветов, близким к 256 (так как Windows резервирует несколько цветов в палитре для собственных нужд).

  1. Неопределённая точка зрения (Ambiguous viewpoint): Представление модели без спецификации её точки рассмотрения

  2. Большой комок грязи (Big ball of mud): Система с нераспознаваемой структурой

  3. Блоб (Blob): см. Божественный объект (God object)

  4. Бензиновая фабрика (Gas factory): Необязательная сложность дизайна

  5. Затычка на ввод данных (Input kludge): Забывчивость в спецификации и выполнении поддержки возможного неверного ввода

  6. Раздувание интерфейса (Interface bloat): Изготовление интерфейса очень мощным и очень трудным для осуществления

  7. Магическая кнопка (Magic pushbutton): Выполнение результатов действий пользователя в виде неподходящего (недостаточно абстрактного) интерфейса. Например, в системах типа Delphi это написание прикладной логики в обработчиках нажатий на кнопку

Магическая кнопка (англ. Magic pushbutton) — это анти-паттерн, очень распространённый в средах визуальной разработки. В этом случае, программист сначала рисуетпользовательский интерфейс, а затем пишет бизнес-логику в автоматически созданных методах.

Проблемы этого анти-паттерна:

  • Код обработчиков элементов интерфейса неконтролируемо растёт

  • Изменение пользовательского интерфейса (или добавление нового интерфейса) становится сложным

  • Усложняется тестирование кода

  1. Перестыковка (компьютер) (Re-Coupling): Процесс внедрения ненужной зависимости

  2. Дымоход (Stovepipe system): Редко поддерживаемая сборка плохо связанных компонентов

  3. Гонки (Race hazard, Race condition): непредвидение возможности наступления событий в порядке, отличном от ожидаемого

Состоя́ние го́нки (англ. race condition) — ошибка проектирования многозадачной системы, при которой работа системы зависит от того, в каком порядке выполняются части кода. Название ошибка получила от похожей ошибки проектирования электронных схем (см. Гонки (электроника)).

Состояние гонки — специфическая ошибка, проявляющаяся в случайные моменты времени и «затихающая» при попытке её локализовать.