Материал: Паттерны проектирования программных систем (90

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Команда (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

Источник: https://studfile.net/preview/16724806/