Команда (Command);
Интерпретатор (Interpreter);
Итератор (Iterator);
Посредник (Mediator);
Хранитель (Memento);
Наблюдатель (Observer);
Состояние (State);
Стратегия (Strategy);
Шаблонный метод (Template method);
Посетитель (Visitor).
Задание
Реализовать программу для решения задачи согласно варианту с использованием требуемого поведенческого шаблона проектирования.
Содержание отчета
1.Титульный лист.
2.Цель работы, задание, вариант.
3.Краткие теоретические сведения.
3.1.Описание шаблона проектирования.
3.2.Классовая диаграмма для шаблона проектирования в нотации
UML.
4.Описание условий и хода работы.
4.1.Используемые аппаратные и программные средства.
4.2.Интерпретация шаблона проектирования для решения задачи.
4.3.Классовая диаграмма для задачи в нотации UML.
5.Результаты работы.
5.1.Текст программы (только классы, реализующие шаблон проектирования и клиентский код, использующий шаблон).
20
6.Анализ результатов работы.
(Скриншоты с результатами выполнения программы, содержание базы данных, файлов – в зависимости от варианта).
7.Выводы о достоинствах и недостатках используемого шаблона проектирования.
Контрольные вопросы
1.Назначение поведенческих шаблонов проектирования. Перечень поведенческих шаблонов.
2.Назначение и структура шаблона «Цепочка ответственности» (a Chain of responsibility). Преимущества и недостатки шаблона.
3.Назначение и структура шаблона «Команда» (Command).
Преимущества и недостатки шаблона.
4.Назначение и структура шаблона «Интерпретатор» (Interpreter).
Преимущества и недостатки шаблона.
5.Назначение и структура шаблона «Итератор» (Iterator). Преимущества
инедостатки шаблона.
6.Назначение и структура шаблона «Посредник» (Mediator).
Преимущества и недостатки шаблона.
7.Назначение и структура шаблона «Хранитель» (Memento).
Преимущества и недостатки шаблона.
8.Назначение и структура шаблона «Наблюдатель» (Observer).
Преимущества и недостатки шаблона.
9.Назначение и структура шаблона «Состояние» (State). Преимущества
инедостатки шаблона.
10.Назначение и структура шаблона «Стратегия» (Strategy).
Преимущества и недостатки шаблона.
11.Назначение и структура шаблона «Шаблонный метод» (Template method). Преимущества и недостатки шаблона.
21
12.Назначение и структура шаблона «Посетитель» (Visitor).
Преимущества и недостатки шаблона.
Варианты
1.Реализовать программу с использованием указанного паттерна.
1.1.Цепочка ответственности.
Реализовать программу с оконным интерфейсом и системой справки,
которая дает справочную информацию по объекту окна, на который указал пользователь, а если таковая отсутствует, то справочную информацию для более общего объекта. Например, для получения справки пользователь может щелкнуть правой кнопкой мыши по какому-либо элементу графического интерфейса, выбрать пункт контекстного меню “?”, и получить информацию об объекте, по которому щелкнул (получить справку о кнопке “Печать”, получить справку о диалоговом окне “Печать документов”, или получить общую справку обо всем текстовом редакторе).
1.2.Интерпретатор.
Реализовать библиотеку для задания образцов поиска строк (регулярных выражений). Должны поддерживаться:
поиск строки по точному совпадению;
поиск строки по неточному совпадению;
применение оператора AND (и);
применение оператора OR (или).
1.3.Посредник.
Реализовать программное обеспечение авиадиспетчерской вышки,
которая контролирует движение самолетов. Сами самолеты между собой напрямую не взаимодействуют. Должно быть минимум 3 взлетно-
посадочных полосы и 5 терминалов, одновременно на каждой полосе и
укаждого терминала может находиться только один самолет.
22
1.4.Хранитель.
Реализовать графический редактор простых геометрических объектов с функцией пошагового восстановления состояний и возврата изменений.
1.5.Наблюдатель.
Реализовать программу для построения графиков курса валют и/или биржевых курсов в режиме реального времени. Должна быть реализована возможность добавлять и удалять необходимые графики.
1.6.Состояние.
Реализовать систему ведения заказов в интернет-магазине. Должны быть реализованы различные статусы заказа – Принят, В обработке, Оплачен,
Разрешена отгрузка, Разрешена доставка, Доставлен и Отменен. При каждом изменении статуса должен быть оповещен покупатель, для статуса Разрешена отгрузка, должен быть оповещен кладовщик, а для статуса Разрешена доставка – Курьер.
1.7.Посетитель.
Реализовать форму обратной связи с полями Имя, email-адрес, номер телефона и сообщение. Поля должны проверяться на корректность введенных данных, наличие SQL-инъекций и использование XSS-
уязвимостей. Программа должна поддерживать дальнейшее расширение проверок для указанных полей.
2.Необходимо определить проблему текущей архитектуры приложения
(согласно варианту), поставить задачи на изменение программы, построить диаграмму классов и внести изменения в код, получив работоспособное приложение.
2.1.Цепочка ответственности.
Есть четыре приемника монет, каждый из которых принимает монеты только одного номинала (1, 5, 10 и 25 центов). Необходимо вывести на экран общую внесенную сумму и количество внесенных монет каждого номинала.
23
#include <iostream.h> #include <stdlib.h> #include <time.h> class Slot {
public:
Slot(int val) { value_ = val; count_ = 0;
}
int accept(int coin) {
if (coin == value_) { count_++; return 1;
}
return 0;
}
int getCount() { return count_;
}
private:
int value_; int count_;
};
class Quarter : public Slot { public:
Quarter() : Slot(25) { }
};
class Dime : public Slot { public:
Dime() : Slot(10) { }
};
class Nickel : public Slot { public:
Nickel() : Slot(5) { }
};
class Penny : public Slot { public:
Penny() : Slot(1) { }
};
int pickCoin()
{
static int choices[4] = { 1, 5, 10, 25 }; return choices[rand() % 4];
}
void main(void)
{
Slot* slots[4]; slots[0] = new Quarter; slots[1] = new Dime; slots[2] = new Nickel; slots[3] = new Penny; int i, coin, total; time_t t;
srand((unsigned)time(&t));
for (i = 0, total = 0; i < 10; i++)
{
coin = pickCoin(); cout << coin << " "; total += coin;
for (int j = 0; j < 4; j++)
if (slots[j]->accept(coin)) break;
}
cout << "\ntotal deposited is $" << total / 100 << "."
24