Collaboration diagram Диаграмма кооперации -- это диаграмма взаимодействия, в которой основной акцент сделан на структурной организации объектов, посылающих и получающих сообщения для того, чтобы достичь нужной цели или реализовать некоторый вариант использования. В отличие от диаграмм последовательности, на диаграмме кооперации изображаются только отношения между объектами, которые играют определённые роли во взаимодействии. На этой диаграмме не указывается время в виде отдельного измерения, поэтому последовательность действий и параллельных потоков может быть определена с помощью порядкового номера. Если необходимо явно специфицировать взаимодействие между объектами в реальном времени, то лучше делать это на диаграмме последовательности. Элементы диаграммы: Кооперация -- спецификация множества объектов отдельных классов, совместно взаимодействующих с целью реализации отдельных вариантов использования с целью реализации отдельных вариантов использования в общем контексте моделируемой системы. Кооперация может быть представлена на двух уровнях: 1) на уровне спецификации: показывает роли классификаторов и роли ассоциаций в рассматриваемом взаимодействии. Диаграмма кооперации уровня спецификцации показывает роли, которые играют участвующие во взаимодействии элементы; элементами кооперации на этом уровне являются классы и ассоциации, которые обозначают отдельные роли классификаторов ассоциации между участниками кооперации; 2) уровень примеров: указывает экземпляры и связи, обозначающие отдельные роли в кооперации; на данном уровне показываются только релевантные объекты, т. е. имеющие непосредственное отношение к реализации операции и классификатора. В кооперации уровня примеров определяются свойства, которые должны иметь экземпляры для того, чтобы участвовать в кооперации. Кроме свойства объектов на диаграмме кооперации, также указываются ассоциации, которые должны иметь место между объектами кооперации, при этом не обязательно изображать все свойства и операции. В зависимости от рассматриваемых операций могут изменяться как свойства объектов, так и связи между ними. Именно это отличает диаграмму кооперации от диаграммы классов. Объекты -- сущности с хорошо определёнными границами и индивидуальностью, которые инкапсулируют состояние и поведение. В контексте языка UML любой объект является экземпляром класса. На диаграмме кооперации полное имя объекта представляет собой структуру текста, разделяемую двоеточием и записанную в форме: <собственное имя объекта>'/'<Имя роли класса>:<Имя класса> Имя роли класса указывается в том случае, когда соответствующий класс отсутствует в модели или разработчику необходимо акцентировать внимание на особенности его использования в рассматриваемом контексте моделирования взаимодействия. Имя класса -- это имя одного из классов, представленного на диаграмме классов. Если указано собственное имя объекта, то оно должно начинаться со строчной буквы. Имя объекта, косая черта и имя роли класса могут отсутствовать. Анонимный объект -- это объект, у которого отсутствует собственное имя, однако в этом случае обязательно ставить двоеточие перед именем соответствующего класса. Сирота -- это объект, у которого отсутствует имя класса. +---------------+ +--------------+ +------------------+ |_01.окружность_| |_:Прямоугольн.| |_С/Обработчик зап:| +---------------+ +--------------+ | Сервер_| +---------------+ +------------------+ |центр=(20,20) | +--------------+ +---------------------+ |радиус=15 | |Менеджер | |_Клиент/Инициат.зап._| +---------------+ +--------------+ +---------------------+ +--------------+ |_/Обраб. запр:| | Сервер_| +--------------+ В контексте языка UML все объекты делятся на две категории: пассивные и активные. Пассивный объект оперирует только данными и не может инициировать деятельность по управлению другими объектами, но может посылать сигналы в процессе выполнения запросов, которые он обрабатывает. Активные объекты имеют собственный процесс управления и могут имитировать деятельность по управлению другими объектами. Активный объект на диаграмме кооперации обозначается прямоугольником с утолщёнными границами. Каждый активный объект является владельцем определённого процесса управления. Например, активный объект (клиент) является инициатором объекта "счёт". +----------+ +----------+| |Мультиобъект представляет собой множество анонимных объектов, которые могут быть образованы на основе одного класса. | |+ На диаграмме классов мультиобъект используется для того, чтобы показать операции и сигналы, которые адресованы всему множеству анонимных объектов. +----------+ Мультиобъект изображается двумя прямоугольниками. Рассмотрим пример с отправкой сообщения клиенту из редактора электронной почты. +---------+ +================+1:адрес=выбрать() -> +---------+| |_:РедакторEmail_+---------------------+_:Клиент_|+ +================+ +---------+ <...> Составной объект (Composite object) предназначен для представления объекта, имеющего собственную структуру и нити управления. Составной объект является экземпляром класса-композита, который связан отношением композиции со своими частями. Аналогичные отношения связывают между собой и соответстввующие объекты. На диаграммах кооперации такой объект изображают как обычный объект из двух секций: в верхней записывается название объекта, а в нижней вместо атрибутов -- его составные объекты. Связь -- это любое семантическое отношение между любой совокупностью объектов. Связи не имеют собственных имён, т. е. связи на диаграмме кооперации могут быть только анонимными и записываются без двоеточия перед именем ассоциации. Для связи не указывается также кратность. Связь может иметь некоторые стереотипы, которые записываются рядом с одним из её концов и указывают на реализацию данной связи: association -- предполагается по умолчанию, поэтому этот стереотип можно не указывать parameter -- соответствущий объект может быть только параметром некоторого метода local -- локальная переменная метода, её область видимости ограничена только соседним объектом global -- её область видимости распространяется на всю диаграмму кооперации self -- рефлексная связь объекта с самим собой, допускающая передачу объектом сообщений самому себе +-----------+ |_l:Компания| +-----+-----+ | |<>подразделение +----|--------+ +-----+-------+| |_:Департамент|+ +------+------+ |<><...> Сообщение -- это спецификация передачи информации от одного элемента модели к другому с ожиданием выполнения определённых действий со стороны принимающего элемента. Именно сообщение является причиной или стимулом для выполнения операции. Связь обеспечивает канал для направления передачи сообщения между объектом-источником и объектом-получателем. Стереотипы сообщений аналогичны стереотипам в диаграмме кооперации. -> -> +-+ +-+ 2: Тон сигн. | | | |6:звонить() +==========+===+ -> +----=====----+ +================+ |_c:Тел. аппар.+------------+_:Коммутатор_|5[номер поливоз A bb): -> |_d:Телефон. ап._| +==============+4:НаборНомер+-------------+-----------------------------+================+ |^1:ПоднятьТруб() |{persistent} | | ||3:*[i=1..n]: +-----+-------+ |^7:поднятьТрубку() <>| наборЦифра(i) 8:создать()| ^9(подтв() || 9 | 10б | . 10а 9----------------------+<> _a:Абонент_---------------------+ | . +---------- _b:Абонент_ +-----+-----+ |_:Разговор_| |{transient}| +-----------+