Программная иженерия Андрей Дмитриев ©
Автоматизация рефакторинга
Программа Возможности текстового редактора. Автоматическая вставка. Создание методов (implement и override). Рефакторинги.
Настройки текстового редактора Среда разработки позволяет изменять настройки текстового редактора: Добавление закрывающего символа. Разбиение строк. Отображение номеров строк. Дополнение кода. Горячие клавиши. Макросы. Форматирование кода. Выбор цветовой схемы подсветки кода. И т.д.
Окно настроек
Автоматическая вставка Дополнение имен классов, методов и полей. Добавление закрывающего символа. Вставка шаблонов кода. Разбиение длинных строк. Добавление необходимых import-ов и удаление неиспользуемых.
Создание методов Среда разработки предоставляет возможность переопределить пустыми телами некоторые методы при: реализации интерфейсов, наследовании от другого класса.
Рефакторинги Простые Переименование. Безопасное удаление кода. Изменение сигнатуры и уровня доступа. Инкапсуляция поля. Использование супертипа. Перемещения Перемещение класса. Перемещение метода или поля. Выделение метода. Выделение интерфейса. Выделение суперкласса. Вынесение внутреннего класса. Преобразование анонимного класса во внутренний.
Переименование При переименовании среда автоматически заменяет старое имя на новое везде, где это необходимо. Переименовывать таким образом можно: Классы и интерфейсы, Локальные переменные, Методы, Поля.
Безопасное удаление кода Безопасное удаление кода предполагает проверку того, что данный код нигде больше не используется. Безопасное удаление может быть применено к: Классам и интерфейсам, Методам, Полям, Локальным переменным.
Безопасное удаление кода (пример)
Изменение сигнатуры и уровня доступа Описание метода может быть изменено: Добавлением параметра, Удалением неиспользуемых параметров, Изменением порядка параметров, Изменением уровня доступа к методу.
Инкапсуляция поля Один из паттернов проектирования – организация доступа к данным исключительно через методы. При необходимости использования такого паттерна среда разработки может : > Создать методы для доступа к указанному полю, > Изменить модификатор доступа к полю, > Заменить все обращения к полю на вызов метода во всем коде.
Перемещение класса Класс может быть перемещен в другой пакет с соответствующим изменением всего зависимого кода.
Перемещение метода или поля Данный рефакторинг важен для изменения структуры наследования в проекте. Член класса может быть перемещен: В другой класс или интерфейс с соответствующим изменением всего зависимого кода. В том числе: В суперкласс или суперинтерфейс, В подкласс или подинтерфейс, В подкласс с добавлением абстрактного описания в данный класс. Метод может быть оставлен на прежнем месте и его абстрактное описание может быть добавлено в суперкласс.
Перемещение метода или поля: пример public class Phone { private int phonePrice = 100; public int getPrice() { return phonePrice; } Поле нового класса относится к телефону вцелом. public class Communicator extends Phone { private String vendorName; public int getPrice() { return 600; } public String getVendorName(){ return vendorName; }
Перемещение метода или поля Вниз по иерархии: Вверх по иерархии:
Перемещение метода или поля: результат public class Phone { private String vendorName; private int phonePrice = 100; public int getPrice() { return phonePrice; } public String getVendorName() { return vendorName; } public class Communicator extends Phone { public int getPrice() { return 600; }
Выделение метода При разработке проекта часто возникает необходимость разбить код на независимые части – методы. Данный рефакторинг позволяет: Поместить выделенный кусок кода в отдельный метод, Поместить в данное место вызов нового метода.
Выделение метода: пример
Выделение метода: результат
Выделение интерфейса Данный рефакторинг используется при разделении программного интерфейса и реализации. При этом: > Создается новый интерфейс, который содержит описания указанных публичных методов, > Добавляется выражение implements с именем нового интерфейса в данный класс.
Выделение суперкласса Используется для формального объединения нескольких классов через похожие методы. Возможны варианты: > Перенести тело метода в суперкласс, > Создать в суперклассе абстрактный метод.
Использование супертипа Данный рефакторинг изменяет код на использование ссылок на суперкласс там, где это возможно. Используется для: Ослабления зависимостей от конкретной реализации, Обобщении типов аргументов методов. Часто используется в связке с «Выделением суперкласса».
Вынесение внутреннего класса При развитии проекта может создаваться множество внутренних классов, что затрудняет поддержку программы. Может потребоваться вынести внутренний класс как самостоятельный.
Вынесение внутреннего класса: результат
Преобразование анонимного класса во внутренний Анонимные классы могут быть востребованы другими классами.
Преобразование анонимного класса во внутренний: результат Данный рефакторинг позволяет выделить анонимные классы во внутренние и снабдить их конструкторами.
Контекстные подсказки Среда разработки предлагает подходящие типы рефакторингов для выделенных фрагментов кода.
Ссылки М. Фаулер, Рефакторинг Слайды «Основы рефакторинга» Онлайн-курсы:
Q&A
Спасибо! Андрей Дмитриев ©