Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции комп мод.doc
Скачиваний:
24
Добавлен:
23.08.2019
Размер:
3.01 Mб
Скачать

10.2. Представление взаимодействия

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

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

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

У кооперации есть слоты, которые во время выполнения программы заполняются объектами и связями. Такой слот называется ролью (role), поскольку определяет роль объекта или связи в этой кооперации. Роль классификатора — это описание объектов, которые могут принимать участие в данной кооперации. Роль в ассоциации — это описание связей, которые могут принимать участие в данной кооперации. Отношения между ролью классификатора и ролью в ассоциации имеют значение только в контексте данной кооперации. Между базовыми классификаторами и ассоциациями таких отношений может вообще не существовать.

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

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

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

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

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

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

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

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

Рис. 24. Диаграмма последовательности с активациями

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

Активным называется объект, которому принадлежит стек (stack) активаций (и вызовов операций). У каждого активного объекта есть свой собственный поток управления, который выполняется параллельно с другими активными объектами. Объекты, вызываемые активными объектами, называются пассивными. Они получают управление только на время вызова, а потом возвращают его.

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

Диаграмма кооперации. Диаграмма кооперации — это диаграмма классов, на которой изображаются не просто классификаторы и ассоциации, а роли классификатора и роли в ассоциации. Роли классификатора и роли в ассоциации описывают конфигурацию объектов и связей, которые могут образоваться при выполнении кооперации в реальной системе. Во время выполнения кооперации объекты привязаны к ролям классификатора, а связи — к ролям в ассоциации. Роли в ассоциации могут также исполнять различные виды временных связей, например аргументов или локальных переменных процедур. Символы связей могут содержать стереотипы, указывающие на их временность («parameter», «local») или на то, что объект вызывает сам себя («self»). На диаграммах кооперации представлены только те объекты, которые в ней участвуют. При этом в системе их может быть гораздо больше.

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

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

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

Каждое сообщение имеет

  • порядковый номер,

  • список предыдущих сообщений (необязательно),

  • сторожевое условие (необязательно),

  • имя,

  • список аргументов?

  • имя возвращаемого значения (необязательно).

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

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

Таблица № 10

Нотации сообщений

Вид сообщения

Описание

Нотация

Вызов процедуры (операции) или передача потока управления

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

Асинхронное сообщение в простом потоке управления

Клиент передает асинхронное сообщение и продолжает выполнять свою деятельность, не ожидая ответа

Возврат из вызова процедуры

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

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

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

Несколько символов, представляющих на диаграмме один и тот же изменяющийся объект, можно соединять с помощью потоков превращения. Поток превращения или метаморфоза — это переход объекта из одного состояния в другое. Изображается он в виде пунктирной стрелки, около которой указано имя стереотипа «become». Там же можно указывать и порядковый номер потока, по которому можно определить, когда он образован (см. рис. 26).

Рис 26. Метаморфоза

Несколько реже используется стереотип копирования, который указывает на то, что значение объекта получено путем копирования уже существующего объекта. В таблице № 11 перечислены типы отношений потоков.

Таблица № 11

Типы отношений потоков

Поток

Функция

Нотация

“become” (метаморфоза)

Изменение значений одного и того же объекта

“copy” (копирование)

Создание независимой копии существующего объекта

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

Образцы. Образец (pattern) — это параметризованная кооперация, представляющая собой множество параметризованных классификаторов, отношений и поведения, которое можно применять в различных ситуациях путем привязывания ролям образца элементов модели (обычно этими элементами являются классы). Таким образом, классы ролей выступают в качестве параметров кооперации. Обычно параметры задают слоты (slots) для классов. При использовании образца эти слоты привязываются к конкретным классам в рамках диаграммы классов или к ролям в более масштабных кооперациях

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

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

Так, на рис. 27 показан пример использования образца Наблюдатель. Как видно, класс Очередь_вызовов замещает в данном случае роль Субъект, a Всплывающая_полоса_прокрутки — роль Обработчик. Внутренняя структура кооперации, которая создается при связывании образца, как правило, не показывается.

Рис 27. Использование образца