О чём курс
В курсе рассматривается понятие рефакторинга, как способ предотвращения распада программы. Рассматриваются различные признаки плохого кода (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
Научитесь применять принципы чистого кода и лучшие практики программирования, что поможет вам создавать более читаемые