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

note

.pdf
Скачиваний:
7
Добавлен:
07.03.2015
Размер:
1.91 Mб
Скачать

51 КП-02068195-341-07-14

Рис. 3.6. Диаграмма классов 1 итерации

3.9.3Инициализация

На Рис. 3.7 показана схема инициализации объектов в Системе.

52 КП-02068195-341-07-14

Рис. 3.7. Диаграмма инициализации объектов

Главный метод main инициализирует первый объект — вызывает конструктор PMain(),

который создаёт объект PMain и вызывает конструктор класса Pconsole, а потом вызывает метод класса PConsole - displaylogin(). PConsole инициирует CActioner, а тот в свою очередь MBroker.

В соответствии с шаблоном PCMEF классы в более высоких уровнях инициализируют классы в

(соседних) более низких уровнях.

3.9.4Взаимодействия

Взаимодействия связаны с каждым основным действием, которое может выбрать пользователь и с потоками исключений в спецификации сценария использования.

Список взаимодействий:

«удачный путь» взаимодействия:

регистрационное имя (login);

выход (exit);

просмотр непосланных сообщений (view unsent messages);

53 КП-02068195-341-07-14

отображение текста сообщения (display message text);

сообщение, передаваемое по электронной почте (email message);

«неудачный путь» взаимодействия:

неправильное имя пользователя или неправильный пароль (incorrectusername or password);

неправильная опция (incorrect option);

слишком много сообщений (too many messages);

сообщение не может быть послано по электронной почте (email could not be sent).

3.9.4.1 Взаимодействие «Регистрационное имя» (Login)

Объект :PMain вызывает операцию displayLogin() объекта :PConsole (Рис. 3.8).

Рис. 3.8. Взаимодействие «Регистрационное имя»

Это сообщение является частью метода-конструктора класса PMain( ) , который инициализирует объект класса PConsole перед тем, как к нему будет послана операция displayLogin(). getUserInput() получает регистрационное имя и пароль от пользователя и посылает запрос login() к объекту :CActioner.

Объект :CActioner делегирует запрос login() объекту :MBroker, который в свою очередь делегирует его в сообщении connect() объекту :FConnection.

54 КП-02068195-341-07-14

Объект :MBroker формирует SQL-строку и передает ее в сообщении query() (запрос)

объекту :FReader. Объект :FReader выполняет SQL-поиск в БД, посылая следующий запрос:

select * from employee where login_name = ?;

login_name обеспечивает однозначную идентификацию служащего в БД. Объект

:FReader возвращает набор результатов объекту :MBroker. Объект :MBroker использует набор результатов, чтобы поместить строковые данные о служащих в только что созданный объект :EEmployee. Затем он запрашивает объект :FReader, чтобы тот закрыл набор результатов.

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

(здесь не показано). Взаимодействие «Регистрационное имя» после этого завершается, и

:PConsole использует displayMenu(), чтобы показать меню приложения пользователю.

3.9.4.2 Взаимодействие «Выход» (Exit)

Взаимодействие представляет собой последовательность делегирований от объекта

:PConsole до объекта :FConnection (Рис. 3.9). Как только объект :FConnection закроет связь с БД, объект :CActioner обеспечивает выход из системы.

Рис. 3.9. Взаимодействие «Выход»

3.9.4.3 Взаимодействие «Просмотр непосланных сообщений» (View Unsent Messages)

Начинается с запроса пользователя из объекта :PConsole — см. Рис. 3.10.

55 КП-02068195-341-07-14

Рис. 3.10. Взаимодействие «Просмотр непосланных сообщений»

Операция viewMessages() создает новый (пустой) объект Java-коллекции (например,

ArrayList — список-массив) и передает его в операции retrieveMessages() объекту :CActioner.

Объект :CActioner делегирует запрос объекту :MBroker после помещения его объекта

:EEmployee в список аргументов.

56 КП-02068195-341-07-14

Объект :MBroker запрашивает :FReader, чтобы тот выполнил следующую операцию query() над БД:

select * from OutMessage

where sender_emp_id = ? and date_emailed is null;

Результат, полученный операцией query(), используется для того, чтобы создать в кэше коллекцию объектов :EOutMessage и установить соответствующие хэш-массивы. Конструктор объектов класса :EOutMessage использует интерфейс IEDataSupplier. Этот интерфейс определяет коллекцию, в которую может быть помещен объект :EOutMessage.

К объекту :MBroker возвращается коллекция исходящих сообщений, в которую помещены инициализированные объекты класса :EOutMessage.

Каждый объект :EOutMessage содержит id (идентификатор) делового партнера для данного исходящего сообщения. Эта информация используется объектом :MBroker, чтобы извлечь из БД деловых партнеров для соответствующих исходящих сообщений. Данная операция завершается формированием объектов класса :EContact и размещеним их в коллекции. В конечном счете

:PConsole оказывается в состоянии отобразить исходящие сообщения вместе с информацией о деловых партнерах, используя операцию displayMessages().

3.9.4.4 Взаимодействие «Отображение текста сообщения» (Display Message Text)

Взаимодействие показано на диаграмме (Рис. 3.11). Объект :MBroker проверяет, находится ли объект :EOutMessage уже в памяти, и если его там нет, он должен поместить этот объект в память, используя query() объекта :FReader.

Как только :EOutMessage будет размещен в памяти, :MBroker возвращает его :PConsole.

57 КП-02068195-341-07-14

Рис. 3.11. Взаимодействие «Отображение текста сообщения»

3.9.4.5 Взаимодействие «Отсылка сообщения» (Email Message)

Взаимодействие начинается, когда пользователь хочет послать по электронной почте текст

исходящего сообщения, извлеченного из БД (Рис. 3.12).

58 КП-02068195-341-07-14

Рис. 3.12. Взаимодействие «Сообщение, передаваемое по электронной почте»

Как только запрос на это взаимодействие сделан, объект :PConsole начинает готовить сообщение для отсылки, используя операцию prepareMessage(). Сначала prepareMessage()

обращается к объекту :CActioner, чтобы использовать операцию retrieveMessage. Как только детали исходящего сообщения будут получены, объект :PConsole обращается к объекту

:CActioner для использования операции sendMessage().

:CActioner использует функциональные возможности библиотеки, чтобы послать исходящее сообщение по электронной почте с помощью метода send() (послать). Если send() отработает успешно, метод sendMessage() активизирует операцию updateMessage() класса :MBroker. Класс

:MBroker делегирует работу классу :FWriter, который формирует и выполняет в БД следующий

SQL-оператор:

update OutMessage set date_emailed = ? where message id = ?;

Оператор update изменяет запись в таблице OutMessage. Это означает что соответствующий объект :EOutMessage (класс «исходящее сообщение» пакета entity) в кэше программы содержит неправильные данные. Для этого объект : MBroker использует операцию

59 КП-02068195-341-07-14

flagCache(), чтобы установить кэш в «измененное» состояние. Далее :MBroker помогает заново

извлечь данные из БД.

3.9.4.6Взаимодействие «Неправильное имя пользователя или неправильный пароль»

(Incorrect User Name or Password)

Это взаимодействие является альтернативным путём выполнения взаимодействия

«Регистрационное имя», как показано на Рис. 3.13.

Рис. 3.13. Взаимодействие «Неправильное имя пользователя или неправильный пароль»

Если объект :PConsole возвратит «недопустимое регистрационное имя» с помощью последовательности операций, активизированных операцией getUserInput() — (Ошибка!

сточник ссылки не найден.), он использует операцию displayLoginError(), чтобы вывести пользователю ответ: «Неправильное регистрационное имя». Если это происходит третий раз подряд,

программа посылает сообщение exit() объекту :CActioner.

3.9.4.7 Взаимодействие «Неправильная опция» (incorrect option)

Если регистрационное имя пользователя введено правильно, объект :PConsole использует

операцию displayMenu(), чтобы отобразить меню (Рис. 3.14).

60 КП-02068195-341-07-14

Рис. 3.14. Взаимодействие «Неправильная опция»

Операция getUserInput() читает введенный пользователем номер опции. Если введенное значение неправильно, программа игнорирует величину и заново показывает меню. Пользователю позволены три попытки ввести допустимый номер опции. Программа получает число разрешенных попыток из константы MAX_LOGIN_TRY, находящейся в интерфейсе IAConstants — интерфейс

«константы» пакета acquaintance. После трех ошибок объект :PConsole инициализирует операцию logout() (завершение работы с зарегистрированным пользователем), и когда управление возвращается обратно, приглашает пользователя заново зарегистрироваться - использует displayLogin().

3.9.4.8 Взаимодействие «Слишком много сообщений» (Too Many Messages)

Значение константы MAX_DISPLAY_MESSAGES в интерфейсе IAConstants — контролирует максимальное число исходящих сообщений, которые программа подготовила для отображения на кон-

сольном экране пользователя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]