![Самоучитель UML pict_109.jpeg](https://litlife.club/books/133827/read/images/pict_109.jpeg)
Рис. 9.3. Способы представления кооперации, которая реализует операцию класса
Во-вторых, можно просто изобразить символ кооперации, внутри которого указать всю необходимую информацию, записанную по определенным правилам (рис. 9.3, б). Эти правила определяют формат записи имени кооперации, после которого записывают двоеточие и имя класса. За именем класса следует двойное двоеточие и имя операции.
Подобное общее представление кооперации на уровне спецификации используется на начальных этапах проектирования. В последующем каждая из коопераций подлежит детализации на уровне примеров, на котором раскрывается содержание и структура взаимосвязей ее элементов на отдельной диаграмме кооперации. При этом в качестве элементов диаграммы кооперации выступают объекты и связи, дополненные сообщениями. Именно эти элементы являются предметом дальнейшего рассмотрения в настоящей главе.
9.2. Объекты
Отдельные аспекты спецификации объектов как элементов диаграмм уже рассматривались ранее при описании диаграмм классов (см. главу 5) и последовательности (см. главу 8). Сейчас мы более подробно остановимся на особенностях их семантики и графической нотации, поскольку объекты являются основными элементами или графическими примитивами, из которых строится диаграмма кооперации на уровне примеров. Для графического изображения объектов используется такой же символ прямоугольника, что и для классов.
Как отмечалось выше, объект (object) является отдельным экземпляром класса, который создается на этапе выполнения программы. Он может иметь свое собственное имя и конкретные значения атрибутов. Применительно к объектам формат строки классификатора дополняется именем объекта и приобретает следующий вид (при этом вся запись подчеркивается):
<Имя объекта>'/' <Имя роли классификатора> ':' <Имя классификатора>
[':' <Имя классификатора >]*
Здесь Имя роли классификатора может не указываться. В этом случае оно исключается из строки текста вместе с последующим двоеточием. Имя роли может быть опущено в том случае, если существует только одна роль в кооперации, которую могут играть объекты, созданные на базе этого класса.
Таким образом, для обозначения роли классификатора достаточно указать либо имя класса (вместе с двоеточием), либо имя роли (вместе с наклонной чертой). В противном случае прямоугольник будет соответствовать обычному классу. Если роль, которую должен играть объект, наследуется от нескольких классов, то все они должны быть указаны явно и разделяться запятой и двоеточием.
Ниже приводятся возможные варианты записи строки текста в прямоугольнике объекта.
: С – анонимный объект, образуемый на основе класса С.
/ R – анонимный объект, играющий роль R.
/ R : С – анонимный объект, образуемый на основе класса С и играющий роль R.
О / R – объект с именем О, играющий роль R.
О : С – объект с именем О, образуемый на основе класса С.
О / R : С – объект с именем О, образуемый на основе класса С и играющий роль R.
О или – объект с именем О.
О : – «объект-сирота» с именем О.
/ R – роль с именем R
: С – анонимная роль на базе класса С.
/ R : С – роль с именем R на основе класса С.
Отдельные примеры изображения объектов и классов на диаграмме кооперации приводятся на следующем рисунке (рис. 9.4).
![Самоучитель UML pict_110.jpeg](https://litlife.club/books/133827/read/images/pict_110.jpeg)
Рис. 9.4. Примеры различных вариантов записи имен объектов, ролей и классов на диаграммах кооперации
Так, в первом случае (рис. 9.4, а) обозначен объект с именем «клиент», играющий роль «инициатор запроса». Далее (рис. 9.4, б) следует обозначение анонимного объекта, который играет роль инициатора запроса. В обоих случаях не указан класс, на основе которого будут созданы эти объекты. Обозначение класса присутствует в следующем варианте записи (рис. 9.4, в), причем объект также анонимный.
Применительно к уровню спецификации на диаграммах кооперации могут присутствовать именованные классы с указанием роли класса в кооперации (рис. 9.4, г) или анонимные классы, когда указывается только его роль (рис. 9.4, д). Последний случай характерен для ситуации, когда в модели могут присутствовать несколько классов с именем «Клиент», поэтому требуется явно указать имя соответствующего пакета База данных (рис. 9.4, е).
Мультиобъект
Мультиобъект (multiobject) представляет собой целое множество объектов на одном из концов ассоциации. На диаграмме кооперации Мультиобъект используется для того, чтобы показать операции и сигналы, которые адресованы всему множеству объектов, а не только одному. Мультиобъект изображается двумя прямоугольниками, один из которых выступает из-за верхней правой вершины другого (рис. 9.5, а). При этом стрелка сообщения относится ко всему множеству объектов, которые обозначают данный мульти-объект. На диаграмме кооперации может быть явно указано отношение композиции между мультиобъектом и отдельным объектом из его множества (рис. 9.5, б).
![Самоучитель UML pict_111.jpeg](https://litlife.club/books/133827/read/images/pict_111.jpeg)
Рис. 9.5. Графическое изображение мультиобъектов на диаграмме кооперации
Активный объект
В контексте языка UML все объекты делятся на две категории: пассивные и активные. Пассивный объект оперирует только данными и не может инициировать деятельность по управлению другими объектами. Однако пассивные объекты могут посылать сигналы в процессе выполнения запросов, которые они получают.
Активный объект (active object) имеет свою собственную нить (thread) управления и может инициировать деятельность по управлению другими объектами. При этом под нитью понимается некоторый облегченный поток управления, который может выполняться параллельно с другими вычислительными нитями или нитями управления в пределах одного вычислительного процесса или процесса управления.
Активные объекты на канонических диаграммах обозначаются прямоугольником с более широкими границами (рис. 9.6). Иногда может быть явно указано ключевое слово (помеченное значение) {active}, чтобы выделить активный объект на диаграмме. Каждый активный объект может инициировать единственную нить или процесс управления и представлять исходную точку потока управления. В приведенном фрагменте диаграммы кооперации активный объект «а: Вызывающий абонент» является инициатором процесса установления соединения для обмена информацией с другим абонентом (на диаграмме не показан).
![Самоучитель UML pict_112.jpeg](https://litlife.club/books/133827/read/images/pict_112.jpeg)
Рис. 9.6. Графическое изображение активного объекта (слева) на диаграмме кооперации
В следующем примере рассматривается ситуация с вызовом функции печати из текстового редактора (рис. 9.7). Анонимный активный объект «Текстовый редактор» вначале посылает сообщение анонимному мультиобъекту «Принтер», которое инициирует выбор единственного объекта «Принтер», возможно, удовлетворяющего некоторым дополнительным условиям. После этого выбранному объекту посылается сообщение о необходимости напечатать документ, загруженный в текстовый редактор.
![Самоучитель UML pict_113.jpeg](https://litlife.club/books/133827/read/images/pict_113.jpeg)
Рис. 9.7. Фрагмент диаграммы кооперации для вызова функции печати из текстового редактора
Примечание 66
В прямоугольнике объекта имя объекта, имя роли с символом Т или имя класса могут отсутствовать. Однако двоеточие всегда должно стоять перед именем класса, а косая черточка – перед именем роли. Следует еще раз акцентировать внимание на том обстоятельстве, что применительно к объектам вся запись должна быть подчеркнута, а имя объекта должно быть записано со строчной буквы.
Примечание 67
Отличие между процессом и нитью заключается в степени использования ресурсов. Говоря о процессе, имеют в виду ресурсоемкий поток управления, т. е. процесс полностью монополизирует ресурсы системы. Нить может использовать лишь небольшую часть ресурсов системы. Примером может служить выполнение некоторой программы в своем адресном пространстве или в фоновом режиме.