SlideShare a Scribd company logo
1 of 10
Design Patterns. Антипаттерны
Немчинский Сергей
2008
Анти-паттерны




Анти-паттерны (anti-patterns), также
известные как ловушки (pitfalls) — это
классы наиболее часто внедряемых
плохих решений проблем.
Они изучаются, как категория, в случае
когда их хотят избежать в будущем, и
некоторые отдельные случаи их могут
быть распознаны при изучении
неработающих систем.
Анти-паттерны в объектноориентированном
программировании






Базовый класс-утилита (BaseBean): Наследование
функциональности из класса-утилиты вместо
делегирования к нему
Вызов предка (CallSuper): Для реализации
прикладной функциональности методу классапотомка требуется в обязательном порядке
вызывать те же методы класса-предка.
Ошибка пустого подкласса (Empty subclass
failure): Создание класса, который не проходит
«проверку пустоты подкласса» («Empty Subclass
Test») из-за различного поведения по сравнению
с классом, который наследуется от него без
изменений
Анти-паттерны в объектноориентированном
программировании










Божественный объект (God object): Концентрация слишком
большого количества функций в одиночной части дизайна
(классе)
Объектная клоака (Object cesspool): Переиспользование
объектов, чьё состояние не удовлетворяет (возможно
неявному) контракту переиспользования.
Полтергейст (компьютер) (Poltergeist): Объекты, чьё
единственное предназначение — передавать информацию
другим объектам
Проблема йо-йо (Yo-yo problem): Структура (например:
наследования) которая тяжело понятна вследствие
избыточной фрагментации
Синглетонизм (Singletonitis): Избыточное использование
паттерна синглетон
Анти-паттерны в
программировании








Ненужная сложность (Accidental complexity):
Внесение ненужной сложности в решение
Действие на расстоянии (Action at a distance):
Неожиданное взаимодействие между широко
разделёнными частями системы
Накопить и запустить (Accumulate and fire):
Установка параметров подпрограмм в наборе
глобальных переменных
Слепая вера (Blind faith): Недостаточная проверка
(a) корректности исправления ошибки или (b)
результата работы подпрограммы
Анти-паттерны в
программировании










Лодочный якорь (Boat anchor): Сохранение более не
используемой части системы
Активное ожидание (Busy spin): Потребление ресурсов ЦПУ
(процессорного времени) во время ожидания события,
обычно при помощи постоянно повторяемой проверки,
вместо того, чтобы использовать систему сообщений
Кэшированный сбой (Caching failure): Забывать сбросить
флаг ошибки после её обработки
Проверка типа вместо интерфейса (Checking type instead of
membership, Checking type instead of interface): Проверка
того, что объект имеет специфический тип в то время, когда
требуется только определённый интерфейс
Инерция кода (Code momentum): Сверхограничение части
системы путём постоянного подразумевания её поведения
в других частях системы
Анти-паттерны в
программировании








Кодирование путём исключения (Coding by exception):
Добавление нового кода для поддержки каждого
специального распознанного случая
Таинственный код (Cryptic code): Использование
аббревиатур вместо полных (самоописывающих) имён
Блокировка с двойной проверкой (Double-checked locking):
Проверка перед блокировкой может выйти из строя в
случае использования современного аппаратного
обеспечения или компиляторов
Жёсткое кодирование (Hard code): Внедрение
предположений об окружении системы в слишком большом
количестве точек её реализации
Анти-паттерны в
программировании








Магические числа (Magic numbers): Включение
чисел в алгоритмы без объяснений
Процедурный код (Procedural code): Когда другая
парадигма является более подходящей
Спагетти-код (Spaghetti code): Системы, чья
структура редко понятна, особенно потому что
структура кода используется неправильно
Мыльный пузырь (Soap bubble): Класс,
инициализированый мусором, максимально долго
притворяется, что содержит какие-то данные.
Методологические антипаттерны














Программирование методом копирования-вставки (Copy and paste
programming): Копирование (и лёгкая модификация)
существующего кода вместо создания общих решений
Дефакторинг (De-Factoring): Процесс уничтожения
функциональности и замены её документацией
Золотой молот (Golden hammer): Сильная уверенность в том, что
любимое решение универсально применимо
Фактор невероятности (Improbability factor): Предположение о
невозможности того, что сработает известная ошибка
Преждевременная оптимизация (Premature optimization):
Оптимизация на основе недостаточной информации
Изобретение колеса (Reinventing the wheel): Ошибка адаптации
существующего решения
Изобретение квадратного колеса (Reinventing the square wheel):
Создание плохого решения, когда существует хорошее
Анти-паттерны. Итоги




Анти-паттерны (anti-patterns), также
известные как ловушки (pitfalls) — это
классы наиболее часто внедряемых
плохих решений проблем.
Они изучаются, как категория, в случае
когда их хотят избежать в будущем, и
некоторые отдельные случаи их могут
быть распознаны при изучении
неработающих систем.

More Related Content

What's hot

Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.Unguryan Vitaliy
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаСергей Шебанин
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Msu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And UmlMsu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And Umlolegol
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLcolriot
 
SOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаSOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаМихаил Польгун
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Unguryan Vitaliy
 
Fubu mvc -- нафига оно мне
Fubu mvc -- нафига оно мнеFubu mvc -- нафига оно мне
Fubu mvc -- нафига оно мнеSerhiy Kalinets
 
CiklumNetSat17032012SergeyKalinets- FubuMVC
CiklumNetSat17032012SergeyKalinets- FubuMVCCiklumNetSat17032012SergeyKalinets- FubuMVC
CiklumNetSat17032012SergeyKalinets- FubuMVCCiklum Ukraine
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoFUnguryan Vitaliy
 
Android осень 2013 лекция 2
Android осень 2013 лекция 2Android осень 2013 лекция 2
Android осень 2013 лекция 2Technopark
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Система генерации чек-листов для регрессионного тестирования на основе анализ...
Система генерации чек-листов для регрессионного тестирования на основе анализ...Система генерации чек-листов для регрессионного тестирования на основе анализ...
Система генерации чек-листов для регрессионного тестирования на основе анализ...SQALab
 

What's hot (19)

Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайна
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Step 3.1
Step 3.1Step 3.1
Step 3.1
 
Msu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And UmlMsu.Center.Lectures.J03 Oop And Uml
Msu.Center.Lectures.J03 Oop And Uml
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UML
 
SOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаSOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайна
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
 
Fubu mvc -- нафига оно мне
Fubu mvc -- нафига оно мнеFubu mvc -- нафига оно мне
Fubu mvc -- нафига оно мне
 
CiklumNetSat17032012SergeyKalinets- FubuMVC
CiklumNetSat17032012SergeyKalinets- FubuMVCCiklumNetSat17032012SergeyKalinets- FubuMVC
CiklumNetSat17032012SergeyKalinets- FubuMVC
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
5 Тема
5 Тема5 Тема
5 Тема
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Android осень 2013 лекция 2
Android осень 2013 лекция 2Android осень 2013 лекция 2
Android осень 2013 лекция 2
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Система генерации чек-листов для регрессионного тестирования на основе анализ...
Система генерации чек-листов для регрессионного тестирования на основе анализ...Система генерации чек-листов для регрессионного тестирования на основе анализ...
Система генерации чек-листов для регрессионного тестирования на основе анализ...
 

Similar to Щаблоны разработки ПО. Антипаттерны

Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancevAlexei Lupan
 
Что такое пентест
Что такое пентестЧто такое пентест
Что такое пентестDmitry Evteev
 
Getting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияGetting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияAlexander Byndyu
 
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?sqadays8
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitYandex
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
Penetration testing (AS IS)
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)Dmitry Evteev
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахrevisium
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхPositive Hack Days
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыd_olex
 

Similar to Щаблоны разработки ПО. Антипаттерны (20)

Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Genome
GenomeGenome
Genome
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancev
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Что такое пентест
Что такое пентестЧто такое пентест
Что такое пентест
 
Getting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияGetting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестирования
 
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
C# 3.0
C# 3.0C# 3.0
C# 3.0
 
Penetration testing (AS IS)
Penetration testing (AS IS)Penetration testing (AS IS)
Penetration testing (AS IS)
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
 
Unit tests
Unit testsUnit tests
Unit tests
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективы
 

More from Sergey Nemchinsky

Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьSergey Nemchinsky
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклыSergey Nemchinsky
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыSergey Nemchinsky
 
Как найти первую работу и не вылететь с нее
Как найти первую работу  и не вылететь с нееКак найти первую работу  и не вылететь с нее
Как найти первую работу и не вылететь с нееSergey Nemchinsky
 
Быть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговБыть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговSergey Nemchinsky
 
Service oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusService oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusSergey Nemchinsky
 
Java enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыJava enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыSergey Nemchinsky
 
Enterprise или на чем стоит мир
Enterprise или на чем стоит мирEnterprise или на чем стоит мир
Enterprise или на чем стоит мирSergey Nemchinsky
 
Java enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыJava enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыSergey Nemchinsky
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. DatabasesSergey Nemchinsky
 
Основы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkОсновы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkSergey Nemchinsky
 
Основы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаОсновы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаSergey Nemchinsky
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыSergey Nemchinsky
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 

More from Sergey Nemchinsky (17)

Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететь
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системы
 
Как найти первую работу и не вылететь с нее
Как найти первую работу  и не вылететь с нееКак найти первую работу  и не вылететь с нее
Как найти первую работу и не вылететь с нее
 
Быть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговБыть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозгов
 
Service oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusService oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service Bus
 
Java enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыJava enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективы
 
Enterprise или на чем стоит мир
Enterprise или на чем стоит мирEnterprise или на чем стоит мир
Enterprise или на чем стоит мир
 
Java enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыJava enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективы
 
Clean code
Clean codeClean code
Clean code
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Основы Java. 4. Web
Основы Java. 4. WebОсновы Java. 4. Web
Основы Java. 4. Web
 
Основы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkОсновы Java. 4. Collection Framework
Основы Java. 4. Collection Framework
 
Основы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаОсновы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статика
 
Основы Java. 2. JVM
Основы Java. 2. JVMОсновы Java. 2. JVM
Основы Java. 2. JVM
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсы
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 

Щаблоны разработки ПО. Антипаттерны

  • 2. Анти-паттерны   Анти-паттерны (anti-patterns), также известные как ловушки (pitfalls) — это классы наиболее часто внедряемых плохих решений проблем. Они изучаются, как категория, в случае когда их хотят избежать в будущем, и некоторые отдельные случаи их могут быть распознаны при изучении неработающих систем.
  • 3. Анти-паттерны в объектноориентированном программировании    Базовый класс-утилита (BaseBean): Наследование функциональности из класса-утилиты вместо делегирования к нему Вызов предка (CallSuper): Для реализации прикладной функциональности методу классапотомка требуется в обязательном порядке вызывать те же методы класса-предка. Ошибка пустого подкласса (Empty subclass failure): Создание класса, который не проходит «проверку пустоты подкласса» («Empty Subclass Test») из-за различного поведения по сравнению с классом, который наследуется от него без изменений
  • 4. Анти-паттерны в объектноориентированном программировании      Божественный объект (God object): Концентрация слишком большого количества функций в одиночной части дизайна (классе) Объектная клоака (Object cesspool): Переиспользование объектов, чьё состояние не удовлетворяет (возможно неявному) контракту переиспользования. Полтергейст (компьютер) (Poltergeist): Объекты, чьё единственное предназначение — передавать информацию другим объектам Проблема йо-йо (Yo-yo problem): Структура (например: наследования) которая тяжело понятна вследствие избыточной фрагментации Синглетонизм (Singletonitis): Избыточное использование паттерна синглетон
  • 5. Анти-паттерны в программировании     Ненужная сложность (Accidental complexity): Внесение ненужной сложности в решение Действие на расстоянии (Action at a distance): Неожиданное взаимодействие между широко разделёнными частями системы Накопить и запустить (Accumulate and fire): Установка параметров подпрограмм в наборе глобальных переменных Слепая вера (Blind faith): Недостаточная проверка (a) корректности исправления ошибки или (b) результата работы подпрограммы
  • 6. Анти-паттерны в программировании      Лодочный якорь (Boat anchor): Сохранение более не используемой части системы Активное ожидание (Busy spin): Потребление ресурсов ЦПУ (процессорного времени) во время ожидания события, обычно при помощи постоянно повторяемой проверки, вместо того, чтобы использовать систему сообщений Кэшированный сбой (Caching failure): Забывать сбросить флаг ошибки после её обработки Проверка типа вместо интерфейса (Checking type instead of membership, Checking type instead of interface): Проверка того, что объект имеет специфический тип в то время, когда требуется только определённый интерфейс Инерция кода (Code momentum): Сверхограничение части системы путём постоянного подразумевания её поведения в других частях системы
  • 7. Анти-паттерны в программировании     Кодирование путём исключения (Coding by exception): Добавление нового кода для поддержки каждого специального распознанного случая Таинственный код (Cryptic code): Использование аббревиатур вместо полных (самоописывающих) имён Блокировка с двойной проверкой (Double-checked locking): Проверка перед блокировкой может выйти из строя в случае использования современного аппаратного обеспечения или компиляторов Жёсткое кодирование (Hard code): Внедрение предположений об окружении системы в слишком большом количестве точек её реализации
  • 8. Анти-паттерны в программировании     Магические числа (Magic numbers): Включение чисел в алгоритмы без объяснений Процедурный код (Procedural code): Когда другая парадигма является более подходящей Спагетти-код (Spaghetti code): Системы, чья структура редко понятна, особенно потому что структура кода используется неправильно Мыльный пузырь (Soap bubble): Класс, инициализированый мусором, максимально долго притворяется, что содержит какие-то данные.
  • 9. Методологические антипаттерны        Программирование методом копирования-вставки (Copy and paste programming): Копирование (и лёгкая модификация) существующего кода вместо создания общих решений Дефакторинг (De-Factoring): Процесс уничтожения функциональности и замены её документацией Золотой молот (Golden hammer): Сильная уверенность в том, что любимое решение универсально применимо Фактор невероятности (Improbability factor): Предположение о невозможности того, что сработает известная ошибка Преждевременная оптимизация (Premature optimization): Оптимизация на основе недостаточной информации Изобретение колеса (Reinventing the wheel): Ошибка адаптации существующего решения Изобретение квадратного колеса (Reinventing the square wheel): Создание плохого решения, когда существует хорошее
  • 10. Анти-паттерны. Итоги   Анти-паттерны (anti-patterns), также известные как ловушки (pitfalls) — это классы наиболее часто внедряемых плохих решений проблем. Они изучаются, как категория, в случае когда их хотят избежать в будущем, и некоторые отдельные случаи их могут быть распознаны при изучении неработающих систем.