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

59. Анти-шаблоны в объектно-ориентированном программировании

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

  1. Базовый класс-утилита (BaseBean): Наследование функциональности из класса-утилиты вместо делегирования к нему

  2. Вызов предка (CallSuper): Для реализации прикладной функциональности методу класса-потомка требуется в обязательном порядке вызывать те же методы класса-предка

  3. Ошибка пустого подкласса (Empty subclass failure): Создание класса (в Perl), который не проходит «проверку пустоты подкласса» («Empty Subclass Test») из-за различного поведения по сравнению с классом, который наследуется от него без изменений

  4. Божественный объект (God object): Концентрация слишком большого количества функций в одной части системы (классе)

В объектно-ориентированном программировании божественный объект (англ. God object) — это объект, который хранит в себе «слишком много» или делает «слишком много». Является примером анти-паттерна.

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

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

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

Божественный объект — это объектно-ориентированный аналог отказа от использования подпрограмм в процедурном программировании или использования слишком большого количества глобальных переменных для хранения информации о состоянии программы.

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

  1. Объектная клоака (Object cesspool): Переиспользование объектов, находящихся в непригодном для переиспользования состоянии

  2. Полтергейст (компьютер) (Poltergeist): Объекты, чьё единственное предназначение — передавать информацию другим объектам

  3. Проблема йо-йо (Yo-yo problem): Чрезмерная размытость сильно связанного кода (например, выполняемого по порядку) по иерархии классов

  4. Одиночество (антипаттерн) (Singletonitis): Избыточное использование паттерна одиночка

60. Анти-шаблоны в программировании

Анти-паттерны в программировании

  • Ненужная сложность (Accidental complexity): Внесение ненужной сложности в решение

  • Действие на расстоянии (Action at a distance): Неожиданное взаимодействие между широко разделёнными частями системы

  • Накопить и запустить (Accumulate and fire): Установка параметров подпрограмм в наборе глобальных переменных

  • Слепая вера (Blind faith): Недостаточная проверка (a) корректности исправления ошибки или (b) результата работы подпрограммы

  • Лодочный якорь (Boat anchor): Сохранение более не используемой части системы

  • Активное ожидание (Busy spin): Потребление ресурсов ЦПУ (процессорного времени) во время ожидания события, обычно при помощи постоянно повторяемой проверки, вместо того, чтобы использовать асинхронное программирование (к примеру, систему сообщений или событий)

  • Кэширование ошибки (Caching failure): Забывать сбросить флаг ошибки после её обработки

  • Воняющий подгузник (The Diaper Pattern Stinks): Сброс флага ошибки без ее обработки или передачи вышестоящему обработчику

  • Проверка типа вместо интерфейса (Checking type instead of membership, Checking type instead of interface): Проверка того, что объект имеет специфический тип в то время, когда требуется только определённый интерфейс

  • Инерция кода (Code momentum): Сверхограничение части системы путём постоянного подразумевания её поведения в других частях системы

  • Кодирование путём исключения (Coding by exception): Добавление нового кода для поддержки каждого специального распознанного случая

  • Таинственный код (Cryptic code): Использование аббревиатур вместо мнемоничных имён

  • Жёсткое кодирование (Hard code): Внедрение предположений об окружении системы в слишком большом количестве точек её реализации

  • Мягкое кодирование (Soft code): Патологическая боязнь жёсткого кодирования, приводящая к тому, что настраивается всё что угодно, при этом конфигурирование системы само по себе превращается в программирование

  • Поток лавы (Lava flow): Сохранение нежелательного (излишнего или низкокачественного) кода по причине того, что его удаление слишком дорого или будет иметь непредсказуемые последствия

  • Магические числа (Magic numbers): Включение в алгоритмы чисел без объяснений их смысла

  • Процедурный код (Procedural code): Когда другая парадигма является более подходящей

  • Спагетти-код (Spaghetti code): Код с чрезмерно запутанным порядком выполнения

  • Мыльный пузырь (Soap bubble): Класс, инициализированый мусором, максимально долго притворяется, что содержит какие-то данные