Шаблоны разработки ПО. Рефакторинг

14
Design Patterns. Рефакторинг Немчинский Сергей 2008

Transcript of Шаблоны разработки ПО. Рефакторинг

Page 1: Шаблоны разработки ПО. Рефакторинг

Design Patterns. Рефакторинг

Немчинский Сергей2008

Page 2: Шаблоны разработки ПО. Рефакторинг

Содержание Что такое рефакторинг кода Методы рефакторинга

Изменение сигнатуры метода (Change Method Signature)

Инкапсуляция поля (Encapsulate field) Выделение метода (Extract Method) Перемещение метода (Move Method) Замена условного оператора полиморфизмом

(Replace Conditional with Polymorphism) Проблемы, возникающие при проведении

рефакторинга Средства автоматизации рефакторинга

Page 3: Шаблоны разработки ПО. Рефакторинг

Что такое рефакторинг Рефакторинг или Реорганизация —

процесс полного или частичного преобразования внутренней структуры программы при сохранении её внешнего поведения.

В его основе лежит последовательность небольших эквивалентных (т.е., сохраняющих поведение) преобразований.

Page 4: Шаблоны разработки ПО. Рефакторинг

Что такое рефакторинг Поскольку каждое преобразование маленькое,

программисту легче проследить за его правильностью, и в то же время, вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и четкости.

Рефакторинг позволяет разрабатывать архитектуру программы постепенно, откладывая проектные решения до тех пор, пока не станет более ясной их необходимость.

Рефакторинг изначально не предназначен для исправления ошибок и добавления новой функциональности, но помогает избежать ошибок и облегчить добавление функциональности.

Page 5: Шаблоны разработки ПО. Рефакторинг

Методы рефакторинга Наиболее употребимые методы рефакторинга:

Изменение сигнатуры метода (Change Method Signature) Инкапсуляция поля (Encapsulate Field) Выделение класса (Extract Class) Выделение интерфейса (Extract Interface) Выделение локальной переменной (Extract Local Variable) Выделение метода (Extract Method) Генерализация типа (Generalize Type) Встраивание (Inline) Введение фабрики (Introduce Factory) Введение параметра (Introduce Parameter) Подъём поля/метода (Pull Up) Спуск поля/метода (Push Down) Замена условного оператора полиморфизмом (Replace

Conditional with Polymorphism)

Page 6: Шаблоны разработки ПО. Рефакторинг

Изменение сигнатуры метода (Change Method Signature) Заключается в добавлении, изменении или

удалении параметра метода. Изменив сигнатуру метода, необходимо

скорректировать обращения к нему в коде всех клиентов.

Это изменение может затронуть внешний интерфейс программы, кроме того, не всегда разработчику, изменяющему интерфейс, доступны все клиенты этого интерфейса, поэтому может потребоваться та или иная форма регистрации изменений интерфейса для последующей передачи их вместе с новой версией программы.

Page 7: Шаблоны разработки ПО. Рефакторинг

Инкапсуляция поля (Encapsulate field)

В случае, если у класса имеется открытое поле, необходимо сделать его закрытым и обеспечить методы доступа.

После "Инкапсуляции поля" часто применяется "Перемещение метода".

Page 8: Шаблоны разработки ПО. Рефакторинг

Выделение метода (Extract Method) Заключается в выделении из длинного и/или требующего

комментариев кода отдельных фрагментов и преобразовании их в отдельные методы, с подстановкой подходящих вызовов в местах использования.

В этом случае действует правило: если фрагмент кода требует комментария о том, что он делает, то он должен быть выделен в отдельный метод и назван так, чтобы исключить комментарий как таковой.

Также правило: один метод не должен занимать более чем один экран (25-50 строк, в зависимости от условий редактирования), в противном случае некоторые его фрагменты имеют самостоятельную ценность и подлежат выделению.

Из анализа связей выделяемого фрагмента с окружающим контекстом делается вывод о перечне параметров нового метода и его локальных переменных.

Page 9: Шаблоны разработки ПО. Рефакторинг

Перемещение метода (Move Method)

Применяется по отношению к методу, который чаще обращается к другому классу, чем к тому, в котором сам располагается.

Page 10: Шаблоны разработки ПО. Рефакторинг

Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)

Условный оператор с несколькими ветвями заменяется вызовом полиморфного метода некоторого базового класса, имеющего подкласссы для каждой ветви исходного оператора.

Выбор ветви осуществляется неявно, в зависимости от того, экземпляру какого из подклассов оказался адресован вызов.

Page 11: Шаблоны разработки ПО. Рефакторинг

Замена условного оператора полиморфизмом Последовательность действий:

вначале следует создать базовый класс и нужное число подклассов

в некоторых случаях следует провести оптимизацию условного оператора путем "Выделения метода"

возможно использование "Перемещения метода", чтобы поместить условный оператор в вершину иерархии наследования

выбрав один из подклассов, нужно конкретизировать в нём полиморфный метод базового класса и переместить в него тело соответствующей ветви условного оператора.

повторить предыдущее действие для каждой ветви условного оператора

заменить весь условный оператор вызовом полиморфного метода базового класса

Page 12: Шаблоны разработки ПО. Рефакторинг

Проблемы, возникающие при проведении рефакторинга

проблемы, связанные с базами данных

проблемы изменения интерфейсов

трудности при изменении дизайна

Page 13: Шаблоны разработки ПО. Рефакторинг

Средства автоматизации рефакторинга

Как правило, либо среды разработки (IDE) либо плагины к ним

Ограниченное количество средств автоматического рефакторинга для С++

Page 14: Шаблоны разработки ПО. Рефакторинг

Итоги

Что такое рефакторинг кода Методы рефакторинга Проблемы, возникающие при

проведении рефакторинга