Тема 5 XP eXtreme Programming Обычно рефакторинг не может изменять семантику программы ни при каких условиях. Условия семантики формируются при помощи тестов, которые уже сработали. XP Каким образом можно унифицировать два схожих фрагмента.

Download Report

Transcript Тема 5 XP eXtreme Programming Обычно рефакторинг не может изменять семантику программы ни при каких условиях. Условия семантики формируются при помощи тестов, которые уже сработали. XP Каким образом можно унифицировать два схожих фрагмента.

Slide 1

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 2

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 3

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 4

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 5

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 6

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 7

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 8

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 9

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 10

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 11

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 12

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 13

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP


Slide 14

Тема 5

XP

eXtreme Programming

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

XP

Каким образом можно унифицировать два
схожих фрагмента кода?
Постепенно делайте их все более похожими
друг на друга. Унифицируйте их только в
случае, если они абсолютно идентичны.

XP

Каким образом можно модифицировать одну
часть метода или объекта, состоящую из
нескольких частей?
Вначале изолируйте изменяемую часть.

XP

Каким образом можно перейти от одного
представления к другому?
Переход от внутреннего представления к внешнему
интерфейсу.
1)
Создайте экземплярную переменную в новом формате.
2)
Инициализируйте переменную нового формата везде,
где инициализируется переменная старого формата.
3)
Используйте переменную нового формата везде, где
используется переменная старого формата.
4)
Удалите старый формат.
5)
Изменить внешний интерфейс таким образом, чтобы
использовать новый формат.

XP

Переход от внешнего интерфейса к
внутреннему представлению.
1)

2)

3)
4)
5)

Добавьте параметр в новом формате.
Обеспечьте преобразование параметра в новом
формате во внутреннее представление,
обладающее старым форматом.
Удалите параметр в старом формате.
Замените использование старого формата на
использование нового формата.
Удалите старый формат.

XP

Каким образом длинный сложный метод
можно сделать простым в прочтении?
Выделите небольшую часть длинного метода
в отдельный метод и обратитесь к нему из
длинного.

XP

1)

2)

3)
4)

5)

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

XP

Каким образом можно упростить код в
случае, если становится сложно уследить за
последовательностью передачи управления
от метода к методу?
Замените обращение к методу кодом этого
метода.
1) Скопируйте код метода.
2) Вставьте код метода вместо обращения к
методу.
3) Замените все формальные параметры
фактическими параметрами.

XP

Каким образом создать альтернативные
реализации операций?
Создайте интерфейс, в котором будут
содержаться общие операции.
1)
2)

3)
4)

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

XP

Каким образом метод можно переместить в
новое место?
Добавьте его в класс, которому он должен
принадлежать, затем обратитесь к нему.
1)
2)
3)

4)

Скопируйте метод.
Вставьте метод в целевой класс. Откомпилируйте его.
Если внутри метода происходит обращение к исходному
объекту, добавьте в метод параметр, при помощи которого
внутрь метода будет передаваться изначальный объект. Если
внутри метода происходит обращение к переменнымчленам исходного объекта, передавайте их в виде
параметра. Если внутри метода переменным-членам
изначального объекта присваиваются значения, вы должны
отказаться от идеи переноса метода в другой объект.
Замените тело изначального метода обращением к новому
методу.

XP

Каким образом лучше всего реализовать
сложный метод, использующий несколько
параметров и локальных переменных?
Преобразуйте метод в отдельный объект.
1)
2)

3)
4)

Создайте класс с таким же количеством параметров, что и
оригинальный метод.
Сделайте локальные переменные метода экземплярными
переменными нового класса.
Определите в новом классе метод в именем run. Тело этого
метода будет таким же, как и тело оригинального метода.
В оригинальном методе создайте новый объект и обратитесь
к методу run этого объекта.

XP

Каким образом можно добавить в метод
новый параметр?
1)

2)
3)

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

XP

Используется тогда, когда один и тот же
параметр передается нескольким разным
методам одного и того же объекта.
1)
2)

3)
4)

5)
6)
7)

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

XP