Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Краткие теоретические сведения. Диаграмма кооперации (collaboration diagram) предназначена для описания по­ведения системы на уровне отдель­ных объектов






 

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

Кооперация (collaboration) — спецификация множества объектов отдельных классов, сов­местно взаимодействующих с целью реализации отдельных вариантов использования в общем контексте моделируемой системы.

Кооперация определяет структуру поведения си­стемы в терминах взаимодей­ствия участников этой кооперации.

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

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

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

Для диаграмм кооперации имя объекта – строка текста, разделенная двоеточием: < собственное имя объекта> '/'< Имя роли класса>: < Имя класса>.

Имя роли класса указывается в том случае, когда соответствующий класс отсут­ствует в мо­дели. Имя класса – это имя одного из клас­сов, представленного на диа­грамме классов.

Если указано собственное имя объекта, то оно должно начинаться со строчной буквы. Имя объекта, имя роли с символом " /" или имя класса могут отсутствовать, но ": " всегда должно стоять перед именем класса, а " /" – перед именем роли.

Следующие варианты воз­можных записей полного имени объекта:

- о: C – объект с собственным именем о, экземпляр класса С.

-: C – анонимный объект, экземпляр класса С.

- о: (или о) – объект-сирота с собственным именем о.

- о / R: C – объект с собственным именем о, экземпляр класса С, играющий роль R.

- / R: C – анонимный объект, экземпляр класса С, играющий роль R.

- о / R – объект-сирота с собственным именем о, играющий роль R.

- / R –анонимный объект и одновременно объект-сирота, играющий роль R.

 


Рис. 27. Примеры графических изображений объектов на диаграммах кооперации

 

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

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

Активный объект имеет собственный процесс управления и может иницииро­вать деятельность по управлению другими объектами.

Активный объект на диаграмме кооперации обозначается прямоугольником с утолщен­ными границами (рис. 28). Каждый активный объект является владельцем определенного про­цесса управления.

Пример: активный объект «а: Клиент» явля­ется инициатором открытия счета, который представлен анонимным объектом «: Счет».

 

Рис. 28. Графическое изображение активного объекта (слева) на диаграмме коопе­рации

 

Мультиобъект (multiobject) представляет собой множество анонимных объек­тов, которые могут быть образованы на основе одного класса. На диаграмме коопе­рации мультиобъект используется для того, чтобы показать операции и сигналы, которые адресованы всему множеству анонимных объектов. Мультиобъект изобра­жается двумя прямоугольниками, один из которых выступает из-за верхней правой вершины другого (рис. 29, а). При этом стрелка взаимосвязи относится ко всему множеству объектов, которые обо­значает данный мультиобъект. На диаграмме ко­операции может быть явно указано отношение аг­регации (композиции) между мультиобъектом и отдельным объектом из его множества (рис. 29, б).

 


Рис. 29. Графическое изображение мультиобъектов на диаграмме кооперации

 

Пример: ситуация с отправкой почтового сообщения кли­енту из редактора элек­тронной почты (рис. 30). Анонимный активный объект класса «: Редак­торEmail» вначале посылает сообщение анонимному мультиобъекту класса «Клиент». Это сообщение инициирует выбор единственного объекта класса «Клиент». После этого выбранному объекту посылается сообщение о необходимости отправить электрон­ное письмо.

 


Рис. 30. Фрагмент диаграммы кооперации для выбора адреса клиента для отправки электронного письма

 

Составной объект (composite object) или объект-композит предназначен для представления объекта, имеющего собственную структуру и внутренние потоки управления.

Составной объект является экземпляром класса-композита, который связан от­ношением композиции со своими частями. На диаграммах кооперации составной объект изображается как обычный объект, состоящий из двух секций: верхней и нижней. В верхней секции записывается имя состав­ного объекта, а в нижней – его объекты-части вместо списка атрибутов (рис. 31).

 


Рис. 31. Графическое изображение составного объекта на диаграмме кооперации

 

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

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

Связь (link) — любое семантическое отношение между некоторой совокупно­стью объектов.

Бинарная связь изображается отрезком сплошной линии, соединяющей два пря­моугольника объектов, на концах линии можно указать имена ролей.

Связи на диаграмме кооперации могут быть только анонимными и при необхо­димости записываются без двоеточия перед именем ассоциации. Имена связей и крат­ность концевых точек, как правило, на диаграммах кооперации не указываются. Обозначения агрегации и композиции могут присутствовать на отдельных концах связей.

Пример: обобщенная схема компании с именем «с», которая состоит из депар­таментов (анонимный мульти­объект класса «Департамент»). В последние входят «Сотрудники». Рефлексивная связь указывает на то, что руководитель департамента является одно­временно и его сотрудником.

 


Рис. 32 Графическое изображение связей с различными стереотипами

 

Связь может иметь некоторые стереотипы:

- «association» – ассоциация (предполагается по умолчанию, поэтому может не указываться);

- «parameter» – соответствующий объект может быть только параметром ме­тода;

- «local» – область видимости переменной ограничена только соседним объек­том;

- «global» – область видимости переменной распространяется на всю диа­грамму кооперации;

- «self» – рефлексивная связь объекта с самим собой, которая допускает пере­дачу объектом сообщения самому себе.

Каждое взаимодействие описывается совокупностью сообщений, которыми участвующие в нем объекты обмениваются между собой.

Сообщение (message) — спецификация передачи информации от одного эле­мента модели к другому с ожиданием выполнения определенных действий со сто­роны принимающего элемента.

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

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

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

 


Рис. 33. Графическое изображение различных типов сообщений на диаграмме кооперации

 

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

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

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

Каждое сообщение может быть помечено строкой текста, которая имеет следу­ющий фор­мат:

< Предшествующие сообщения> < Выражение последовательности> < Возвращаемое значе­ние: = имя сообщения> (Список аргументов)

Предшествующие сообщения — это разделенные запятыми номера сообщений, записанные перед наклонной чертой: < Номер сообщения', '> * < '/'>. Если список но­меров сообщений пуст, то вся запись, включая наклонную черту, опускается. Если номера сообщений указываются, то они должны соответствовать номерам других сообщений на этой же диаграмме кооперации. Смысл указания предшествующих сообщений заключается в том, что данное сообщение не может быть передано, пока не будут переданы своим адресатам все сообщения, номера которых записаны в данном списке.

Выражение последовательности — это разделенный точками список отдель­ных термов по­следовательностей, после которого записывается двоеточие: < Терм последовательности'.'…> ': '

Каждый из термов представляет отдельный уровень процедурной вложенности в форме за­конченной итерации. Наиболее верхний уровень соответствует самому левому терму последова­тельности. Если все потоки управления параллельные, то вложенность отсутствует. Каждый терм последовательности имеет следующий син­таксис: [Целое число | Имя] [Рекуррентность].

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

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

Рекуррентность используется для указания итеративного или условного харак­тера вы­полнения передачи сообщений. Семантика рекуррентности представляет ноль или больше со­общений, которые должны быть выполнены в зависимости от записанного условия. Возможны два варианта записи рекуррентности:

- '*''['Предложение-итерация']' для записи итеративного выполнения соответ­ствующего выражения. Итерация представляет последовательность сообщений од­ного уровня вложенности. Предложение-итерация может быть опущено, если коли­чество итераций никак не специфициру­ется. Наиболее часто предложение-итерация записывается на псевдокоде или языке программиро­вания. В языке UML формат записи этого предложения строгим образом не определен.

- '['Предложение-условие']' для записи ветвления. Эта форма записи специфици­рует усло­вие для данного сообщения, передача которого по данной ветви возможна только при его ис­тинности.

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

Предложение-условие записывается так же, как и итерация, но без звездочки. Это можно понимать как некоторую одношаговую итерацию. В общем случае пред­полагается, что специфи­цированная итерация выполняется последовательно. Если необходимо отметить возможность па­раллельного выполнения итерации, то для этой цели в языке UML используется символ " *||". Ите­рация не распространяется на вложенные уровни данного потока или нити. Каждый уровень дол­жен иметь соб­ственное представление для итеративного повторения процедурной последователь­ности.

Имя сообщения, записанное в сигнатуре после возвращаемого значения, озна­чает имя со­бытия, которое инициируется объектом-получателем сообщения после его приема. Наиболее часто таким событием является вызов операции у объекта-получателя. Это может быть реализовано раз­личными способами, один из которых – явное указание в качестве имени сообщения вызываемой операции. Тогда соответ­ствующая операция должна быть определена в том классе, которому при­надлежит объект-получатель.

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

В языке UML предусмотрены стандартные действия, выполняемые в ответ на получение соответствующего сообщения. Они могут быть явно указаны на диа­грамме кооперации в форме стереотипа перед именем сообщения, к которому они относятся, или выше его.

В языке UML определены следующие стереотипы сообщений:

- «call» (вызвать) – сообщение, требующее вызова операции или процедуры объ­екта-получателя. Если сообщение с этим стереотипом рефлексивное, то оно инициирует локаль­ный вызов операции у пославшего это сообщение объекта.

- «return» (возвратить) – сообщение, возвращающее значение выполненной опера­ции или процедуры вызвавшему ее объекту. Значение результата может ини­циировать ветвление потока управления.

- «create» (создать) – сообщение, требующее создания другого объекта для вы­полне­ния определенных действий. Созданный объект может стать активным (ему передается поток управления), а может остаться пассивным.

- «destroy» (уничтожить) – сообщение с явным требованием уничтожить соответ­ству­ющий объект. Посылается в том случае, когда необходимо прекратить нежелательные действия со стороны существующего в системе объекта, либо когда объект больше не нужен и должен освободить задействованные им системные ре­сурсы.

- «send» (послать) – обозначает посылку другому объекту сигнала, который асин­хронно инициируется одним объектом и принимается (перехватывается) дру­гим. Отличие сигнала от сообщения заключается в том, что сигнал должен быть явно описан в том классе, объект кото­рого инициирует его передачу.

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

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

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

Пример: Программное средство представляет среду для формирования отчетов по лекционному материалу. Пользователь может вводить свою информацию в от­четы, изменять параметры. После оформления отчетов пользователю предоставлена возможность сохранение отчета.

Рис. 34. Пример диаграммы кооперации






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.