Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

7.9 Ненужная сложность (Accidental complexity)

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

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

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

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

7.10 Божественный объект (God Object)

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

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

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

7.11 Лодочный якорь (Boat anchor)

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

Пример лодочного якоря − функция, которая однажды использовалась при отладке, однако, не была удалена.

// Пример 7.2 - лодочный якорь

void debug_string(const std::string& s)

{

std::ofstream ofs("Errors.txt",std::ios::app);

if(ofs)

{

ofs << s << std::endl;

ofs.close();

}

}

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

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

7.12 Поток лавы (Lava flow)

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

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

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