Наибольшие трудности при построении диаграмм Use Case вызывает применение отношений включения и расширения. Очень важно разобраться в отличительных особенностях этих отношений, специфике взаимодействия элементов Use Case, соединяемых с их помощью.
Пример диаграммы Use Case, в которой использованы отношения включения и расширения, приведен на рис. 12.35.
В этой диаграмме один базовый элемент Use Case Сеанс банкомата, который взаимодействует с актером Клиент. К базовому элементу Use Case подключены два расширяющих элемента Use Case (Состояние, Снять) и два включаемых элемента Use Case (Идентификация клиента, Проверка счета). В свою очередь, к элементу Use Case Идентификация клиента подключен включаемый элемент Use Case Проверить достоверность, а к элементу Use Case Снять — расширяющий элемент Use Case Захват карты (он же расширяет элемент Use Case Проверить достоверность).
Видим, что элемент Use Case Сеанс банкомата имеет две точки расширения (диалог возможен, выдача квитанции), а элементы Use Case Снять и Проверить достоверность — по одной точке расширения (проверка снятия и проверка соответственно). В точки расширения возможна вставка поведения из расширяющего элемента Use Case. Вставка происходит, если выполняется условие расширения:
q для расширяющего элемента Use Case Состояние — это условие запрос состояния;
q для расширяющего элемента Use Case Снять — это условие запрос снятия;
q для расширяющего элемента Use Case Захват карты — это условие список подозрений.

Рис. 12.35. Использование включения и расширения
Для расширяемого (базового) элемента Use Case эти условия являются внешними, то есть формируемыми вне его. Иными словами, элементу Use Case Сеанс банкомата ничего не известно об условиях запрос состояния и запрос снятия, а элементам Use Case Снять и Проверить достоверность — об условии список подозрений. Условия расширения являются следствиями событий, происходящих во внешней среде.
|
include (Идентификация клиента) include (Проверка счета) (диалог возможен) напечатать заголовок квитанции (выдача квитанции) конец сеанса |
//включение //включение //первая точка расширения //вторая точка расширения |
|
сегмент |
//начало первого сегмента |
|
принять запрос состояния |
//условие расширения |
|
отобразить информацию о состоянии счета |
|
|
сегмент |
//вторая точка расширения |
|
конец сеанса |
|
сегмент |
//начало первого сегмента |
|
принять запрос снятия |
//условие расширения |
|
определить сумму |
|
|
(проверка снятия) |
//точка расширения |
|
сегмент |
//начало второго сегмента |
|
напечатать снимаемую сумму |
|
|
выдать наличные деньги |
|
|
сегмент принять список подозрений проглотить карту конец сеанса |
//начало единственного сегмента //условие расширения |
|
получить имя клиента include (Проверить достоверность) получить номер счета клиента |
//включение |
|
установить соединение с базой данных счетов получить состояние и ограничения счета |
|
установить соединение с базой данных клиентов получить параметры клиента (проверка) //точка расширения |