- •Лабораторная работа №6 Рефакторинг программного кода
- •Ход выполнения работы
- •Длинный Метод
- •Большой класс
- •Длинный список параметров
- •Расходящееся изменение
- •Хирургия дробовиком
- •Зависть по функции
- •Группы данных
- •Одержимость примитивами
- •Оператор Switch (Case)
- •Параллельные иерархии наследования
- •Ленивый класс
- •Спекулятивное обобщение
- •Временное поле
- •Цепочка сообщений
- •Посредник
- •Неоправданная близость
- •Альтернативные классы с разными интерфейсами
- •Неполный библиотечный класс
- •Класс для данных
- •Отвергнутое наследство
- •Комментарии
- •Классификация шаблонов рефакторинга
- •Примеры шаблонов рефакторинга
Лабораторная работа №6 Рефакторинг программного кода
Цель работы: научиться выполнять реорганизацию программного кода на основании шаблонов рефакторинга.
Ход выполнения работы
Изучить теоретические сведения.
Выполнить анализ программного кода разрабатываемого ПО и модульных тестов с целью выявления плохо организованного кода.
Используя шаблоны рефакторинга, выполнить реорганизацию программного кода разрабатываемого ПО и модульных тестов.
Проверить успешность выполнения всех модульных тестов.
Выполнить описание произведенных операций рефакторинга (было-стало-шаблон рефакторинга).
В случае необходимости скорректировать проектную документацию (диаграммы классов, последовательностей).
Сделать выводы по результатам выполнения работы.
Требования к содержанию работы
Название работы.
Цель работы.
Краткая формулировка индивидуального задания.
Таблица изменений дизайна ПО.
Скорректированные диаграммы классов, последовательностей, в случае необходимости.
Выводы.
Теоретические сведения
Признаки плохо организованного кода
Это не набор четких правил, а описание мест, на которые надо обращать внимание при рефакторинге.
Дублирующийся код
Если вы видите одинаковые структуры кода в нескольких местах, то вы можете быть уверены, что эта программа будет лучше, если вы сможете их унифицировать.
В простейших случаях вам поможет Extract Method. При работе с наследованием используйте Pull Up Field. Если код похож, но не в точности, надо применить Extract Method, а затем Form Template Method. Если методы делают одно и то же разными способами, выберите один из них и используйте Substitute Algorithm. Если у вас есть дублирующийся код в несвязанных классах, подумайте о возможности Extract Class.
Длинный Метод
Из объектных программ, дольше всего живут программы с короткими методами. Чем длиннее процедура, тем труднее ее понять. Если у вас есть хорошее название для метода, то вам не нужно смотреть его тело.
Мы следуем эвристике: как только мы чувствуем, что надо написать комментарий, мы вместо этого пишем метод. В 99% случаев для того, чтобы сократить метод, вам достаточно будет применить Extract Method. Локальные переменные и параметры могут препятствовать вам, так что, возможно, вам понадобится Replace Temp With Query, Introduce Parameter Object и Preserve Whole Object.
Кроме комментариев, циклы и условия также являются хорошими знаками. Используйте Decompose Conditional для условий, а для циклов - выносите тело цикла в отдельный метод.
Большой класс
Когда класс делает слишком много всего, у него обычно слишком много полей.
Можно использовать Extract Class или Extract Subclass, чтобы выделить некоторые переменные. При определении того, что выносить, обращайте внимание на общность в названии переменных, а также на то использует ли класс их все одновременно.
Кроме того, класс, в котором слишком много кода, также является рассадником дублирования и хаоса. Здесь также применяйте Extract Class или Extract Subclass.
Если ваш большой класс - это GUI класс, то попытайтесь отделить поведение от данных. Вам может понадобиться Duplicate Observed Data.