Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по ТООМ.doc
Скачиваний:
298
Добавлен:
02.05.2014
Размер:
7.46 Mб
Скачать

4.3. Диаграмма последовательности действий. Диаграммы кооперации

Представление взаимодействия является более общим взглядом на объекты.

Введение

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

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

Взаимодействие

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

Взаимодействие (interaction) — это набор сообщений в структурированном классификаторе или кооперации, которыми обмениваются роли через соединители. Экземпляр взаимодействия соответствует экземпляру его контекста, где объекты играют роли, обмениваясь сообщениями через связи, функции которых выполняют соединители. Взаимодействие часто моделирует выполнение операции, элемента Use Case или другой поведенческой сущности.

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

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

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

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

Диаграмма последовательности

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

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

На рис. *** показана типичная диаграмма последовательности с асинхронными сообщениями.

Спецификация выполнения

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

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

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

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

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

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

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

Структурированные управляющие конструкции

Последовательный поток управления изображается как последовательность сообщений (именно поэтому рассматриваемая нами сейчас диаграмма называется диаграммой последовательности). Более сложные потоки управления можно изобразить с помощью комбинированных фрагментов. Комбинированный фрагмент (combine fragment) состоит из ключевого слова и одного или нескольких вложенных фрагментов (называемых операндами взаимодействия). Количество и значение вложенных фрагментов зависят от ключевого слова (рис. ***).

Использование взаимодействия (interaction use) — это ссылка на другое взаимодействие, которое обычно изображается на отдельной диаграмме последовательности. Оно отмечается ключевым словом ref.

Цикл (ключевое слово loop) имеет один вложенный фрагмент, который выполняется до тех пор, пока остается верным первое сторожевое условие данного вложенного фрагмента.

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

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

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

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

Выше (см. рис. 9.3) показана диаграмма последовательности, содержащая цикл с вложенным условным фрагментом.

Диаграмма коммуникации

В основе диаграммы коммуникации (communication diagram) лежит контекст, предоставляемый структурированным классификатором (в том числе кооперацией). Роли и соединители описывают конфигурации объектов и связей, которые могут возникнуть в экземпляре контекста. Когда создается экземпляр контекста, объектам назначаются роли, а связям - соединители. Соединители могут также обозначать различного рода временные связи, например аргументы или локальные переменные процедур. Моделируются только те объекты, которые присутствуют в данном контексте, хотя система как таковая может содержать и другие объекты. Иными словами, диаграмма коммуникации моделирует те объекты и связи, которые участвуют в реализации кооперации, и игнорирует все остальные.

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

На рис. ** изображена диаграмма коммуникации.

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

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

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

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

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

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

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

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

Диаграмма последовательности - 1

Диаграмма последовательности – 2

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

На рис.1.9 представлена диаграмма последовательности (временная диаграмма), которая демонстрирует поведение объектов во времени. Она показывает объекты и последовательность сообщений, посылаемых объектами. Диаграмма взаимодействий показывает последовательность сообщений, которые реализуют функционирование.

Диаграмма последовательности взаимодействия объектов.

2.4.1. Описание времени жизни объекта. 2.4.2. Несколько линий жизни объекта. 2.4.3. Сообщение-процедурый вызов и сообщение-событие. 2.4.4. Посылка объектом сообщения самому себе. Рекурсия. 2.4.5. Условная посылка сообщений. 2.4.6. Синхронизация работы объектов. 2.4.7. Указание временных интервалов. 2.4.8. Пример: обновление графа на диаграмме. 2.4.9. Пример: использование диаграммы при описании шаблона проектирования.