Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

change event (событие изменения)

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

Семантика

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

Нотация

В отличие от сигналов события изменения не имеют имен и не объявляются. Их используют для запуска переходов. Событие изменения обозначается с помощью ключевого слова when (когда), за которым в круглых скобках следует логическое выражение. Например:

When (self.waitingCustomers > 6)

Обсуждение

Событие изменения - это проверка удовлетворения некоторого условия. Оно может показаться довольно дорогостоящим с точки зрения реализации, однако существуют технологии, позволяющие компилировать это событие таким образом, что постоянная проверка ему будет не нужна. Тем не менее потенциально оно считается дорогостоящим, к тому же скрывает причинно-следственные отношения между изменением значения и теми результатами, к которым оно приводит. Впрочем, иногда использовать его удобно, так как оно инкапсулирует результаты изменений. Просто пользоваться им нужно с осторожностью.
Событие изменения предназначается для проверки значений, видимых объекту. Бывает ситуация, когда изменение атрибута какого-либо объекта запускает переход в другом объекте, который не осведомлен об этом атрибуте. Такую ситуацию лучше всего моделировать как событие изменения у объекта, которому принадлежит атрибут. Таким образом, это событие запускает внутренний переход, отправляющий сигнал второму объекту.
Обратите внимание, что если коммуникация с другим объектом должна быть явной, лучше использовать сигналы, а не события изменения.
Реализовывать события изменения можно различными способами. Например, одни события можно представить как тесты внутри самого программного приложения, другие же реализовать с помощью операционной системы.

Алфавитный указатель