Шаг 169.
Унифицированный язык моделирования UML.
Виды событий

    На этом шаге рассмотрим виды событий в UML.

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

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

    Сигналы

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

    Сообщение – это именованный объект, который асинхронно посылается одним объектом и принимается другим. Сигнал представляет собой классификатор для сообщений и сам является типом сообщения.

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

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

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

    Как показано на рис. 1, сигналы в UML моделируются классами со стереотипами. Для указания на то, что некоторая операция посылает сигнал, можно воспользоваться зависимостью со стереотипом send.


Рис.1. Сигналы

    События вызова

    Если событие сигнала представляет собой его экземпляр, то под событием вызова (call event) понимается получение некоторым объектом запроса на выполнение операции над ним. Событие вызова может привести к переходу между состояниями в автомате или вызову метода на целевом объекте. Конкретный вариант задается в определении операции класса.

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

    По рис. 2 видно, что в модели событие вызова неотличимо от события сигнала.


Рис.2. События вызова

    В обоих случаях событие вместе со своими параметрами выглядит как триггер для перехода состояния.

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

    События времени и изменения

    Событие времени представляет собой истечение некоего промежутка времени. На рис. 3 показано, что в UML такое событие моделируется посредством ключевого слова after (после), за которым следует выражение, определяющее этот промежуток.


Рис.3. События времени и изменения

    Выражение может быть простым – например, after 2 seconds (через 2 секунды) или сложным – например, after 1 ms since exiting Idle (через 1 мс после выхода из состояния Ожидание). Если явно не указано иное, отсчет времени начинается с момента входа в текущее состояние. Для обозначения конца периода используется слово at. Так, запись at (1 Jan 2017, 1200 UT) указывает на то, что событие времени закончится в первый день нового 2017-го года.

    С помощью события изменения описывается изменение состояния или выполнения некоторого условия. На рис. 3 показано, что в UML событие изменения моделируется посредством ключевого слова when (когда), за которым следует булево выражение. Такое выражение может использоваться для обозначения абсолютного момента времени (например, when time=11:49, "когда время=11:49") или проверки условия (например, when altitude<1000, "когда высота<1000").

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

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

    На следующем шаге рассмотрим передачу и получение событий.




Предыдущий шаг Содержание Следующий шаг