OpenU.Ru
Состояние, представляющее собой выполнение чистого
вычисления, имеющего внутреннюю структуру. Обычно это вызов операции,
части операции или выполнение процедуры, относящейся к реальному миру. Состояние-деятельность
может быть прервано событием, которое запускает переход
из этого состояния. Состояние-деятельность не прекращается само по себе с течением
времени - у него нет временных ограничений.
См. activity; completion
transition.
Семантика
Состояние-деятельность представляет собой состояние, в котором производится
внутреннее вычисление и, как правило, существует, по крайней мере, один исходящий
переход по завершении, который запускается при окончании этой деятельности (если
у перехода есть сторожевое условие, то их может быть несколько). У состоянии-деятельности
не должно быть внутренних или исходящих переходов, которые базируются на явных
событиях. В таких ситуациях используйте обычные состояния.
Обычным использованием состояния-деятельности является моделирование одного
шага в выполнении алгоритма (процедуры). Если все состояния в модели являются
состояниями-деятельностями и параллельные деятельности не имеют доступа к одним
и тем же значениям, вычисление считается детерминированным, даже если оно включает
в себя параллельное выполнение.
Состояние-деятельность может ссылаться на вложенный автомат, который обычно
является еще одним графом деятельности. В некотором
роде это напоминает конечный автомат-процедуру.
Состояние-деятельность - это процесс выполнения процедуры, но не состояние обычного
объекта.
Состояние-действие - это атомарное состояние-деятельность,
то есть оно не может быть прервано переходом. Состояние-действие может быть
смоделировано в виде состояния-деятельности с единственным действием при входе.
Состояние-деятельность можно использовать в обычных конечных автоматах, но чаще
их используют в графах деятельности.
Переходы, исходящие из состояния-деятельности, как правило, не включают в себя
переключающее событие, они запускаются по окончании деятельности. Переходы могут
обладать сторожевыми условиями и действиями. Обратите особое внимание на то,
чтобы исходящий из деятельности переход покрывал все условия, иначе управление
может остановиться. Если одновременно удовлетворено несколько сторожевых условий,
то выбор становится неопределенным (чтобы определить его, нужно приписать этой
точке семантических вариаций какое-либо особое правило).
Вo всех прочих ситуациях используйте обычное состояние.
Нотация
Состояние-деятельность изображается в виде фигуры, у которой верхняя и нижняя части прямые, а боковые образованы двумя выпуклыми арками (рис. 16). Выражение, описывающее деятельность, помещается внутри этой фигуры, причем в диаграмме оно не обязательно должно являться уникальным.
Обсуждение
Состояния-действия предназначены для коротких счетных операций, а состояния-деятельности
- для вычислений любой протяженности и сложности. Особенность состоит в том,
что состояние-действие может заблокировать систему, так что та не будет реагировать
на внешние воздействия, поэтому это состояние должно быть максимально коротким.
В отличие от него состояние-деятельность может быть прервано извне, поэтому
в случае необходимости системе не нужно ждать окончания деятельности. Семантика
языка UML не ограничивает время действия, но генераторы кода могут совершенно
обоснованно полагать, что действия должны быть закончены мгновенно. Что же касается
деятельностей, то они могут быть прерваны другими действиями.