Сборка проектов и рефакторинг
.pdfРефакторинг
Выделение группы методов в интерфейс
Пример: до рефакторинга
1 |
c l a s s Square { |
2 |
p r o t e c t e d double a ; |
3 |
Square ( double a ) { |
4 |
t h i s . a = a ; |
5}
6 |
p u b l i c double getSquare ( ) { |
7 |
r e t u r n t h i s . a t h i s . a ; |
8 |
} |
9}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
31 / 44 |
Рефакторинг
Выделение группы методов в интерфейс
Пример: после рефакторинга
1 |
i n t e r f a c e F i g u r e { |
2 |
p u b l i c a b s t r a c t double getSquare ( ) ; |
3}
4 |
c l a s s Square implements F i g u r e { |
5 |
p r o t e c t e d double a ; |
6 |
Square ( double a ) { |
7 |
t h i s . a = a ; |
8}
9 |
p u b l i c double getSquare ( ) { |
10 |
r e t u r n t h i s . a t h i s . a ; |
11}
12}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
32 / 44 |
Рефакторинг
Примеры рефакторинга
Изменение кода внутри классов Выделение группы операторов в метод
Удаление метода и замена его вызова непосредственно кодом
Преобразование выражения в константу и обратно
Преобразование выражения во временную переменную и обратно
Генерация методов доступа к полю
Изменение сигнатуры метода
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
33 / 44 |
Рефакторинг
Выделение группы операторов в метод
Пример: до рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
|
|
|
||
2 |
p u b l i c double r ; |
|
|
|
||
3 |
p u b l i c i n t |
compareBySquare ( C i r c l e |
c i r c l e ) { |
|||
4 |
double |
sq1 |
= Math . PI |
t h i s . r |
|
t h i s . r ; |
5 |
double |
sq2 |
= Math . PI |
c i r c l e . r |
c i r c l e . r ; |
|
6 |
i f ( Math . abs ( sq1 sq2 ) |
< 1e 8) |
|
|
||
7 |
r e t u r n |
0 ; |
|
|
|
|
8 |
i f ( sq1 |
< sq2 ) |
|
|
|
|
9 |
r e t u r n |
1; |
|
|
|
|
10 |
r e t u r n |
1 ; |
|
|
|
|
11}
12}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
34 / 44 |
Рефакторинг
Выделение группы операторов в метод
Пример: после рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
|
||
2 |
p u b l i c double r ; |
|
||
3 |
p u b l i c i n t |
compareBySquare ( C i r c l e c i r c l e ) { |
||
4 |
double |
sq1 |
= getSquare ( t h i s . r ) ; |
|
5 |
double |
sq2 |
= getSquare ( c i r c l e . r ) ; |
|
6 |
i f ( Math . abs ( sq1 |
sq2 ) < 1e 8) |
||
7 |
r e t u r n |
0 ; |
|
|
8 |
i f ( sq1 |
< sq2 ) |
|
|
9 |
r e t u r n |
1; |
|
|
10 |
r e t u r n |
1 ; |
|
|
11 |
} |
|
|
|
12 |
p r i v a t e double getSquare ( double r ) { |
|||
13 |
r e t u r n |
Math . PI |
r r ; |
14}
15}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
35 / 44 |
Рефакторинг
Замена вызова метода кодом
Пример: до рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
|
||
2 |
p u b l i c double r ; |
|
||
3 |
p u b l i c i n t |
compareBySquare ( C i r c l e c i r c l e ) { |
||
4 |
double |
sq1 |
= getSquare ( t h i s . r ) ; |
|
5 |
double |
sq2 |
= getSquare ( c i r c l e . r ) ; |
|
6 |
i f ( Math . abs ( sq1 |
sq2 ) < 1e 8) |
||
7 |
r e t u r n |
0 ; |
|
|
8 |
i f ( sq1 |
< sq2 ) |
|
|
9 |
r e t u r n |
1; |
|
|
10 |
r e t u r n |
1 ; |
|
|
11 |
} |
|
|
|
12 |
p r i v a t e double getSquare ( double r ) { |
|||
13 |
r e t u r n |
Math . PI |
r r ; |
14}
15}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
36 / 44 |
Рефакторинг
Замена вызова метода кодом
Пример: после рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
|
|
|
||
2 |
p u b l i c double r ; |
|
|
|
||
3 |
p u b l i c i n t |
compareBySquare ( C i r c l e |
c i r c l e ) { |
|||
4 |
double |
sq1 |
= Math . PI |
t h i s . r |
|
t h i s . r ; |
5 |
double |
sq2 |
= Math . PI |
c i r c l e . r |
c i r c l e . r ; |
|
6 |
i f ( Math . abs ( sq1 sq2 ) |
< 1e 8) |
|
|
||
7 |
r e t u r n |
0 ; |
|
|
|
|
8 |
i f ( sq1 |
< sq2 ) |
|
|
|
|
9 |
r e t u r n |
1; |
|
|
|
|
10 |
r e t u r n |
1 ; |
|
|
|
|
11}
12}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
37 / 44 |
Рефакторинг
Преобразование выражения в константу
Пример: до рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
2 |
p u b l i c double getSquare ( double r ) { |
3 |
r e t u r n 3.1415926536 r r ; |
4 |
} |
5}
Пример: после рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
2 |
p r i v a t e s t a t i c f i n a l double p i = 3.1415926536; |
3 |
p u b l i c double getSquare ( double r ) { |
4 |
r e t u r n p i r r ; |
5 |
} |
6}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
38 / 44 |
Рефакторинг
Преобразование выражения в переменную
Пример: до рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
|
|
||
2 |
p u b l i c double r ; |
|
|
||
3 |
p r i v a t e double sqr , c l e n ; |
||||
4 |
C i r c l e ( double r ) { |
|
|
||
5 |
|
|
|||
6 |
t h i s . r |
= r ; |
|
|
|
7 |
s q r |
= |
Math . PI r |
r ; |
|
8 |
c l e n |
= 2 Math . PI |
|
r ; |
|
9 |
} |
|
|
|
|
10 |
} |
|
|
|
|
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
39 / 44 |
Рефакторинг
Преобразование выражения в переменную
Пример: после рефакторинга
1 |
p u b l i c c l a s s C i r c l e { |
||||
2 |
p u b l i c double r ; |
||||
3 |
p r i v a t e double sqr , c l e n ; |
||||
4 |
C i r c l e ( double r ) { |
||||
5 |
|||||
6 |
t h i s . r |
= |
r ; |
|
|
7 |
double |
tmp = Math . PI r ; |
|||
8 |
s q r |
= tmp |
|
r ; |
|
9 |
c l e n |
= |
2 |
|
tmp ; |
10}
11}
Г.А. Чистяков (ВятГУ) |
РПС |
20 сентября 2014 г. |
40 / 44 |