SlideShare a Scribd company logo
1 of 29
Download to read offline
УК 03.009.01-2011
Учебный курс. Обучение.
Рефакторинг.
Литература
• КН 02.026-2003
Определение
Рефакторинг – изменения во внутренней структуре
программного обеспечения, имеющее целью облегчить
понимание его работы и упростить модификацию, не
затрагивая наблюдаемого поведения.
Производить рефакторинг – изменять структуру
программного обеспечения, применяя ряж
рефакторингов, не затрагивая его поведения.
Важные моменты в определении
• Цель – упростить понимание и модификацию
программного обеспечения
Пример: оптимизация кода не является рефакторингом
• Внешнее поведение не меняется
• Рефакторинг не равно переписыванию
– Рефакторинг – эволюционный путь
– Переписывание – революционный путь
Top-4 причин для выполнения
рефакторинга
1.
2.
3.
4.

Улучшение композиции ПО
Улучшает понимание ПО
Найти ошибки
Ускорение разработки ПО
Ситуации, когда стоит применять
рефакторинг
•
•
•
•
•
•

Правило трех ударов
Добавление новой функции
Исправление ошибки
Разбор кода
Разработка по TDD (более подробно далее)
Код, требующий рефакторинга
Разработка по TDD
1.
2.
3.
4.

Написание тестов
Код, удовлетворяющий одному тесту
Рефакторинг
Переход на шаг 1.
Признаки кода, требующего
рефакторинга
• Дублирование кода
• Длинный метод
• Большой класс
• Длинный список параметров
• Расходящиеся модификации
• Стрельба дробью
• Завистливые функции
• Группы данных
• Одержимость элементарными типами
Ex 04.029.01-2011
•
•
•
•
•
•
•
•
•
•

Параллельные иерархии наследования
Ленивый класс
Теоретическая общность
Временное поле
Цепочки сообщений
Посредник
Неуместная близость
Альтернативные классы с разными интерфейсами
Неполнота библиотечного класса
Классы данных
• Отказ от наследства
• Комментарии
Методы рефакторинга
Выделение метода
Есть фрагмент кода, который выполняет определенное
действие.
Выделить этот фрагмент в метод, название которого
объясняет смысл действия.
Категория: основной
Объяснения
• Выделять методы нужно, если исходный метод слишком
длинный
• Выделение метода позволяет повторно использовать этот
фрагмент
• Повышается читабельность кода – имена методов
поясняют смысл действий
Техника
• Создать метод с названием, соответствующим назначению
метода
• Написать набор тестов для данного метода (если метод не
закрытый)
• Скопировать код подлежащий выделению из исходного
метода в созданный
• Найти в извлеченным коде все переменные, имеющие
локальную область видимости – это будут локальные
переменные и параметры метода
• Найти все временные переменные в выделенном коде –
объявить как временные переменные в новом методе
• Модифицирует ли код какие-то из временных
переменных, если да, то выделить фрагменты по
изменению значения временной переменной на вызовы
новых методов
– Расщепление временной переменной
– Замена временной переменной вызовом метода

• Передавать в качестве параметров переменные с
локальной областью видимости, чтение которых
осуществляется в выделенном коде
• Компиляция; тестирование выделенного метода
• Замена выделенного фрагмента на вызов метода
• Компиляция и тестирование
Примеры
• Ex 04.031.01-2011
Встраивание метода
Тело метода столь же понятно, что и его название
Заменить вызов метода на тело самого метода
Категория: промежуточный
Объяснения
• очень короткие методы, например, в одну строчку
Пример: метод, вызывающий другой метод
Часто получаются в процессе рефакторинга
• Структура методов неудачная. Тогда встраиванием
методов позволяет получить один большой метод, из
которого выделением метода получаем другую структуру
Техника
•
•
•
•
•

Убедиться, что метод не является полиморфным
Найти все вызовы метода
Заменить каждый вызов телом метода
Выполнить компиляцию и тестирование
Удалить метод
Встраивание временной
переменной
Имеется временная переменная, которой выражение
присваивается один раз, и эта переменная мешает
проведению других рефакторингов.
Заменить переменную на выражение, значение которого
присваивалось этой переменной.
Категория: промежуточный
Техника
• Добавить к объявлению переменной ключевое слово
const
• Найти все ссылки на переменную и заменить ее правой
частью присваивания
• Выполнять компиляцию и тестирование после каждой
модификации
• Удалить объявление и присваивание данной переменной
• Выполнить компиляцию и тестирование
Пример
• Ex 04.034.01-2011
Замена переменной вызовом
метода
Временная переменная используется для хранения значения
выражения.
Преобразовать выражение в метод. Заменить все ссылки на
переменную вызовом метода. Новый метод может быть
повторно использован в других методах.
Категория: основной
Объяснения
• Временные переменные ведут к увеличению размеров
кода, многократному повторению одних и тех же строчек.
Вычисление значения в методе существенно увеличивает
степень повторной используемости
• Часто является необходимым шагом для выделения
метода
• Если переменной значение присваивается неоднократно,
то можно воспользоваться методами рефакторинга
Расщепление временной переменной и Разделение
запроса и модификатора
Техника
• Найти переменную, которой присваивание выполняется
один раз
• Добавить к объявлению переменной ключевое слово
const
• Скомпилировать код
• Выделить из правой части присваивания метод
• Выделенный метод должен не менять значения других
полей и объектов
• Написать тесты для выделенного метода
• Компиляция и тестирование
• Выполнить встраивание временной переменной
Пример
• Ex 04.033.01-2011
Введение поясняющей переменной
Имеется сложное выражение. Поместить результат
вычисления данного выражения во временную переменную
с говорящим именем.
Категория: промежуточный
Объяснения
• Упрощает понимание сложных выражений
• Часто является промежуточным, перед Заменой
переменной вызовом метода
Техника
• Объявить локальную переменную с ключевым словом
const, проинициализировать ее частью сложного
выражения
• Заменить вхождения этого выражения на обращение к
данной переменной
• Компиляция и тестирование
• Повторить эту процедуру для других частей сложного
выражения

More Related Content

What's hot

Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
презентация л.р. №11
презентация л.р. №11презентация л.р. №11
презентация л.р. №11student_kai
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08Computer Science Club
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингSergey Nemchinsky
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"OdessaQA
 

What's hot (9)

Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
презентация л.р. №11
презентация л.р. №11презентация л.р. №11
презентация л.р. №11
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"Тест-дизайн в тестировании ПО. Задача "Треугольник"
Тест-дизайн в тестировании ПО. Задача "Треугольник"
 
лек5 6
лек5 6лек5 6
лек5 6
 

Similar to ук 03.009.01 2011

Промышленная разработка ПО. Лекция 6. Особенности работы системного аналитика
Промышленная разработка ПО. Лекция 6. Особенности работы системного аналитикаПромышленная разработка ПО. Лекция 6. Особенности работы системного аналитика
Промышленная разработка ПО. Лекция 6. Особенности работы системного аналитикаMikhail Payson
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!Dmitrii Tuchs
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxrobete3065
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Alexander Borzunov
 
Борзунов Александр, Cpmoptimize
Борзунов Александр, CpmoptimizeБорзунов Александр, Cpmoptimize
Борзунов Александр, CpmoptimizeDarya Zubova
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
Требования к по
Требования к поТребования к по
Требования к поJaneKozmina
 
Рефакторинг
РефакторингРефакторинг
РефакторингSmartStepGroup
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...MDDay_4
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeDmytro Mindra
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011etyumentcev
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?SQALab
 
Unit testing
Unit testingUnit testing
Unit testingISsoft
 

Similar to ук 03.009.01 2011 (20)

Refactoring
RefactoringRefactoring
Refactoring
 
Промышленная разработка ПО. Лекция 6. Особенности работы системного аналитика
Промышленная разработка ПО. Лекция 6. Особенности работы системного аналитикаПромышленная разработка ПО. Лекция 6. Особенности работы системного аналитика
Промышленная разработка ПО. Лекция 6. Особенности работы системного аналитика
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
 
Борзунов Александр, Cpmoptimize
Борзунов Александр, CpmoptimizeБорзунов Александр, Cpmoptimize
Борзунов Александр, Cpmoptimize
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Требования к по
Требования к поТребования к по
Требования к по
 
Тест-дизайн "в цикле"
Тест-дизайн "в цикле"Тест-дизайн "в цикле"
Тест-дизайн "в цикле"
 
C# programming
C# programmingC# programming
C# programming
 
Q-PROCESSING
Q-PROCESSINGQ-PROCESSING
Q-PROCESSING
 
переменные в Python
переменные в Pythonпеременные в Python
переменные в Python
 
Рефакторинг
РефакторингРефакторинг
Рефакторинг
 
«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...«трудности при разработке сложных распределённых систем на Java. способы реше...
«трудности при разработке сложных распределённых систем на Java. способы реше...
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?
 
Unit testing
Unit testingUnit testing
Unit testing
 

More from etyumentcev

Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016etyumentcev
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActorsetyumentcev
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?etyumentcev
 
Программирование глазами математика
Программирование глазами математикаПрограммирование глазами математика
Программирование глазами математикаetyumentcev
 
Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?etyumentcev
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...etyumentcev
 
матлогика для программистов
матлогика для программистовматлогика для программистов
матлогика для программистовetyumentcev
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповetyumentcev
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектetyumentcev
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4etyumentcev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3etyumentcev
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2etyumentcev
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1etyumentcev
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратetyumentcev
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектамиetyumentcev
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sqletyumentcev
 
почему буксует тайм менеджмент
почему буксует тайм менеджментпочему буксует тайм менеджмент
почему буксует тайм менеджментetyumentcev
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011etyumentcev
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011etyumentcev
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011etyumentcev
 

More from etyumentcev (20)

Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Программирование глазами математика
Программирование глазами математикаПрограммирование глазами математика
Программирование глазами математика
 
Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
 
матлогика для программистов
матлогика для программистовматлогика для программистов
матлогика для программистов
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затрат
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектами
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sql
 
почему буксует тайм менеджмент
почему буксует тайм менеджментпочему буксует тайм менеджмент
почему буксует тайм менеджмент
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011
 

ук 03.009.01 2011

  • 1. УК 03.009.01-2011 Учебный курс. Обучение. Рефакторинг.
  • 3. Определение Рефакторинг – изменения во внутренней структуре программного обеспечения, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения. Производить рефакторинг – изменять структуру программного обеспечения, применяя ряж рефакторингов, не затрагивая его поведения.
  • 4. Важные моменты в определении • Цель – упростить понимание и модификацию программного обеспечения Пример: оптимизация кода не является рефакторингом • Внешнее поведение не меняется • Рефакторинг не равно переписыванию – Рефакторинг – эволюционный путь – Переписывание – революционный путь
  • 5. Top-4 причин для выполнения рефакторинга 1. 2. 3. 4. Улучшение композиции ПО Улучшает понимание ПО Найти ошибки Ускорение разработки ПО
  • 6. Ситуации, когда стоит применять рефакторинг • • • • • • Правило трех ударов Добавление новой функции Исправление ошибки Разбор кода Разработка по TDD (более подробно далее) Код, требующий рефакторинга
  • 7. Разработка по TDD 1. 2. 3. 4. Написание тестов Код, удовлетворяющий одному тесту Рефакторинг Переход на шаг 1.
  • 8. Признаки кода, требующего рефакторинга • Дублирование кода • Длинный метод • Большой класс • Длинный список параметров • Расходящиеся модификации • Стрельба дробью • Завистливые функции • Группы данных • Одержимость элементарными типами Ex 04.029.01-2011
  • 9. • • • • • • • • • • Параллельные иерархии наследования Ленивый класс Теоретическая общность Временное поле Цепочки сообщений Посредник Неуместная близость Альтернативные классы с разными интерфейсами Неполнота библиотечного класса Классы данных
  • 10. • Отказ от наследства • Комментарии
  • 12. Выделение метода Есть фрагмент кода, который выполняет определенное действие. Выделить этот фрагмент в метод, название которого объясняет смысл действия. Категория: основной
  • 13. Объяснения • Выделять методы нужно, если исходный метод слишком длинный • Выделение метода позволяет повторно использовать этот фрагмент • Повышается читабельность кода – имена методов поясняют смысл действий
  • 14. Техника • Создать метод с названием, соответствующим назначению метода • Написать набор тестов для данного метода (если метод не закрытый) • Скопировать код подлежащий выделению из исходного метода в созданный • Найти в извлеченным коде все переменные, имеющие локальную область видимости – это будут локальные переменные и параметры метода • Найти все временные переменные в выделенном коде – объявить как временные переменные в новом методе
  • 15. • Модифицирует ли код какие-то из временных переменных, если да, то выделить фрагменты по изменению значения временной переменной на вызовы новых методов – Расщепление временной переменной – Замена временной переменной вызовом метода • Передавать в качестве параметров переменные с локальной областью видимости, чтение которых осуществляется в выделенном коде • Компиляция; тестирование выделенного метода • Замена выделенного фрагмента на вызов метода • Компиляция и тестирование
  • 17. Встраивание метода Тело метода столь же понятно, что и его название Заменить вызов метода на тело самого метода Категория: промежуточный
  • 18. Объяснения • очень короткие методы, например, в одну строчку Пример: метод, вызывающий другой метод Часто получаются в процессе рефакторинга • Структура методов неудачная. Тогда встраиванием методов позволяет получить один большой метод, из которого выделением метода получаем другую структуру
  • 19. Техника • • • • • Убедиться, что метод не является полиморфным Найти все вызовы метода Заменить каждый вызов телом метода Выполнить компиляцию и тестирование Удалить метод
  • 20. Встраивание временной переменной Имеется временная переменная, которой выражение присваивается один раз, и эта переменная мешает проведению других рефакторингов. Заменить переменную на выражение, значение которого присваивалось этой переменной. Категория: промежуточный
  • 21. Техника • Добавить к объявлению переменной ключевое слово const • Найти все ссылки на переменную и заменить ее правой частью присваивания • Выполнять компиляцию и тестирование после каждой модификации • Удалить объявление и присваивание данной переменной • Выполнить компиляцию и тестирование
  • 23. Замена переменной вызовом метода Временная переменная используется для хранения значения выражения. Преобразовать выражение в метод. Заменить все ссылки на переменную вызовом метода. Новый метод может быть повторно использован в других методах. Категория: основной
  • 24. Объяснения • Временные переменные ведут к увеличению размеров кода, многократному повторению одних и тех же строчек. Вычисление значения в методе существенно увеличивает степень повторной используемости • Часто является необходимым шагом для выделения метода • Если переменной значение присваивается неоднократно, то можно воспользоваться методами рефакторинга Расщепление временной переменной и Разделение запроса и модификатора
  • 25. Техника • Найти переменную, которой присваивание выполняется один раз • Добавить к объявлению переменной ключевое слово const • Скомпилировать код • Выделить из правой части присваивания метод • Выделенный метод должен не менять значения других полей и объектов • Написать тесты для выделенного метода • Компиляция и тестирование • Выполнить встраивание временной переменной
  • 27. Введение поясняющей переменной Имеется сложное выражение. Поместить результат вычисления данного выражения во временную переменную с говорящим именем. Категория: промежуточный
  • 28. Объяснения • Упрощает понимание сложных выражений • Часто является промежуточным, перед Заменой переменной вызовом метода
  • 29. Техника • Объявить локальную переменную с ключевым словом const, проинициализировать ее частью сложного выражения • Заменить вхождения этого выражения на обращение к данной переменной • Компиляция и тестирование • Повторить эту процедуру для других частей сложного выражения