Ветвление потока управления.
Одна из особенностей диаграммы последовательности - возможность визуализировать простое ветвление процесса. Для изображения ветвления используются две или более стрелки, выходящие из одной точки фокуса управления объекта (объект ob1 на рис. 6). При этом рядом с каждой из них должно быть явно указано соответствующее условие ветви в форме булевского выражения.
Количество ветвей может быть произвольным, однако наличие ветвлений может существенно усложнить интерпретацию диаграммы последовательности. Предложение-условие должно быть явно указано для каждой ветви и записывается в форме обычного текста, псевдокода или выражения языка программирования. Это выражение всегда должно возвращать некоторое булевское выражение. Запись этих условий должна исключать одновременную передачу альтернативных сообщений по двум и более ветвям. В противном случае на диаграмме последовательности может возникнуть конфликт ветвления.
Рис. 6. Графическое изображение бинарного ветвления потока управления на диаграмме последовательности.
С помощью ветвления можно изобразить и более сложную логику взаимодействия объектов между собой (объект ob1 на рис. 7). Если условий более двух, то для каждого из них необходимо предусмотреть ситуацию единственного выполнения. Описанный ниже пример относится к моделированию взаимодействия программной системы обслуживания клиентов в банке. В этом примере диаграммы последовательности объект ob1 вызывает выполнение действий у одного из трех других объектов.
Рис. 7. Графическое изображение тернарного ветвления потока управления на диаграмме последовательности.
Условием ветвления может служить сумма снимаемых клиентом средств со своего текущего счета. Если эта сумма превышает 1500$, то могут потребоваться дополнительные действия, связанные с созданием и последующим разрушением объекта Класса 1. Если же сумма превышает 100$, но не превышает 1500$, то вызывается операция или процедура объекта ob3. И, наконец, если сумма не превышает 100$, то вызывается операция или процедура объекта ob2. При этом объекты ob1, ob2 и ob3 постоянно существуют в системе. Последний объект создается от Класса 1 только в том случае, если справедливо первое из альтернативных условий. В противном случае он может быть никогда не создан.
Объект ob1 имеет постоянный фокус управления, а все остальные объекты получают фокус управления только для выполнения ими соответствующих операций.
На диаграммах последовательности при записи сообщений также могут использоваться стереотипы, рассмотренные ранее при построении диаграммы кооперации. Их семантика и синтаксис остаются без изменения, как они определены в нотации языка UML. Ниже представлена диаграмма последовательности для описанного выше случая ветвления, дополненная стереотипными значениями отдельных сообщений (рис. 8). Очевидно, эта диаграмма последовательности является более выразительной и простой для своей содержательной интерпретации.
Рис. 8. Диаграмма последовательности со стереотипными значениями сообщений.
Как уже отмечалось ранее, сообщения могут иметь собственное имя, в качестве которого выступает имя операции, вызов которой инициируют эти сообщения у принимающего объекта. В этом случае рядом со стрелкой записывается имя операции с круглыми скобками, в которых могут указываться параметры или аргументы соответствующей операции. Если параметры отсутствуют, то скобки после имени операции все равно должны быть изображены.
Пример1.Рассмотрим следующую диаграмму последовательностей (рис. 9). Смысл диаграммы следующий: студент хочет записаться на некий семинар, предлагаемый в рамках некоторого учебного курса. С этой целью проводится проверка подготовленности студента, для чего запрашивается список (история) семинаров курса, уже пройденных студентом (перейти к следующему семинару можно, лишь проработав материал предыдущих занятий). После получения истории семинаров объект Слушатель класса Студент получает статус подготовленности, на основе которой ему сообщается результат (статус) его попытки записи на семинар.
Рис. 9. Диаграмма последовательности записи на семинар.
Пример2. Представим ситуацию посылки сообщения в зависимости от истинности некоторого условия. Например, если цена приглянувшейся нам в магазине вещи меньше ста условных единиц, мы вполне можем приобрести ее за наличные. Покупку на сумму от 100 до 1000 у.е. можно оплатить кредитной картой, а чтобы купить нечто, стоящее дороже 1000 у. е., придется брать кредит. Изобразим эту ситуацию на диаграмме последовательностей (рис. 10).
Рис. 10. Диаграмма последовательности оплаты товара.
Все сообщения, которые посылает Покупатель, являются синхронными. Ответное сообщение не везде нарисовано, но оно подразумевается: банк выносит решение о предоставлении кредита и сообщает его вам, терминал кредитных карт подтверждает транзакцию и печатает чек, на котором вы ставите подпись, кассир выдает вам подтверждение платежа - кассовый чек.
Пример3. На рисунке 11 представлена диаграмма последовательностей, содержащая рефлексивные сообщения.
Рис. 11. Диаграмма последовательностей с рефлексивными сообщениями.