Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шаврин С.М. Моделирование и проектирование ИС.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.47 Mб
Скачать

Диаграмма сотрудничества

На диаграммах сотрудничества выделяют два аспекта – это сотрудничество и взаимодействие. Определим эти понятия.

Определение. Сотрудничество – это состав объектов взаимодействия и связи между ними.

Определение. Взаимодействие – это последовательность сообщений, которыми обмениваются объекты взаимодействия.

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

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

Рис. 74. Пример неименованного и именованного объекта

В ходе взаимодействия объекты могут создаваться и уничтожаться. Созданные объекты помечаются как {new}, уничтоженные – {deleted}, а созданные и затем уничтоженные (временные) – {transient} (рис. 75).

Рис. 75. Пометка созданного объекта

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

Рис. 76. Пример связи

Допускается использование агрегации и ролей (рис. 77).

Для моделирования внешней среды используются акторы (рис. 78).

Рис. 77. Использование ролей и агрегации

Рис. 78. Моделирование внешней среды

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

Рис. 79. Отправка сообщений

Каждое сообщение имеет метку, которая включает как минимум имя сообщения и круглые скобки. Полный формат метки сообщения имеет следующий вид:

<Предшественники> / <Номер> [<Условие>]: <Переменная> := <Имя> ( <Аргументы> )

Предшественники – это список номеров сообщений, обработка которых должна завершиться прежде, чем данное сообщение может быть послано. Если у сообщения есть предшественники, то после них ставится слэш. В примере на рис. 80 четыре класса обмениваются асинхронными сообщениями. Суть данного взаимодействия может сводиться, например, к следующему. По запросу пользователя объект класса А опрашивает состояние удаленных объектов б1 и б2, после чего результаты опроса сообщает объекту класса В. Соответственно, сообщение 3 может быть отправлено только после того, как объект класса А получит сообщения 1.1 и 1.2.

Рис. 80. Пример обмена асинхронными сообщениями

Номер сообщения определяет его положение в цепочке сообщений. Нумерация бывает плоской и иерархической. При плоской нумерации с каждым сообщением связывается натуральное число, определяющее абсолютный порядковый номер сообщения. Однако такую нумерацию неудобно использовать в случае с асинхронными сообщениями, т.к. в этом случае определить абсолютный порядковый номер бывает невозможно. В связи с этим на практике применяется иерархическая нумерация, при которой сообщению присваивается относительный номер «внутри» родительского сообщения – сообщения, в ходе обработки которого было сгенерировано данное. Например, сообщение сообщ_5 на рис. 80 было сгенерировано в ответ на сообщение сообщ_4 с номером 2 и, следовательно, имеет номер 2.1.

Для отображения параллельных сообщений к номеру сообщения дописывается буква, например, 3.1а и 3.1б. Это означает, что порядок отправки сообщений неважен (т.е. при наличии возможности их можно отсылать одновременно). Например, для сообщений сообщ_2 и сообщ_4 на рис. 80 порядок их отправки не важен, и диаграмму можно нарисовать так, как показано на рис. 81.

Рис. 81. Параллельные сообщения

Условие, как и на диаграммах последовательностей, определяет условие посылки сообщения, или итерацию, например, [продажа не создана] или *[для всех товарных позиций]. При помощи условий и параллельных сообщений можно организовать взаимоисключающие сообщения, например, 1a [условие] и 1б [not условие].

Переменная – это имя переменной, куда помещается результат обработки сообщения, например:

тп := найтиТоварнуюПозицию(код)

Этот идентификатор может быть использован в качестве аргументов других сообщений или в условиях.

Имя – это имя сообщения. Требования к именованию сообщений такие же, как и для диаграммы последовательностей. В UML выделяется два стандартных сообщения Create и Destroy, которые отвечают за создание и уничтожение объектов соответственно.

Аргументы – это список параметров сообщения, заключенный в круглые скобки. Если сообщение не имеет параметров, то пишутся пустые скобочки.