Курс: Рефакторинг кода на Java
Продолжительность курса: 24 ак. ч.
Описание курса:
В курсе рассматривается понятие рефакторинга, как способ предотвращения распада программы. Рассматриваются различные признаки плохого кода (smells), требующего рефакторинга, описывает, какой именно рефакторинг наилучшим образом подходит для той или иной ситуации, и описывает его механику, подробно разбирая ее на конкретных примерах из реальных задач.
Во время обучения слушатели изучат основные стратегии рефакторинга Java приложений, а также такие темы как явные проблемы внутри классов, явные проблемы между классами, методы компоновки, перемещение функций между объектами, организация данных, упрощение условных выражений, упрощение вызовов методов, работа с обобщениями, рефакторинг в Java 8, рефакторинг и тестирование.
Аудитория:
• Разработчики;
• Старшие разработчики.
Необходимая подготовка:
• Прохождение курса DEV-001_JVA "Шаблоны проектирования GoF. Редакция для Java".
• Знание принципов объектно-ориентированного программирования.
• Опыт работы с объектно-ориентированными языками от 1 года.
• Знание UML.
Программа курса:
Модуль 1. Введение
• Что такое рефакторинг;
• Правила и стратегии;
• Рефакторинг и дизайн;
• Создание тестов;
• Явные проблемы;
• Средства рефакторинга;
• Книги о рефакторинге
Модуль 2. Явные проблемы внутри классов
• Измеряемые проблемы;
• Имена;
• Ненужная сложность;
• Дублирование;
• Условная логика.
Модуль 3. Явные проблемы между классами
• Данные;
• Наследование;
• Ответственность;
• Реализация изменений;
• Библиотечные классы.
Модуль 4. Методы компоновки
• Извлечение метода;
• Встраивание метода;
• Встраивание временной переменной;
• Замена временной переменной запросом;
• Введение поясняющей переменной;
• Расщепление временной переменной;
• Удаление присваиваний параметрам;
• Замена метода объектом методов;
• Замещение алгоритма.
Модуль 5. Перемещение функций между объектами
• Перемещение метода;
• Перемещение поля;
• Извлечение класса;
• Сокрытие делегирования;
• Удаление посредника;
• Внедрение внешнего метода;
• Внедрение локального расширения.
Модуль 6. Организация данных
• Инкапсуляция поля;
• Самоинкапсуляция поля;
• Инкапсуляция коллекции;
• Замена записи классом данных;
• Замена значения данных объектом;
• Замена массива объектом;
• Изменение значения на ссылку;
• Изменение ссылки на значение;
• Дублирование видимых данных;
• Изменение двунаправленной связи однонаправленной;
• Изменение однонаправленной связи двунаправленной;
• Замена магического числа символической константой;
• Замена кода типа классом;
• Замена кода типа подклассом;
• Замена кода типа состоянием/стратегией;
• Замена подкласса полями.
Модуль 7. Упрощение условных выражений
• Декомпозиция условного оператора;
• Консолидация условного выражения;
• Консолидация дублирующих условных фрагментов;
• Удаление управляющего флага;
• Замена вложенного условного оператора граничными операторами;
• Замена условного оператора полиморфизмом;
• Введение объекта Null;
• Введение утверждения.
Модуль 8. Упрощение вызовов метода
• Переименование метода;
• Добавление параметра;
• Удаление параметра;
• Разделение запроса и модификатора;
• Параметризация метода;
• Замена параметра явными методами;
• Замена параметра методом;
• Введение граничного объекта;
• Удаление метода установки значения;
• Сокрытие метода;
• Замена конструктора фабричным методом;
• Инкапсуляция нисходящего преобразования типа;
• Замена кода ошибки исключением;
• Обертывание проверяемого исключения в непроверяемое;
• Замена исключения проверкой.
Модуль 9. Работа с обобщениями
• Подъем поля;
• Подъем метода;
• Подъем тела конструктора;
• Спуск поля;
• Выделение подкласса;
• Выделение суперкласса;
• Выделение наследования;
• Свертывание иерархии;
• Формирование шаблона метода;
• Замена наследования делегированием;
• Замена делегирования наследованием.
Модуль 10. Рефакторинг в Java 8
• Замена анонимных классов лямбда-выражениями;
• Использование ссылок методов;
• Использование лямбда-выражений для реализации шаблона «команда»;
• Использование лямбда-выражений для реализации шаблона «стратегия»;
• Обработка коллекций с помощью лямбда-выражений;
• Использование потоков для отображения/фильтрации/снижения числа операций.
Модуль 11. Рефакторинг и тестирование
• Основы тестирования;
• Виды тестирования ПО;
• Разработка на основе тестирования;
• Рефакторинг с помощью тестов;
• Книги о тестировании на Java.
Окончательная цена указывается в договоре на обучение.
Записаться на курс