Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
7
Добавлен:
02.06.2015
Размер:
262.9 Кб
Скачать

Рефакторинг

Выделение группы методов в интерфейс

Пример: до рефакторинга

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