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

Разработка ПО на профессиональном уровне v.2

.0.pdf
Скачиваний:
11
Добавлен:
23.02.2015
Размер:
9.29 Mб
Скачать

Рефакторинг

public void lifeCycle(boolean[][] board, int size)

{

boolean[][] buf=new boolean[size][size]; for (int x=0;x<size;x++)

{

for (int y=0;y<size;y++)

{

int neighbours = 0;

neighbours+=x>0 && y>0 && board[x-1][y-1]?1:0; neighbours+=x>0 && board[x-1][y]?1:0; neighbours+=x>0 && y<size-1 && board[x-1][y+1]?1:0; neighbours+=y>0 && board[x][y-1]?1:0; neighbours+=y<size-1 && board[x][y+1]?1:0; neighbours+=x<size-1 && y<0 && board[x+1][y-1]?1:0; neighbours+=x<size-1 && board[x+1][y]?1:0;

neighbours+=x<size-1 && y<size-1 && board[x+1][y+1]?1:0;

Шаг 2

Рефакторинг

if(board[x][y])

{

if(neighbours<2 || neighbours>3) buf[x][y]=false;

else

buf[x][y]=true;

}

else

{

if(neighbours==3)

buf[x][y]=true;

else

buf[x][y]=false;

}

}

}

for(int i=0;i<size;i++) for(int j=0;j<size;j++)

board[i][j]=buf[i][j];

}

Шаг 2

Что надо уметь программисту?

функция должна делать только одну операцию и делать это хорошо;

Сфокусированность

Связанность

Cohesion

Coupling

Высокая

Низкая

Что надо уметь программисту?

функция должна обладать высокой сфокусированностью и низкой связностью;

Сфокусированность

Связанность

Cohesion

Coupling

Высокая

Низкая

Рефакторинг

private boolean getNewCellState(boolean oldState, int neighbours)

{

if(oldState)

{

if(neighbours<2 || neighbours>3) return false;

else

return true;

}

else

{

if(neighbours==3) return true;

else

return false;

}

}

private void copyMatrix(boolean[][] from, boolean[][] to, int size)

{

for(int i=0;i<size;i++) for(int j=0;j<size;j++)

to[i][j]=from[i][j];

}

Шаг 3

Рефакторинг

public void lifeCycle(boolean[][] board, int size)

{

boolean[][] buf=new boolean[size][size]; for (int x=0;x<size;x++)

{

for (int y=0;y<size;y++)

{

int neighbours = 0;

neighbours+=x>0 && y>0 && board[x-1][y-1]?1:0; neighbours+=x>0 && board[x-1][y]?1:0; neighbours+=x>0 && y<size-1 && board[x-1][y+1]?1:0; neighbours+=y>0 && board[x][y-1]?1:0; neighbours+=y<size-1 && board[x][y+1]?1:0;

neighbours+=x<size-1 && y < 0 && board[x+1][y-1]?1:0; neighbours+=x<size-1 && board[x+1][y]?1:0; neighbours+=x<size-1 && y<size-1 && board[x+1][y+1]?1:0; board[x][y]=getNewCellState(board[x][y], neighbours);

}

}

copyMatrix(buf, board, size);

}

Шаг 3

Рефакторинг

public void lifeCycle(boolean[][] board, int size)

{

boolean[][] buf=new boolean[size][size]; for (int x=0;x<size;x++)

{

for (int y=0;y<size;y++)

{

int neighbours = 0;

neighbours+=x>0 && y>0 && board[x-1][y-1]?1:0; neighbours+=x>0 && board[x-1][y]?1:0; neighbours+=x>0 && y<size-1 && board[x-1][y+1]?1:0; neighbours+=y>0 && board[x][y-1]?1:0; neighbours+=y<size-1 && board[x][y+1]?1:0;

neighbours+=x<size-1 && y < 0 && board[x+1][y-1]?1:0; neighbours+=x<size-1 && board[x+1][y]?1:0; neighbours+=x<size-1 && y<size-1 && board[x+1][y+1]?1:0; board[x][y]=getNewCellState(board[x][y], neighbours);

}

}

copyMatrix(buf, board, size);

}

Шаг 3

Что надо уметь программисту?

Больше одинаковых строк кода

Больше мест, куда надо внести изменения

Больше времени на

Больше вероятность

изменения

совершить ошибку

Что надо уметь программисту?

Дублирование кода - это не просто одинаковые символы

neighbours+=x>0 && y>0 && board[x-1][y-1]?1:0; neighbours+=x>0 && board[x-1][y]?1:0; neighbours+=x>0 && y<size-1 && board[x-1][y+1]?1:0; neighbours+=y>0 && board[x][y-1]?1:0; neighbours+=y<size-1 && board[x][y+1]?1:0;

neighbours+=x<size-1 && y < 0 && board[x+1][y-1]?1:0; neighbours+=x<size-1 && board[x+1][y]?1:0; neighbours+=x<size-1 && y<size-1 && board[x+1][y+1]?1:0;

Рефакторинг

public void lifeCycle(boolean[][] board, int size)

{

boolean[][] buf=new boolean[size][size]; for (int x=0;x<size;x++)

{

for (int y=0;y<size;y++)

{

List<Point> neighbours = getNeighbours(x,y);

List<Point> legalNeighbours

=filterNeighbours(neighbours, size); int aliveNeighbourCount

=countAliveNeighbours(legalNeighbours, board); board[x][y]

=getNewCellState(board[x][y], aliveNeighbourCount);

}

}

copyMatrix(buf, board, size);

}

Шаг 4