Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 28
Текст из файла (страница 28)
° Состояние (зФа~е). Обозначается прямоугольником со скругленными углами, в котором может быть указано имя состояния. Для начальных и конечных состояний имеются специальные обозначения (сплошиой кружок и «бычий глаз» или перечеркнутый кружок соответственно). ° Переход (ггапяйоп). Изображается линией, соединяющей исходное состояние с целевым. Стрелка ставится около конца линии, указывающего иа целевое состояние. Линия может состоять из нескольких прямолинейных сегментов. ° Событие (ечепс).
Событие сигнала изображается меткой иа переходе. После названия события в круглых скобках можно указать атрибуты. Событие изменения обозначается ключевым словом шлеи, после которого в круглых скобках указывается логическое выражение. Событие времени также обозначается ключевым словом пиен, после которого в круглых скобках указывается временное выражение, или ключевым словом а/гп; после которого в круглых скобках указывается интервал времени).
° Диаграмма состояний (з1а~е Йайгаш). Заключается в прямоугольную рамку. Название диаграммы указывается в небольшом пятиугольном теге в верхнем левом углу рамки. ° Сторожевое условие (йцагд сопп16оп). Может быть указано в квадратных скобках после события. ° Действия (еггесса, см. следующий раздел). Могут прикрепляться к переходу или состоянию. Указываются после символа косой черты (/).
Действия, если их несколько, отделяются друг от друга запятыми и выполняются параллельно. (Если нужно выполнять действия последовательно, их можно разделить промежуточными состояниями.) Рис. $.11. Основные обозначения для диаграмм состояний Мы выделяем название состояния полужирным шрифтом и делаем первую букву заглавной. Названия событий мы пишем курсивом, а первую букву заглавной ие делаем. Сторожевые условия и действия не выделяются шрифтом и тоже пишутся со строчной буквы. Сегменты линий переходов мы стараемся привязывать к прямоугольной сетке. 126 Глава 5 ° Моделирование состояний 5.5. Поведение на диаграммах состояний Диаграммы состояний были бы не слишком полезны, если бы они описывали только события.
Полное описание объекта должно указывать, что именно делает объект в ответ на события. 5.5.1. Действия и деятельность Действие (ейесг) — это ссылка на поведение, выполняемое в ответ на произошедшее событие. Деятельность (ас111о)гу) — это фактическое поведение, которое может вызываться любым количеством действий.
Например, деятельность /1Ьсоппес/Ргголейте (разъединитьЛинию) может выполняться в ответ на событие олНооя (нарычаг) на рис. 5.8. Деятельность может выполняться при переходе, при входе в состояние или при выходе из него, а также при наступлении какого- либо иного события в состоянии. Деятельность может описывать внутренние управляющие операции, например установку атрибутов или порождение других событий. Эта деятельность не имеет аналогов в реальном мире и предназначена для структурирования управления при реализации. Например, программа может увеличивать внутренний счетчик на единицу каждый раз при осуществлении какого-либо события.
Деятельность обозначается косой чертой (/г), после которой ставится название или описание деятельности. Деятельность указывается после вызывающего ее события. Ключевое слово /го используется для обозначения текущей деятельности (см. далее) и не может использоваться в качестве имени события. На рис. 5.12 показана диаграмма состояний для всплывающего меню рабочей станции. При нажатии правой кнопки мыши меню отображается на экране. Когда пользователь отпускает эту кнопку, меню исчезает.
Пока меню отображается на экране, в нем подсвечивается один элемент, над которым в данный момент находится указатель мыши. пдт Ьовоп аовп / отер1еу рор-ор тепе 1Шв Мело ч1в1ые пд/я Ьопоп нр /егеее рор-ор тело оогеог тоева/Игдьддпг тели!1егп Рис. 5.12. Деятельность для всплывающего меню 5.5.2. Текущая деятельность Текущей (до асвчйу) называется деятельность, занимающая некоторый промежуток времени.
По определению такая деятельность может выполняться только в некотором состоянии и не может прикрепляться к переходу. Например, индикатор аварии у ксерокса может мигать в состоянии Затор бумаги (рис. 5.13). Текущая деятельность включает непрерывные операции, такие как отображение картинки на телеэкране, а также последовательные операции, завершающиеся по прошествии некоторого промежутка времени (например, закрытие клапана).
5.5. Поведение на диаграммах состояний 127 Рис. 5.13. Текущая деятельность для ксерокса Для обозначения текущей деятельности используется ключевое слово оо и символ косой черты. Текущая деятельность может быть прервана событием, полученным в процессе выполнения этой деятельности. Это событие может вызвать переход из состояния, в котором осушествляется текущая деятельность, но может и не вызвать такого перехода. Например, робот, перемещающий деталь, может столкнуться с сопротивлением, что приведет к остановке его движения. 5.5.3.
Деятельность при входе и при выходе Деятельность может быть прикреплена не только к переходу, но и ко входу в состояние или к выходу из него. Никаких отличий в возможностях двух систем обозначений нет, однако часто при всех переходах в одно и то же состояние выполняется одинаковая деятельность, которую, в таком случае, удобнее привязать к самому событию. На рис. 5.14 показана схема управления открыванием гаражной двери. Пользователь порождает событие г(ергезз (нажатие) нажатием кнопки, посредством которой он закрывает и открывает дверь. Каждое событие изменяет направление движения двери на противоположное, однако для обеспечения безопасности дверь должна быть открыта полностью, прежде чем ее можно будет снова закрыть.
Система управления включает деятельность тосог ир (двигатель вверх) и тогог Ыогвл (двнгатель вниз) для двигателя. Двигатель порождает события ооог преп (дверь открыта) и г(оог с1океИ (дверь закрыта), когда перемещение двери завершается. Оба перехода в состояние Орептя (Открывание) приводят к открытию двери.
Рис. 5.1Я. Деятельность при переходах На рис. 5.15 показана та же самая модель, в которой деятельность прикреплена к входу в состояние. Деятельность при входе изображается внутри значка состояния с ключевым словом елггу и символом /. Такая деятельность выполняется при входе в состояние по любому из входящих переходов. Деятельность 128 Глава 5 ° Моделирование состояний при входе эквивалентна прикреплению той же деятельности к каждому из входя- щих переходов.
Если входящий переход имеет свою собственную деятельность, она выполняется в первую очередь. Рис. 5.15. Деятельность при входе С»овеб вии»г»ояп! пю»ог оя Мвпи е»е»Ыв ситог то»геиг ЫдяддН тени Нет Событие в состоянии ггереяод в себя Рис. 5.16. Событие в состоянии и переход в себя 5.5.4.
Переход по завершении Часто единственным назначением состояния является последовательное выполнение некоторой деятельности. Как только деятельность завершается, запускается переход в следующее состояние. Стрелка без названия события обозначает автоматический переход, который запускается, как только завершается деятельность, свя- Деятельность при выходе используется реже, чем при входе, но иногда тоже оказывается полезной. Деятельность при выходе указывается внутри символа состояния после ключевого слова ех»Г и символа,/. Эта деятельность выполняется в первую очередь при выходе из состояния по любому из исходящих переходов.
Если к состоянию привязано несколько видов деятельности, они выполняются в следующел» порядке; деятельность при входяшем переходе, деятельность при входе, текущая деятельность, деятельность при выходе, деятельность при исходяшем переходе. События, вызывающие исходящие из состояния переходы, могут прерывать текушую деятельность. Если текушая деятельность прерывается, деятельность при выходе все равно должна быть выполнена до начала перехода. В принципе, в состоянии может произойти любое событие.
Епггу и ех»г — частные случаи возможных событий. Как показано на рис. 5.16, существует отличие между событием в состоянии и переходом в себя: деятельность при входе и при выходе выполняется только в том случае, если происходит переход в себя. 5.6. Практические рекомендации 129 заниая с исходным состоянием. Такой переход называется переходом по завершении, потому что он переключается завершением деятельности в исходном состоянии. Сторожевое условие проверяется только один раз, в тот момент, когда осуществляется событие.
Если переход имеет переход по завершении, а его сторожевое условие не выполнено, состояние остается активным и может привести к «застреванию» управления: событие завершения деятельности не может произойти второй раз. Если состояние имеет переходы по завершении, сторожевые условия должны охватывать весь спектр возможных событий. Специальное условие еЬе позволяет задать ситуацию, когда все остальные условия оказываются ложными. Не используйте сторожевые условия на переходы по завершении для ожидания изменения значения. Лучше ожидать события изменения.
5.5.5. Отправка сигналов Объект может выполнять деятельность, заключаюшуюся в отправке сигнала другому объекту. Система объектов взаимодействует, обмениваясь сигналами. Деятельность бепг1 гатуег5(аггпбигеб) передает сигнал 5 с заданными атрибутами целевому объекту (или группе объектов) та~ей Например, телефонная линия передает коммутатору сигнал соппесг(рИопе питЬег) (соединить(номер телефона)), когда пользователь набирает на своем аппарате полный номер телефона. Сигнал может быть адресован множеству объектов или одному объекту. В первом случае все объекты получают по копии сигнала одновременно, и каждый из них обрабатывает свою копию независимо.
Если же сигнал всегда адресуется одному и тому же объекту, на диаграмме его можно не указывать (но при реализации это сделать все равно придется). Если объект может получать сигналы от нескольких объектов, порядок получения параллельных сигналов может повлиять на итоговое состояние. Это называется ситуацией гонок (гасе сопс)11(оп). Например, в модели на рис. 5.15 дверь может как остаться открытой, так и закрыться, если дверь будет нажата почти в тот же момент, когда дверь полностью откроется.