О чём курс
В курсе рассматривается понятие рефакторинга, как способ предотвращения распада программы. Рассматриваются различные признаки плохого кода (smells), требующего рефакторинга, описывает, какой именно рефакторинг наилучшим образом подходит для той или иной ситуации, и описывает его механику, подробно разбирая ее на конкретных примерах из реальных задач.
Во время обучения слушатели изучат основные стратегии рефакторинга Java приложений, а также такие темы как явные проблемы внутри классов, явные проблемы между классами, методы компоновки, перемещение функций между объектами, организация данных, упрощение условных выражений, упрощение вызовов методов, работа с обобщениями, рефакторинг в Java 8, рефакторинг и тестирование.
Цели
После завершения обучения слушатели смогут:
понимать принципы рефакторинга;
объяснить необходимость рефакторинга;
внедрять фазу рефакторинг в процесс разработки;
идентифицировать проблемный код (smells);
принимать решение о проведение рефакторинга над проблемным кодом;
пошагово выполнять рефакторинг;
использовать автоматизированные средства для проведения рефакторинга.
Целевая аудитория
Разработчики;
Старшие разработчики.
Предварительная подготовка
Для кого
Разработчик
Улучшаемые навыки
рефакторинг
тестирование
Java
дизайн
шаблоны проектирования
CI/CD
автоматизация
Инструменты
VS Code
IntelliJ IDEA
NetBeans
Eclipse
Расписание курсов
Программа курса
Что такое рефакторинг;
Правила и стратегии;
Рефакторинг и дизайн;
Создание тестов;
Явные проблемы;
Средства рефакторинга;
Книги о рефакторинге.
02
Явные проблемы внутри классов
Измеряемые проблемы;
Имена;
Ненужная сложность;
Дублирование;
Условная логика.
03
Явные проблемы между классами
Данные;
Наследование;
Ответственность;
Реализация изменений;
Библиотечные классы.
Извлечение метода;
Встраивание метода;
Встраивание временной переменной;
Замена временной переменной запросом;
Введение поясняющей переменной;
Расщепление временной переменной;
Удаление присваиваний параметрам;
Замена метода объектом методов;
Замещение алгоритма.
05
Перемещение функций между объектами
Перемещение метода;
Перемещение поля;
Извлечение класса;
Сокрытие делегирования;
Удаление посредника;
Внедрение внешнего метода;
Внедрение локального расширения.
Инкапсуляция поля;
Самоинкапсуляция поля;
Инкапсуляция коллекции;
Замена записи классом данных;
Замена значения данных объектом;
Замена массива объектом;
Изменение значения на ссылку;
Изменение ссылки на значение;
Дублирование видимых данных;
Изменение двунаправленной связи однонаправленной;
Изменение однонаправленной связи двунаправленной;
Замена магического числа символической константой;
Замена кода типа классом;
Замена кода типа подклассом;
Замена кода типа состоянием/стратегией;
Замена подкласса полями.
07
Упрощение условных выражений
Декомпозиция условного оператора;
Консолидация условного выражения;
Консолидация дублирующих условных фрагментов;
Удаление управляющего флага;
Замена вложенного условного оператора граничными операторами;
Замена условного оператора полиморфизмом;
Введение объекта Null;
Введение утверждения.
08
Упрощение вызовов метода
Переименование метода;
Добавление параметра;
Удаление параметра;
Разделение запроса и модификатора;
Параметризация метода;
Замена параметра явными методами;
Замена параметра методом;
Введение граничного объекта;
Удаление метода установки значения;
Сокрытие метода;
Замена конструктора фабричным методом;
Инкапсуляция нисходящего преобразования типа;
Замена кода ошибки исключением;
Обертывание проверяемого исключения в непроверяемое;
Замена исключения проверкой.
Подъем поля;
Подъем метода;
Подъем тела конструктора;
Спуск поля;
Выделение подкласса;
Выделение суперкласса;
Выделение наследования;
Свертывание иерархии;
Формирование шаблона метода;
Замена наследования делегированием;
Замена делегирования наследованием.
Замена анонимных классов лямбда-выражениями;
Использование ссылок методов;
Использование лямбда-выражений для реализации шаблона «команда»;
Использование лямбда-выражений для реализации шаблона «стратегия»;
Обработка коллекций с помощью лямбда-выражений;
Использование потоков для отображения/фильтрации/снижения числа операций.
11
Рефакторинг и тестирование
Основы тестирования;
Виды тестирования ПО;
Разработка на основе тестирования;
Рефакторинг с помощью тестов;
Книги о тестировании на Java.
12
Итого на курс 24 часа: теория – 12,5 ч (52%), практика – 11,5 ч (48 %)
Чему вы научитесь
01
Выявлять «запахи кода» и находить слабые места в архитектуре
02
Применять основные техники рефакторинга (Extract Method, Replace Conditional with Polymorphism и др.)
03
Улучшать читаемость и поддерживаемость кода без риска сломать функционал
04
Писать тесты для рефакторинга, чтобы избежать регрессий
05
Оптимизировать производительность кода без потери качества
Курс проводят
Судакевич Игорь
Эксперт в области разработки ПО (Java).
Senior