2. Язык UML. Руководство пользователя. Буч_ Рамбо_ Якобсон (2-е издание) (2006) (1185732), страница 58
Текст из файла (страница 58)
21.1. Такая нотация позволяет визуализировать объявлениясобытий – например, сигнал OffHook (ТрубкаПовешена) и показать,как наступление события приводит к переходу между состояниями:например, сигнал OffHook вызывает переход телефона из состоянияActive (Активен) в состояние Idle (Ожидание) и выполнение действия dropConnection (разорватьСоединение).Глава 21. События и сигналыВ этой главе:События сигнала, вызова, времени и измененияМоделирование серии сигналовМоделирование исключенийОбработка событий в активных и пассивных объектахРеальный мир ежедневно преподносит нам новые явления. Малотого, события в нашей жизни порой происходят одновременно и неожиданно.
Под событием подразумевается некий значимый факт,локализованный во времени и пространстве.В контексте конечных автоматов события используются для моделирования определенного воздействия, которое может вызватьпереход из одного состояния в другое. К числу событий относятсясигналы, вызовы, истечение определенного промежутка времени илиизменение состояния.События могут быть синхронными и асинхронными; их моделирование – одна из составляющих моделирования процессов и потоков.«сигнал»Рис.
21.1. СобытияБазовые понятияСобытие – это описание существенного факта, локализованного во времени и пространстве. Применительно к автоматам событиеозначает воздействие, которое может вызвать переход из одного состояния в другое.Сигнал – это разновидность события, при использовании которой сообщение передается асинхронно от одного экземпляра к другому.ВведениеСтатичная система не представляет ни малейшего интереса,поскольку в ней ничего не происходит.
Все системы, имеющиехоть чтоFто общее с реальностью, в той или иной мере динамичны,причем динамику обуславливают именно события, происходящиевнутри системы или за ее пределами. Работу банкомата инициируетпользователь, который нажимает кнопку для совершения банковской транзакции. Автономный робот начинает действовать, когдавстречается с некоторым предметом.
Сетевой маршрутизатор реагирует на обнаружение переполнения буферов сообщений. На химическом заводе сигналом к действию становится окончание периода, необходимого для завершения реакции.В UML любое явление, которое может иметь место в действительности, моделируется как событие. Событие (event) – это303Виды событийДействующие лицаобсуждаются в главе 17,системы –в главе 32.События могут быть внутренними или внешними.
Внешние события передаются между системой и ее действующими лицами (примерами могут служить нажатие кнопки или прерывание от датчикапредотвращения столкновений), а внутренние – между объектами,существующими в самой системе (пример – исключение, генерируемое при переполнении).Диаграммы деятельности304Созданиеи уничтожениеобъектов –это тожеразновидность сигналов (см.главу 16).Классыобсуждаютсяв главах4 и 9,обобщения –в главах 5и 10.В UML можно моделировать четыре вида событий: сигналы,вызовы, истечение промежутка времени и изменение состояния.СигналыСообщение – это именованный объект, который асинхроннопосылается одним объектом и принимается другим. Сигнал (signal)представляет собой классификатор для сообщений и сам являетсятипом сообщения.У сигналов есть много общего с простыми классами.
Например,можно говорить об экземплярах сигналов, хотя обычно не возникает необходимость моделировать их явно. Кроме того, сигналымогут участвовать в связях обобщения, что позволяет моделировать иерархии событий, где одни – например, сигнал NetworkFailure(СбойСети) – являются общими, а другие – например, специализация события NetworkFailure под названием WarehouseServerFailure (ОтказСкладскогоСервера) – частными. Как и классы, сигналы могут иметьатрибуты и операции.На заметку. Атрибуты сигнала выступают в роли его параметров.
Например, при передаче сигнала Столкновение можноуказать значения его атрибутов в виде параметров: Столкновение(3, 5).Конечныеавтоматыобсуждаются в главе 22,взаимодействие –в главе 16,интерфейсы–в главе 11,зависимости – в главе 5,стереотипы – в главе 6.Сигнал может отправляться в результате выполнения некоегодействия в процессе перехода (изменения состояния) в автомате.Его можно смоделировать как сообщение, передаваемое между двумя ролями при некотором их взаимодействии.
При выполнении метода тоже могут передаваться сигналы. Когда моделируется классили интерфейс, важная часть спецификации поведения – указаниесигналов, которые могут посылать его операции.Как показано на рис. 21.2, сигналы в UML моделируются классами со стереотипами. Для указания на то, что некоторая операцияпосылает сигнал, можно воспользоваться зависимостью со стереотипом send.зависимостьпередачи сигнала«сигнал»«send»Рис. 21.2.
СигналыБазовые понятия305События вызоваКонечныеавтоматыобсуждаются в главе 22.Если событие сигнала представляет собой его экземпляр, то подсобытием вызова (call event) понимается получение некоторымобъектом запроса на выполнение операции над ним. Событие вызова может привести к переходу между состояниями в автомате иливызову метода на целевом объекте.
Конкретный вариант задаетсяв определении операции класса.В то время как сигнал является событием асинхронным, событие вызова обычно синхронно. Это означает, что, когда один объектинициирует выполнение операции на другом объекте, у которогоесть свой автомат, управление передается от отправителя получателю, срабатывает соответствующий переход, затем операция завершается, получатель переходит в новое состояние и возвращаетуправление отправителю. В тех случаях, когда отправитель не нуждается в ожидании ответа, вызов может быть определен как асинхронный.По рис.
21.3 видно, что в модели событие вызова неотличимо отсобытия сигнала. В обоих случаях событие вместе со своими параметрами выглядит как триггер для перехода состояния.Рис. 21.3. События вызоваНа заметку. Хотя визуально событие сигнала и вызова неотличимы, разница совершенно отчетливо проявляется на заднемплане модели. Получатель события, конечно же, знает о различии (путем объявления операций в своем списке операций).Сигнал, как правило, обрабатывается на уровне автомата,а событие вызова – методом. Для перехода от события к сигналу или операции можно воспользоваться инструментальными средствами.События времени и измененияСобытие времени представляет собой истечение некоего промежутка времени. На рис. 21.4 показано, что в UML такое событие моделируется посредством ключевого слова after (после), за которымследует выражение, определяющее этот промежуток.
Выражениеможет быть простым – например, after 2 seconds (через 2 секунды)Диаграммы деятельности306или сложным – например, after 1 ms since exiting Idle (через 1 мс после выхода из состояния Ожидание). Если явно не указано иное,отсчет времени начинается с момента входа в текущее состояние.Для обозначения конца периода используется слово at.
Так, записьat (1 Jan 2007, 1200 UT) указывает на то, что событие времени закончится в первый день нового 2007Fго года.С помощью события изменения описывается изменение состояния или выполнения некоторого условия. На рис. 21.4 показано, что вUML событие изменения моделируется посредством ключевого слова when (когда), за которым следует булево выражение. Такое выражение может использоваться для обозначения абсолютного моментавремени (например, when time=11:59, «когда время=11:59») или проверки условия (например, when altitude<1000, «когда высота<1000»).at (11:49PM) / selfTest()Базовые понятиясигналами, семантика событий перекликается с семантикой активных и пассивных объектов.ЭкземплярыЭкземпляр любого класса может послать сигнал принимающемуобсуждают- объекту или вызвать его операцию.
Отправив сигнал получателю,ся в главе 13. он продолжает свой поток управления, не дожидаясь от него ответа.Например, после того как действующее лицо, взаимодействующеес банкоматом, пошлет сигнал pushButton (нажатьКнопку), оно можетвыполнять другие действия независимо от того, что делает система,которой был послан сигнал. Напротив, если объект вызывает операцию, он должен дождаться ответа от получателя. Допустим, в трейдерской системе экземпляр класса Trader (Трейдер) может вызватьоперацию confirmTransaction (подтвердитьТранзакцию) в некоторомэкземпляре класса Trade (Сделка), тем самым косвенно изменив состояние последнего.