
Разработка ПО на профессиональном уровне v.2
.0.pdf
Рефакторинг
private List<Point> getNeighbours(int x, int y)
{
List<Point> result=new LinkedList<Point>(); for(int i=-1;i<=1;i++)
for(int j=-1;j<=1;j++)
{
if(i==0 && j==0) continue;
result.add(new Point(x+i, y+i));
}
return result;
}
private List<Point> filterNeighbours(List<Point> neighbours, int size)
{
List<Point> result=new LinkedList<Point>(); for(Point point:neighbours)
{
if(point.x<0 || point.y<0 || point.x>=size || point.y>=0) continue;
result.add(point);
}
return result;
}
Шаг 4

Рефакторинг
private int countAliveNeighbours
(List<Point> neighbours, boolean[][] board)
{
int result=0;
for(Point neighbour:neighbours)
{
if(board[neighbour.x][neighbour.y])
result++;
}
return result;
}
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];
}
Шаг 4

Рефакторинг
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;
}
}
Шаг 4

Рефакторинг
private boolean getNewCellState(boolean oldState, int neighbours)
{
return neighbours==3 || (oldState && neighbours==2);
}
Шаг 5

Что надо уметь программисту?
НЕ ЛЕНИТЕСЬ!!!
РАБОТАЙТЕ ГОЛОВОЙ!!!

Следствие устранения дублирования
Устранение |
Введение |
дублирования |
абстракций |
Создание фреймворка, общего решения
Обнаружение
Работа с
дублирования
абстракциями в цикле

Модифицируемость программы
Надо
внести
изменения во всем коде!

Модифицируемость программы
Изменить
одну
отдельную часть - модуль программы

Модульность программы

Проектирование модулей
Паттерн проектирования -
это архитектурная конструкция, адаптированная для решения проблемы проектирования в конкретном
контексте
Не изобретайте велосипед!