Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Унифицированный язык моделирования (Unified Mod...doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
1.06 Mб
Скачать

Активный объект

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

Семантика

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

Нотация

Роль активного объекта показывается как символ объекта с толстой рамкой. Часто роли активных объектов показываются виде комплекса с вложенными частями.

Для указания активного объекта может использоваться ключевое слово {active}.

Рисунок 38. Составной активный объект

Потоки сообщений

Семантика

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

Нотация

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

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

заполненное сплошное острие

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

остовное острие

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

п оловинка остовного острия

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

другие разновидности

могут показываться и другие виды управления, например, "неприсоединение к очереди" или "тайм-аут", но они интерпретируются как расширения UML.

Метка сообщения. Метка имеет следующий синтаксис:

predecessor-guard-condition sequence-expression return-value := message-name argument-list условие-защиты-по-предшественнику выражение-порядка возвращаемое-значение := название-сообщения список-аргументов

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

Предшественник. Предшественник - разделенный запятыми список порядковых номеров с последующей косой чертой ('/'):

sequence-number ',' ... '/'

Если список пуст, то выражение опускается.

Каждый порядковый номер - это выражение порядка без повторения элементов. Он должен соответствовать порядковому номеру другого сообщения.

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

Заметим, что сообщение, численно соответствующее предшествующему порядковому номеру, является неявным предшественником и не требует явного перечисления. Для порядковых номеров с одинаковым префиксом, числовым предшественником является номер, в котором последний элемент на единицу меньше. То есть номер 3.1.4.5 предшественник для 3.1.4.6.

Выражение порядка. Выражение порядка - это разделенный точками список порядковых элементов с последующим двоеточием (':'). Каждый элемент представляет уровень процедурной вложенности в полном взаимодействии. Если все управление параллельно, то вложенности нет. Каждый порядковый элемент имеет следующий синтаксис:

[ integer | name ][ recurrence ] [ целое число | название ][ рекуррентность ]

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

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

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

'*' '[' iteration-clause ']' '*' '[' оператор-итерации ']' Итерация

'[' condition-clause ']' '[' условный-оператор ']' Ветвление

Итерация представляет последовательность сообщений на заданном уровне вложенности. Оператор итерации может быть опущен (когда условие итерации не определено). Оператор-итерации задается в псевдокоде или с помощью реального языка программирования; UML не определяет его формат. Примером может быть *[i := 1..n].

Условие определяет сообщение, выполнение которого возможно в случае истинности условного оператора. Оператор-итерации задается в псевдокоде или с помощью реального языка программирования; UML не определяет его формат. Примером может быть [x > y].

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

Нотация итерации предполагает, что сообщения в итерации будут выполняться последовательно. Также возможно их параллельное выполнение. Для этого после звезды ставится двойная вертикальная линия (для параллелизма): *||.

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

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

Возвращаемое-значение. Это список названий, который обозначает значения возвращаемые сообщением в течение последующего выполнение полного взаимодействия. Эти идентификаторы могут быть использованы как параметры для последующих сообщений. Если сообщение не возвращает значение, то возвращаемое значение и оператор присвоения опускаются.

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

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