Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТПСПП_ЛЕКЦИИ_MOD2.doc
Скачиваний:
4
Добавлен:
11.09.2019
Размер:
763.39 Кб
Скачать
  1. Выделение метода.

Описание: Есть участок кода, который можно сгруппировать.

Действие: Поместить участок кода в метод, название к-ого отвечает назначению.

string _sname;

string _name;

void PrintInfo() {

PrintBanner();

cout << “surname: ” << _sname; | PrintFullName();

cout << “name: ” << _name; |

}

Проблемы с локальными переменными.

  • если локальная переменная только читается, то передевать ее параметром

  • если локальная переменная изменяется, то: если она используется только внутри выделенного кода, то сделать ее локальной в выделяемом методе; иначе необходимо организовать возврат.

Вопрос: если надо вернуть значения нескольких переменных:

  1. организовать возврат значений по отдельности;

  2. если не получается, то данный участок кода лучше не выделять.

  1. Встраивание метода

Описание: Тело метода столь же понятно, как и его название.

Действие: Поместить тело метода в код, к-ый его вызывает, и удалить метод.

bool IsFlagChecked() {

return bFlagChecked;

}

  1. Встраивание временной переменной

Описание: Есть временная переменная, к-ой один раз присваивается простое выражение, и она мешает проведению Выделения метода.

Действие: Заменить этим выражением все ссылки на данную переменную.

double basePrice = Order.BasePrice();

return ( basePrice > 1000 );

----------------------------------------------------------------

return ( Order.BasePrice() > 1000 );

  1. Замена временной переменной вызовом метода

Описание: временная переменная используется для хранения значения выражения.

Действие: преобразовать выражение в метод. Заменить все ссылки на временную переменную вызовом метода. Новый метод может быть использован в других методах.

double basePrice = _quantity * _itemPrice;

if ( basePrice > 1000 ) {…}

-----------------------------------------------------

double BasePrice() {

return _quantity * _itemPrice;

}

if ( BasePrice() > 1000 ) {…}

  1. Введение поясняющей переменной

Описание: имеется сложное выражение.

Действие: поместить результат выражения или его части во временную переменную, имя которой поясняет его назначение.

If (_age >= 18 ) && (_age <= 25) && ( _sex == ‘m’ ) && (!isStudent()) {…}

-----------------------------------------------------

bool bAgeFits = ( (_age >= 18 ) && (_age <= 25) );

bool bSexFits = (_sex == ‘m’);

if ( bAgeFits ) && (bSexFits) && (!isStudent()) {…}

Альтернатива выделению метода, если локальные переменные затрудняют выделение метода.

  1. Расщепление временной переменной

Описание: имеется временная переменная, которой неоднократно присваивается значение, но это не переменная цикла и не для накопления результата.

Действие: создать для каждого присваивания отдельную временную переменную.

double temp = _width * _height;

cout << “Square: ” << temp;

temp = 2 * (_width + _height);

cout << “Perimeter: ” << temp;

-----------------------------------------------------

double square = _width * _height;

double perimeter = 2 * (_width + _height);

  1. Удаление присваиваний параметрам

Описание: выполняется присваивание параметру.

Действие: заменить это временной переменной.

double discount( double price, int quantity ) {

if ( price > 1000.0 ) { price *= 0.9 }

if ( quantity >= 5 ) { price *= 0.8 }

return price;

}

-----------------------------------------------------

double discount( double price, int quantity ) {

double result = price;

if ( price > 1000.0 ) { result *= 0.9 }

if ( quantity >= 5 ) { result *= 0.8 }

return result;

}