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

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

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

Главное требование: код должен быть простым!

KISS — Keep It Simple, Stupid

YAGNI — You Ain't Gonna Need It

POLA — Principle Of Least Astonishment

Главное требование: код должен быть простым!

typeEmul.clear();

String typeCode = typeEmul.getCode(); attrService.initType(typeCode, typeEmul);

if ( ObjectAttributeType.CODE.equals(typeCode) || BOLinksAttributeType.CODE.equals(typeCode))

{

typeEmul.setProperty(ObjectAttributeType.METACLASS_FQN, targetClass.getValue()); if (permittedTypesPR != null)

{

Collection<DtObject> selectedTypes = permittedTypesPR.getProperty().getValue(); Collection<ClassFqn> selectedTypeFqns = Collections2.transform(selectedTypes,

DtObject.FQN_EXTRACTOR); typeEmul.setProperty(ObjectAttributeType.PERMITTED_TYPES,

Sets.newHashSet(selectedTypeFqns));

}

}

Главное требование: код должен быть простым!

Причина: надо много помнить

какие переменные используются в этих строках;

какие значения в них записаны;

какой смысл они имеют;

что делают вызываемые методы;

что происходило до этого участка;

IDE помнит за нас

Что остается программисту?

Простой и понятный код

Названия переменных

Комментарии

и функций

Структура функций

Форматирование кода

Задача

"Жизнь" Джона Конвея:

1.В пустой (мертвой) клетке, рядом с которой есть три живые клетки, зарождается жизнь.

2.Если у живой клетки две или три живые соседки, то она продолжает жить. Иначе - умирает.

Задача

Рефакторинг

public void func(boolean[][] values, int a)

{

boolean[][] buf=new boolean[a][a]; for (int i=0;i<a;i++)

{

for (int j=0;j<a;j++)

{

int sum = 0;

sum+=i>0 && j>0 && values[i-1][j-1]?1:0; sum+=i>0 && values[i-1][j]?1:0;

sum+=i>0 && j<a-1 && values[i-1][j+1]?1:0; sum+=j>0 && values[i][j-1]?1:0;

sum+=j<a-1 && values[i][j+1]?1:0; sum+=i<a-1 && j<0 && values[i+1][j-1]?1:0; sum+=i<a-1 && values[i+1][j]?1:0; sum+=i<a-1 && j<a-1 && values[i+1][j+1]?1:0;

Шаг 1

Рефакторинг

if(values[i][j])

{

if(sum<2 || sum>3) buf[i][j]=false;

else

buf[i][j]=true;

}

else

{

if(sum==3)

buf[i][j]=true;

else

buf[i][j]=false;

}

}

}

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

values[i][j]=buf[i][j];

}

Шаг 1

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

Наименования функций и переменных - это мощный инструмент!