Лекция: Диаграммы взаимодействий
На диаграммах взаимодействий отражаются множество объектов и отношения между ними, включая сообщения, которыми они обмениваются. К диаграммам взаимодействий относятся диаграммы последовательностей и диаграммы кооперации.
На диаграммах последовательностей внимание акцентируется прежде всего на временной упорядоченности сообщений. Преимущество диаграммы последовательностей в том, что на ней легче читается порядок посылки сообщений.
Диаграмма последовательностей внешне напоминает таблицу (рис. 6.18–6.19). Изображения объектов на диаграмме последовательностей помещают в верхней ее строке. Обычно инициирующий взаимодействие объект размещается слева, а остальные правее (тем дальше, чем более подчиненным является объект).
Отправления сообщений (вызовы операций) показываются горизонтальными стрелками. Линия, обозначающая посылку сообщения, проводится от вертикали клиента к вертикали сервера. Первое сообщение показывается на самом высоком уровне, второе – ниже и т.д. Возвращаемое значение можно показать пунктирной стрелкой от сервера к клиенту.
Вызов операции обозначается ее именем, кроме того, здесь могут быть приведены возвращаемое значение и фактические параметры, подходящие к сигнатуре операции:
N ( ) – только имя операции;
r := N (a, c) – возвращаемое значение (r), имя и фактические параметры операции – a и c.
Пример. Диаграмма последовательностей приведена на рис. 6.18. На диаграмме отражено сотрудничество трех объектов. Сценарий начинается с вызова объектом А операции f1 над объектом В. Это порождает вызов объектом В операции f2 над объектом С, что потребует вызова объектом С операции f3 над собой. Когда эта операция будет выполнена, объект В возвратит значение r объекту А, который затем вызывает операцию f4 над объектом С.
Рис. 6.18. Диаграмма последовательностей Рис. 6.19. Расширенная диаграмма
последовательностей
Диаграммы последовательностей характеризуются двумя особенностями, отличающими их от диаграмм коопераций.
Во-первых, на них показана линия жизни объекта. Это вертикальная пунктирная линия, отражающая существование объекта во времени. Большая часть объектов, представленных на диаграмме взаимодействий, существует на протяжении всего взаимодействия, поэтому их изображают в верхней части диаграммы, а их линии жизни прорисованы сверху до низу. Объекты могут создаваться и во время взаимодействий. Линии жизни таких объектов начинаются с получения сообщения со стереотипом «create». Объекты могут также уничтожаться во время взаимодействий; в таком случае их линии жизни заканчиваются получением сообщения со стереотипом «destroy», а в качестве визуального образа используется большая буква Х.
Во-вторых, на этих диаграммам может быть изображен фокус управления. Он изображается в виде вытянутого прямоугольника, показывающего промежуток времени, в течение которого объект выполняет какое-либо действие, непосредственно или с помощью подчиненной процедуры (рис. 6.19). Верхняя грань прямоугольника выравнивается по временной оси с моментом начала действия, нижняя – с моментом его завершения. Вложенность фокуса управления, вызванную рекурсией (т.е. обращением к собственной операции) или обратным вызовом со стороны другого объекта, можно показать, расположив другой фокус управления чуть правее своего родителя.
Рис. 6.19 показан пример, аналогичный предыдущему, в котором, однако, объект В создается и уничтожается во время взаимодействия.
Диаграмма кооперации акцентирует внимание на структурной организации объектов, принимающих и отправляющих сообщения.
На диаграмме изображаются объекты и связи между ними, как на диаграмме объектов. Рядом с соответствующей связью на диаграмме можно записать набор сообщений. Каждое сообщение состоит из следующих трех элементов:
– направление вызова;
– вызов операции;
– порядковый номер.
Направление сообщения показывается стрелкой, указывающей на объект-сервер.
Вызов операции обозначается с использованием того же самого синтаксиса, что и на диаграмме кооперации.
Порядковый номер показывает относительный порядок посылки сообщений. Сообщение с меньшим порядковым номером посылается до сообщения с большим номером. Нумерация начинается с единицы и добавляется как префикс к вызову операции. Для отображения вложенных сообщений используется следующая нотация: 1 – первое сообщение; 1.1 – первое сообщение, вложенное в сообщение 1; 1.2 – второе сообщение, вложенное в сообщение 1, и т.д.
Для описания связи одного объекта с другим к дальней концевой точке этой связи можно присоединить один из следующих стереотипов пути:
«association» – соответствующий объект видим для ассоциации;
«self» – соответствующий объект видим, потому что является диспетчером для операции (обозначение связи объекта с самим собой);
«global» – соответствующий объект видим, т.к. находится в объемлющей области видимости;
«local» – соответствующий объект видим, поскольку находится в локальной области действия операции;
«parameter» – соответствующий объект видим, т.к. является параметром операции.
Пример. Диаграмма кооперации, соответствующая диаграмме взаимодействий с рис. 6.19, показана на рис. 6.20. Дополнительная информация на диаграмме отражает тот факт, что объект С является глобальным по отношению к остальным объектам.
Рис. 6.20. Диаграмма кооперации
Чаще всего приходится моделировать неветвящиеся последовательные потоки управления. Однако можно моделировать и более сложные потоки, содержащие итерации и ветвления.
Итерация представляет собой повторяющуюся последовательность сообщений. Ее изображение приведено на рис. 6.21: перед номером сообщения в последовательности ставится выражение итерации, например *[i := 1… n] (или просто *, если надо обозначить итерацию без дальнейшей детализации). Итерация показывает, что сообщение (и все вложенные в него сообщения) будет повторяться в соответствии со значением заданного выражения.
Рис. 6.21. Итерации Рис. 6.22. Условие
Условие представляет собой сообщение, выполнение которого зависит от результатов вычисления некоторого булевского выражения. Для моделирования условия перед порядковым номером сообщения ставится выражение, например [х>0] (рис. 6.22). У всех альтернативных ветвей будет один и тот же порядковый номер, но условия на каждой ветви должны быть заданы так, чтобы два из них не выполнялись одновременно (не перекрывались).