О чём курс
В курсе рассматривается понятие рефакторинга, как способ предотвращения распада программы. Рассматриваются различные признаки плохого кода (smells), требующего рефакторинга, описывает, какой именно рефакторинг наилучшим образом подходит для той или иной ситуации, и описывает его механику, подробно разбирая ее на конкретных примерах из реальных задач.
Во время обучения слушатели изучат основные стратегии рефакторинга Java приложений, а также такие темы как явные проблемы внутри классов, явные проблемы между классами, методы компоновки, перемещение функций между объектами, организация данных, упрощение условных выражений, упрощение вызовов методов, работа с обобщениями, рефакторинг в Java 8, рефакторинг и тестирование.
Цели
После завершения обучения слушатели смогут:
- понимать принципы рефакторинга;
- объяснить необходимость рефакторинга;
- внедрять фазу рефакторинг в процесс разработки;
- идентифицировать проблемный код (smells);
- принимать решение о проведение рефакторинга над проблемным кодом;
- пошагово выполнять рефакторинг;
- использовать автоматизированные средства для проведения рефакторинга.
Целевая аудитория
- Разработчики;
- Старшие разработчики.
Предварительная подготовка
Для кого
Разработчик
Улучшаемые навыки
Определение и устранение проблем в коде
Применение методов рефакторинга
Использование инструментов для рефакторинга
Тестирование после рефакторинга
Поддержание чистоты кода
Темы курса
01
Введение (теория – 2 ч.; практика – 0,5 ч.)
- Что такое рефакторинг;
- Правила и стратегии;
- Рефакторинг и дизайн;
- Создание тестов;
- Явные проблемы;
- Средства рефакторинга;
- Книги о рефакторинге.
02
Явные проблемы внутри классов (теория – 1,5 ч.; практика – 1 ч.)
- Измеряемые проблемы;
- Имена;
- Ненужная сложность;
- Дублирование;
- Условная логика.
03
Явные проблемы между классами (теория – 0,5 ч; практика – 1 ч.)
- Данные;
- Наследование;
- Ответственность;
- Реализация изменений;
- Библиотечные классы.
04
Методы компоновки (теория – 1 ч.; практика – 1 ч.)
- Извлечение метода;
- Встраивание метода;
- Встраивание временной переменной;
- Замена временной переменной запросом;
- Введение поясняющей переменной;
- Расщепление временной переменной;
- Удаление присваиваний параметрам;
- Замена метода объектом методов;
- Замещение алгоритма.
05
Перемещение функций между объектами (теория – 1 ч.; практика – 1 ч.)
- Перемещение метода;
- Перемещение поля;
- Извлечение класса;
- Сокрытие делегирования;
- Удаление посредника;
- Внедрение внешнего метода;
- Внедрение локального расширения.
06
Организация данных (теория – 2 ч.; практика – 2 ч.)
- Инкапсуляция поля;
- Самоинкапсуляция поля;
- Инкапсуляция коллекции;
- Замена записи классом данных;
- Замена значения данных объектом;
- Замена массива объектом;
- Изменение значения на ссылку;
- Изменение ссылки на значение;
- Дублирование видимых данных;
- Изменение двунаправленной связи однонаправленной;
- Изменение однонаправленной связи двунаправленной;
- Замена магического числа символической константой;
- Замена кода типа классом;
- Замена кода типа подклассом;
- Замена кода типа состоянием/стратегией;
- Замена подкласса полями.
07
Упрощение условных выражений (теория – 1 ч.; практика – 1 ч.)
- Декомпозиция условного оператора;
- Консолидация условного выражения;
- Консолидация дублирующих условных фрагментов;
- Удаление управляющего флага;
- Замена вложенного условного оператора граничными операторами;
- Замена условного оператора полиморфизмом;
- Введение объекта Null;
- Введение утверждения.
08
Упрощение вызовов метода (теория – 1 ч.; практика – 1 ч.)
- Переименование метода;
- Добавление параметра;
- Удаление параметра;
- Разделение запроса и модификатора;
- Параметризация метода;
- Замена параметра явными методами;
- Замена параметра методом;
- Введение граничного объекта;
- Удаление метода установки значения;
- Сокрытие метода;
- Замена конструктора фабричным методом;
- Инкапсуляция нисходящего преобразования типа;
- Замена кода ошибки исключением;
- Обертывание проверяемого исключения в непроверяемое;
- Замена исключения проверкой.
09
Работа с обобщениями (теория – 1 ч.; практика – 1 ч.)
- Подъем поля;
- Подъем метода;
- Подъем тела конструктора;
- Спуск поля;
- Выделение подкласса;
- Выделение суперкласса;
- Выделение наследования;
- Свертывание иерархии;
- Формирование шаблона метода;
- Замена наследования делегированием;
- Замена делегирования наследованием.
10
Рефакторинг в Java 8 (теория – 0,5 ч.; практика – 1 ч.)
- Замена анонимных классов лямбда-выражениями;
- Использование ссылок методов;
- Использование лямбда-выражений для реализации шаблона «команда»;
- Использование лямбда-выражений для реализации шаблона «стратегия»;
- Обработка коллекций с помощью лямбда-выражений;
- Использование потоков для отображения/фильтрации/снижения числа операций.
11
Рефакторинг и тестирование (теория – 1 ч.; практика – 1 ч.)
- Основы тестирования;
- Виды тестирования ПО;
- Разработка на основе тестирования;
- Рефакторинг с помощью тестов;
- Книги о тестировании на Java.
Чему вы научитесь
01
Научитесь выявлять проблемные участки в коде, такие как дублирование, сложность и недостаточная читаемость
02
Освоите различные методы и техники рефакторинга, такие как извлечение методов, переименование переменных и классов
03
Научитесь использовать инструменты и среды разработки
04
Освоите методы написания и выполнения тестов для проверки корректности работы кода после рефакторинга
05
Научитесь применять принципы чистого кода и лучшие практики программирования, что поможет вам создавать более читаемые