Диаграммы взаимодействия

Взаимодействия между объектами в системе представляются диаграммами взаимодействия (interaction diagrams). Диаграммы взаимодействия подразделяются на два основных типа диаграмм: диаграммы последовательности (sequence diagrams) и кооперативные диаграммы (collaboration diagrams).

Диаграммы последовательности имеют две размерности: обычно по вертикали представлено время, по горизонтали - различные объекты. Оси координат могут меняться местами, ось времени может располагаться горизонтально, слева направо, а список объектов - вертикально.

Объект на диаграмме изображается в виде прямоугольника на вершине вертикальной пунктирной линии, называемой линией жизни объекта (lifeline). Она представляет собой фрагмент жизненного цикла объекта в процессе взаимодействия. Если объект создается или уничтожается на отрезке времени, представленном на диаграмме, то его линия жизни начинается и заканчивается в соответствующих точках, в противном случае линия жизни объекта проводится от начала до конца диаграммы.

Символ объекта рисуется в начале его линии жизни; если объект создается не в начале диаграммы, то сообщение о создании объекта рисуется со стрелкой, проведенной к символу объекта. Если объект уничтожается не в конце диаграммы, то момент его уничтожения помечается большим крестиком «´». Линия жизни может разветвляться на две (и более) параллельные линии, показанные условно. Каждая ответвляющаяся линия соответствует переходу в потоке сообщений. Линии жизни могут объединяться в некоторой последующей отметке.

Для того чтобы проиллюстрировать данный вид диаграмм, обратимся к примеру. Пусть ученик сдает экзамен на вождение. Трасса ученику не подбирается, и он едет по неизведанной трассе. Если на протяжении отрезка времени Т ученик получит не более двух сигналов тревоги, то экзамен сдан. Если между сигналами проходит отрезок времени больше Т/2, то предыдущий сигнал аннулируется. Построим диаграмму последовательности для одной из ситуаций, когда экзамен не сдан (см. рис. 9.17).

 

Рис. 9.17

 

Сообщения (message) связывают на диаграмме последовательности объекты между собой и передают информацию о выполняемом действии. Сообщение представляется на диаграмме сплошной линией со стрелкой на конце, проведенной от линии жизни одного объекта к линии жизни другого объекта. Возможна посылка сообщения объектом самому себе - самоделегирование. В этом случае линия может начинаться и заканчиваться около символа объекта. Линия помечается именем сообщения (операция или сигнал) и значениями его аргументов. Сообщения могут быть помечены условием перехода, которое располагается в квадратных скобках.

Сообщения могуг быть следующих типов:

- асинхронные сообщения рисуются линией с половинкой стрелки на конце. Они не блокируют работу вызывающего объекта, и он может продолжать свой собственный процесс. Асинхронные сообщения можно использовать для создания нового объекта или для установления связи с уже выполняемой ветвью процесса;

- вызов процедуры рисуется как заполненная стрелка. Возвращение из процедуры подразумевается неявно и на диаграмме обычно не отображается. Оно обозначается явно в том случае, если это необходимо для большей ясности и представляется меткой (короткая поперечная линия), расположенной около адресата возврата.

Обычно стрелка с сообщением рисуется горизонтально. Это симнолизирует, что сообщение передается мгновенно и ничего не может произойти в момент передачи. Если на передачу сообщения необходимо какое-то время, в течение которого может что-нибудь произойти (например, посылка сообщения в противоположном направлении), то линия со стрелкой может быть ломаной (конец стрелки располагается ниже ее начала).

Объединенный набор сообщений может быть маркирован как итерация (ineration). Маркером итерации служит символ «*». Для сценария итерация указывает, что множество сообщений может передаваться многократно. Для процедуры условие продолжения итерации может указываться в конце итерации. Возможны случаи, когда часть сообщений является частью итерации, а остальные сообщения могут быть вьшолнены только однократно.

Переходы (transition) рисуются как многократные стрелки, проведенные в одну точку, помеченные условием перехода. Переход может быть именован. Имя представляет собой время посылки сообщения (например: А). В случае, когда передача сообщения происходит не мгновенно, время получения отмечается именем с апострофом (например: А’). Имя может быть проставлено слева от стрелки. Имя может быть использовано для выражения, ограничивающего время посылки сообщений. Ограничения помещаются в фигурных скобках.

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

Активация представляется на диаграмме длинным тонким прямоугольником, верхняя часть которого выравнивается с моментом, когда метод данного объекта становится активным, а нижняя часть ‑ с моментом завершения работы данного метода. Выполняемое действие может быть помечено текстом справа от символа активации (или слева, в зависимости от стиля), поочередно входящие сообщения указывают действия, которые выполняются в данном методе. В потоке управления процедуры верхняя часть символа активации предупреждает о входящем сообщении (которое инициирует действие), а нижняя часть является началом посылки возвращаемого сообщения.

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

Кооперативные диаграммы (collaboration diagrams) предоставляют возможность пространственно располагать объект. На кооперативных диаграммах экземпляры объектов показываются в виде пиктограмм и отображаются лишь объекты, прямо или косвенно участвующие в выполнении данного варианта использования. Линии со стрелкой на конце обозначают сообщения, обмен которыми осуществляется в рамках данного варианта использования. Их временная последовательность указывается путем нумерации сообщений.

Линия со стрелкой проводится около линии, соединяющей объекты, и указывает в направлении объекта, которому посылается сообщение. Для пометки различных сообщений могут использоваться следующие типы стрелок:

- линия с заполненной стрелкой обозначает вызов процедуры и может использоваться также между параллельно работающими активными объектами для посылки сигналов и ожиданий;

- линия с половинкой стрелки используется для явного указания на асинхронный обмен сообщениями между двумя объектами;

- другие разновидности могут представлять разновидности управления, например, «balking» или «timeout», но они обычно воспринимаются как дополнительные возможности UML.

Сообщения на кооперативной диаграмме помечаются номерами. Нумерация сообщений делает восприятие их последовательности более трудным, чем в случае расположения линий на странице сверху вниз. Принято применять вложенную систему нумерации, т.к. это позволяет понять, какая операция что вызывает.

Внутренние сообщения о выполнении операции нумеруются, начиная с единицы. В последовательности сообщений между объектами в параллельных процессах нумерация сообщений относится к одному уровню (нет вложенности).

На кооперативной диаграмме сообщение можно снабдить такой же управляющей информацией, что и на диаграмме последовательности.

Пиктограмма объекта на кооперативной диаграмме помечается строкой имени, имеющей вид:

<ИмяОбъекта : ИмяКласса>,

где ИмяОбъекта, либо ИмяКласса могут отсутствовать. Если имя объекта отсутствует, то перед именем класса сохраняется двоеточие. Вызов взаимодействия на диаграмме может быть представлен символом действующего лица.

Так как в описанном ранее примере о сдаче учеником экзамена важна не только временная последовательность событий, но и отрезки времени между ними, то в данной задаче нет необходимости использовать кооперативную диаграмму. Поэтому проиллюстрируем данный вид диаграммы на следующей последовательности действий: ученику подается команда «Старт», команда передается системе управления и начинается движение.

Если происходит какая-либо тревожная ситуация (удар о потолок или избыточная тряска), то датчик сигнализирует об этом системе управления машины ученика, а также преподавателям, принимающим экзамен.

Система управления обязана на это отреагировать уменьшением скорости, а преподаватели ‑ фиксацией ошибки ученика.

Диаграмма, иллюстрирующая данный пример, представлена на рис. 9.18.

 

Рис. 9.18