Лекция: Диаграмма состояний

 

Диаграмма состояний включает:

–состояния;

– переходы вместе с ассоциированными событиями и действиями.

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

Событием в контексте диаграммы состояний будем называть любое происшествие, которое может быть при­чиной изменения состояния системы.

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

Обозначение отдельного состояния приведено на рис. 6.23. Каждое состояние должно иметь имя, указываемое на значке.

 

 

Рис. 6.23. Значок Рис. 6.24. Значки Рис. 6.25. Состояние

состояния перехода «Обогрев»

 

Изменение состояний осуществляется в результате перехо­да. Переход – это отношение между двумя состояниями, показывающее, что объект, находящийся в первом состоянии, должен выполнить определенные действия и перейти во второе состояние, как только произойдет указанное событие и будут удовлетворены указанные условия.

Говорят, что при таком изменении состояния переход срабатывает. Пока переход не сработал, объект находится в исходном со­стоянии; после срабатывания он находится в целевом состоянии. Например, Обо­греватель может перейти из состояния Ожидание в состояние Активация при возникновении события tooCold (слишкомХолодно) с параметром desiredTemp (желаемаяТемпература).

Переход определяют пять элементов:

исходное состояние – состояние, из которого происходит переход; если объ­ект находится в исходном состоянии, то исходящий переход может сработать тогда, когда объект получит событие-триггер, инициирующее этот переход, причем должно быть выполнено сторожевое условие (если оно задано);

событие-триггер – событие, при получении которого объектом, находящимся в исходном состоянии, может сработать переход (при этом долж­но быть выполнено сторожевое условие);

сторожевое условие – булевское выражение, которое вычисляется при по­лучении события-триггера; если значение истинно, то переходу разрешено сработать, если ложно – переход не срабатывает; если при этом не задано ни­какого другого перехода, инициируемого тем же самым событием, то собы­тие теряется;

действие – атомарное вычисление, которое может непосредственно воздей­ствовать на рассматриваемый объект или оказать косвенное воздействие на другие объекты, находящиеся в области видимости;

целевое состояние – состояние, которое становится активным после заверше­ния перехода; состояние может иметь переход само в себя.

Переход на диаграмме состояний изображается линией со стрелкой, направленной от исходного состояния к целевому. Рядом с линией указываются событие, вызвавшее переход, условие, при выполнении которого происходит переход, и ассоциированные с переходом действия (рис. 6.24).

На каждой диаграмме состояний должно присутствовать ровно одно стартовое состояние: оно обозначается немаркированным переходом в него из специального значка, изображаемого в виде закрашенного кружка (см. рис. 6.24). Иногда бы­вает нужно указать также конечное состояние, которое обозначают, рисуя немаркированный пе­реход от него к специальному значку, изображаемому как кружок с закрашенной серединой (см. рис. 6.24).

Допускаются «переходы без события» – нетриггерные переходы. В этом случае переход совершается сразу после завершения действия, связанного с состоянием. Если переход условный, он состоится только в случае, если условие выполнено.

На значках состояний можно указывать некоторые действия, деятельности и внутренние переходы.

Можно назначить выполнение некоторого действия на входе или выходе из состоя­ния. Для этого используются ключевые слова entry и exit (вход и выход). Например, на рис. 6.25 приведен значок состояния «Обогрев» объекта, управляющего температурой. При каждом входе в данное состояние выполняется операции StartUp (запустить обогреватель), а при каждом при выходе из состояния – операции ShutDown (отключить обогреватель).

Когда объект находится в некотором состоянии, он обычно без­действует и ожидает возникновения какого-либо события. Но иногда приходится моделировать и ситуацию непрерывно продолжающейся деятельности. Находясь в таком состоянии, объект чем-нибудь занимается до тех пор, пока эта деятельность не будет прервана событием. Ключевое слово do служит для явных указаний: «Начать деятельность при входе в состояние (после того, как было отработано действие при входе) и окончить при выходе из него». Например, пока объект находится в состоянии «Обогрев», осуществляется деятельность Heating (рис. 6.25). Допустимо специфицировать и последовательность действий, которые отделяются друг от друга точкой с запятой, например

dо / ор1(а); ор2(b); ор3(с).

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

В любой моделируемой ситуации бывает необходимо одни события распозна­вать, а другие игнорировать. Между тем иногда необходимо распознать событие, но отложить его обработку на будущее. Такое поведение специфицируется с помощью отложенных событий. Отложенное событие – это список событий, возникновение кото­рых в конкретном состоянии отложено до перехода в состояние, где эти события не являются отложенными. В этот момент события могут быть обработа­ны и инициировать те или иные переходы, как будто они произошли только что. На рис. 6.25 показано, что событие описывается как отложенное путем связыва­ния с ним специального действия defer (отложить). Находясь в состоянии «Обогрев», объект, управляющий температурой, может отложить обработку сиг­нала самопроверки, посылаемого некоторым внешним объектом, отвечающим за пе­риодическое обслуживание.

Находясь в некотором состоянии, объект может по­лучить события, которые желательно обработать, не покидая состояния. Такая об­работка называется внутренним переходом. Между внутренним переходом и пе­реходом в себя имеется некоторое различие. При переходе в себя событие инициирует переход, происходит выход из данного состояния и выполняется действие при выходе (exit). Затем, поскольку при переходе в себя происходит выход из состояния и повторный вход в него же, выполняется действие, ассоциированное с переходом, и, кроме того, действие при входе в состо­яние (entry). Предположим, однако, что необходимо обработать событие, не возбуждая действия при входе и выходе. Для этого в значок, обозначающий состоя­ние, можно поместить внутренний переход в виде

событие / действие.

Если объект находится в таком состоянии и происходит указанное событие, то соответствую­щее действие выполняется без выхода и повторного входа в состояние, т.е. со­бытие обрабатывается, не возбуждая действий при входе и выходе.

Пример. На рис. 6.26 изображена диаграмма состояний для класса Controller, служащего для управления температурой и освещением в системе управления климатом теплицы.

Мы видим, что все объекты этого класса начинают свою жизнь в начальном состо­янии «Ожидание»; затем они изменяют свое состояние по событию «Ввод климатического задания», для которого не предполагается явных действий. Дальше динамическое поведение этого класса состоит в переключении между со­стояниями «День» и «Ночь»; оно определяется событиями «Восход» и «Закат» соответственно; с этими событиями связаны действия по изменению освещения. В обоих состояниях событие понижения или повышения температуры в теплице вызывает обратную реакцию – операцию «Изменить температуру». Мы возвра­щаемся в состояние «Ожидание», когда поступит событие «Отмена климатического задания».

 

 

Рис. 6.26. Диаграмма состояний для объекта класса Controller

 

На диаграмме состояний возможно показать подсостояния – состояния, являющиеся час­тью других состояний. Простым называется такое состояние, которое не имеет внутренней структуры. Состояние, у которого есть подсостояния, называется составным. Составное состояние изображается так же, как и простое, но имеет дополнительный графический раз­дел, в котором показаны подсостояния. Глубина вложенности состояний не ограничена. Если в объемлющем составном состоянии имеет­ся несколько подсостояний, то говорят, что объект одновре­менно находится в составном состоянии и в одном из подсостояний.

Пример. На рис. 6.27 показаны внутренние детали составного состояния «Охлаждение», то есть вложенные в него состояния.

 

 

Рис. 6.27. Вложенные состояния

 

Переходам между состояниями разрешено начинаться и кончаться на любом уровне. Рассмотрим различные формы переходов:

– переход между одноуровневыми состояниями (такой, как из «Готовность» в «Выполнение») – простейшая форма перехода;

– переход непосредственно в подсостояние (как переход из «Ожидание» в «Начальное»), или непосредственно из подсостояния (как из «Выполнение» в «Ожидание»), или одновременно и то, и другое;

– переход из составного состояния (как из состояния «Охлаждение» через событие «Сбой» в состояние «Повреждение»);

– переход в состояние с вложенными подсостояниями (например, предыдущий переход в состояние «Повреждение»).

Если целевое состояние является составным, то оно должно иметь некоторое начальное подсостояние, куда управление попадает при входе в составное со­стояние после выполнения ассоциированного с ним действия при входе (если та­ковое определено). Если же целевым является одно из вложенных состояний, то управление попадает в него, но опять-таки после выполнения действий при входе в объемлющее составное состояние и в подсостояние (если таковые определены).

Указание перехода из составного состояния означает, что он осуществляется из каждого подсостояния этого суперсостояния. Для перехода, исходящего из составного состояния, когда исходным является либо оно само, либо какое-либо из его подсостояний, управление сна­чала покидает вложенное подсостояние (тогда выполняется его действие при вы­ходе, если оно определено), а затем – составное состояние (тогда также выполня­ется действие при выходе).

 

еще рефераты
Еще работы по информатике