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

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

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

Рефакторинг

Задачи рефакторинга

Назначение Рефакторинг это процесс изменения структуры программы без изменения ее функциональности.

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

Три группы методов

Изменение именования и физической организации кода

Изменение логической организации кода на уровне классов

Изменение кода внутри классов

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

21 / 44

Рефакторинг

Недостатки рефакторинга

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

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

22 / 44

Рефакторинг

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

Изменение именования и физической организации кода

Переименование элемента (пакета, класса, переменной)

Перемещение класса из одного пакета в другой

Изменение логической организации кода

Преобразование анонимного класса во вложенный

Создание класса из вложенного

Перемещение методов и полей в иерархии классов

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

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

23 / 44

Рефакторинг

Преобразование анонимного класса во вложенный

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

1

p u b l i c c l a s s R ec t a n g l e {

2

p r o t e c t e d double a , b , s q r ;

3

R e c t a n g l e ( double a , double b ) {

4

t h i s . a

=

a ;

5

t h i s . b

=

b ;

6}

7

p u b l i c v o i d c a l c u l a t e S q u a r e ( ) {

8

Runnable rn = new Runnable ( ) {

9

p u b l i c v o i d run ( ) {

10

s q r = a b ;

11}

12} ;

13new Thread ( rn ) . s t a r t ( ) ;

14}

15}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

24 / 44

Рефакторинг

Преобразование анонимного класса во вложенный

Пример: после рефакторинга

1

p u b l i c c l a s s R ec t a n g l e {

2

p r i v a t e c l a s s

C a l c u l a t o r implements Runnable {

3

p u b l i c v o i d run ( ) {

4

s q r =

a b ;

5}

6}

7

p r o t e c t e d

double

a ,

b , s q r ;

8

R e c t a n g l e ( double

a ,

double b ) {

9t h i s . a = a ;

10t h i s . b = b ;

11}

12

p u b l i c v o i d c a l c u l a t e S q u a r e ( )

{

13

new Thread (new C a l c u l a t o r

( ) ) . s t a r t ( ) ;

14}

15}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

25 / 44

Рефакторинг

Создание класса из вложенного

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

1

p u b l i c c l a s s R ec t a n g l e {

2

p r i v a t e c l a s s

C a l c u l a t o r implements Runnable {

3

p u b l i c v o i d run ( ) {

4

s q r =

a b ;

5}

6}

7

p r o t e c t e d

double

a ,

b , s q r ;

8

R e c t a n g l e ( double

a ,

double b ) {

9t h i s . a = a ;

10t h i s . b = b ;

11}

12

p u b l i c v o i d c a l c u l a t e S q u a r e ( )

{

13

new Thread (new C a l c u l a t o r

( ) ) . s t a r t ( ) ;

14}

15}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

26 / 44

Рефакторинг

Создание класса из вложенного

Пример: после рефакторинга

1

c l a s s C a l c u l a t o r implements Runnable {

2

p r i v a t e f i n a l R ec t a n g l e r e c t a n g l e ;

3

4

C a l c u l a t o r ( R e ct a n g l e r e c t a n g l e ) {

5

t h i s . r e c t a n g l e = r e c t a n g l e ;

6

}

7

p u b l i c v o i d run ( ) {

8

t h i s . r e c t a n g l e . s q r = t h i s . r e c t a n g l e . a t h i s .

 

r e c t a n g l e . b ;

9

}

10

}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

27 / 44

Рефакторинг

Создание класса из вложенного

Пример: после рефакторинга (продолжение)

11

p u b l i c c l a s s R ec t a n g l e {

12

p r o t e c t e d double

a ,

b , s q r ;

13

R e c t a n g l e ( double

a ,

double b ) {

14t h i s . a = a ;

15t h i s . b = b ;

16}

17

p u b l i c v o i d c a l c u l a t e S q u a r e ( )

{

18

new Thread (new C a l c u l a t o r

( t h i s ) ) . s t a r t ( ) ;

19}

20}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

28 / 44

Рефакторинг

Перемещение методов и полей внутри иерархии

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

1

c l a s s R e c t a n g l e {

 

2

p r o t e c t e d double a , b ;

3

R e c t a n g l e ( double a , double b ) {

4

t h i s . a

=

a ;

5

t h i s . b

=

b ;

6}

7}

8

c l a s s Square extends R ec ta ng l e {

9

Square ( double a , double b ) {

10

super ( a , b ) ;

11

}

12

p u b l i c double getSquare ( ) {

13

r e t u r n t h i s . a t h i s . b ;

14}

15}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

29 / 44

Рефакторинг

Перемещение методов и полей внутри иерархии

Пример: после рефакторинга

1

c l a s s R e c t a n g l e {

 

2

p r o t e c t e d double a , b ;

3

R e c t a n g l e ( double a , double b ) {

4

t h i s . a

=

a ;

5

t h i s . b

=

b ;

6}

7

p u b l i c double getSquare ( ) {

8

r e t u r n t h i s . a t h i s . b ;

9

}

10

}

11

c l a s s Square extends R ec ta ng l e {

12

Square ( double a , double b ) {

13

super ( a , b ) ;

14}

15}

Г.А. Чистяков (ВятГУ)

РПС

20 сентября 2014 г.

30 / 44