OpenU.Ru
Выполнение операции. Активация, известная также под названием "фокус
управления", представляет собой период времени, в течение которого
объект совершает операцию (непосредственно или с помощью подчиненной операции).
Посредством активации моделируется не только длительность выполнения операции,
но и отношения управления между выполнением и участвующими объектами. В обычных
компьютерах и языках программирования активация соответствует значению фрейма
функции на стеке.
См. call; sequence diagram.
Семантика
Активация - это экземпляр выполнения операции, включающий
в себя период времени, необходимый для вызова подчиненных операций (см. call).
В контекст активации входят множество локальных переменных, которые доступны
только этой активации, текущее месторасположение в методе (или другом описателе
поведения) и ссылка (обратная ссылка) на активацию, которая
представляет контекст вызывающего объекта и к которой возвращается управление
после того, как закончится текущая активация. В результате перехода в конечном
автомате объекта, принадлежащего к активному классу, может возникнуть активация
без обратных ссылок. В этом случае после ее завершения конечный
автомат просто дожидается следующего события.
Обратите внимание, что это определение описывает стандартную процедуру, которая
реализуется в типичной фон-неймановской вычислительной машине. Однако оно сделано
несколько общо, так чтобы его можно было применять в распределенном окружении,
где нет совместно, используемой памяти и где фрейм функции на стеке состоит
из связного списка активаций в различных областях памяти.
Нотация
Активация изображается на диаграмме последовательности в виде высокого узкого
прямоугольника (вертикальной полосы), верхняя часть которого соответствует времени
ее запуска, а нижняя - времени окончания. Вид операции, которая была проделана
в это время, обозначается в виде текстовой пометки у значка активации или у
левого края, в зависимости от выбранного стиля нотации. Другой способ обозначения
операции - значок входящего сообщения. В этом случае текстовую пометку у самой
полоски-активации можно опустить. Если поток управления процедурный, то верхняя
часть полоски-активации находится у наконечника стрелки, символизирующей входящее
сообщение (которое инициирует действие). Заканчивается полоска, соответственно,
у хвоста стрелки, показывающей возврат сообщения.
В случае если у нескольких объектов есть параллельная активация, то каждая из
них показывает выполнение одного объекта. Если между объектами нет коммуникации,
то активации независимы друг от друга и относительное время выполнения каждой
несущественно для других.
В случае использования процедурного кода активация указывает на время, в течение
которого активна процедура в этом объекте или вызванная ей подчиненная процедура
(возможно, в другом объекте). Другими словами, все активные вложенные активации
процедур показываются последовательно. В стандартном компьютере такое множество
последовательных вложенных активаций составляет стек фреймов вычислений. В случае,
когда объект с текущей активацией вызывается повторно, на диаграмме изображается
второй вертикальный прямоугольник активации, чуть правее первого (слегка перекрывая
его). "Перекрывающие" вызовы могут быть вложены на любую глубину.
Они могут относиться как к одной и той же операции (рекурсивный вызов), так
и к разным операциям над одним и тем же объектом.
Пример
На рис. 7 изображены активации, явившиеся в результате различных вызовов,
в том числе и рекурсивного.