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

OpenU.Ru

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

state (состояние)

Условие или ситуация в жизненном цикле объекта, во время которой он удовлетворяет некоему условию, выполняет определенную деятельность, или ожидает какого-либо события.
См. activity; activity graph; composite state; entry action; exit action; final state; internal transition; pseudostate; state machine; submachine; synch state; transition.

Семантика

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

Структура

Состояние имеет части, перечисленные ниже.
Имя. Имя состояния, которое не должно иметь дубликатов в рамках внешнего состояния. Если состояние анонимное, имя не указывается. Одновременно может существовать любое количество анонимных состояний. Вложенное состояние можно идентифицировать с помощью пути к элементу (разумеется, если у всех внешних состоянии есть имена).
Вложенные состояния (полсостояния). Если конечный автомат обладает вложенной внутренней структурой, то его называют композитным состоянием. Композитное состояние представляет собой либо совокупность несовместимых, (то есть последовательно активных) подсостояний или же множеств параллельных (то есть одновременно активных) подсостояний. Если у состояния нет внутренней структуры (за исключением внутренних переходов), оно считается простым.
Действия при входе и выходе. Состояние может иметь действие при входе и действие при выходе. Назначение этих действий - инкапсулировать состояние так чтобы его можно было использовать извне, не имея представления о его внутреннем устройстве. Действие при входе выполняется при входе в состояние, после действия, прикрепленного к входящему переходу и перед любым другим видом внутренней деятельности. Действие при выходе выполняется при выходе из состояния, после завершения любого другого вида внутренней деятельности и перед действием, прикрепленным к исходящему переходу. Переход, который пересекает границы нескольких состояний, может вызвать выполнение нескольких действии при входе и выходе (которые будут выполняться в соответствии с вложенностью состояний). Сначала выполняются действия при выходе, начиная с самого внутреннего из всех состоянии и постепенно доходя до самого внешнего. Затем выполняется действие перехода, после чего выполняются действия, при входе - начиная с самого внешнего состояния и заканчивая самым внутренним. На рис. 166 показан результат запуска перехода, пересекающего границы нескольких состояний. Действий при входе и выходе невозможно избежать, даже при выбрасывании исключений. Эти действия представляют собой механизм инкапсуляции, служащий для спецификации поведения конечного автомата, и гарантируют выполнение неких обязательных действий при любых условиях.
Внутренняя деятельность. Состояние может обладать внутренней деятельностью, которая описывается в виде выражения. При входе в состояние эта деятельность начинается сразу после выполнения действия при входе. Если деятельность заканчивается, то состояние завершается, после чего запускается переход по завершении, который осуществляет выход из состояния. В противном случае состояние будет ожидать, пика его изменение не вызовет инициированный снаружи переход. Если переход запускается во время осуществления внутренней деятельности, то деятельность прекращается и выполняется действие при выходе из состояния.

Рис. 166. Переход через границы состояния с действиями при входе и выходе
Внутренние переходы. У состояния может быть список внутренних переходов, которые представляют собой обычные переходы - за одним исключением: у них нет целевых состояний, поэтому они не вызывают изменения состояния. Если событие внутреннего перехода происходит в то время, когда объект находится в состоянии, которому принадлежит этот переход, то выполняется действие, прикрепленное к внутреннему переходу. При этом не происходит изменения состояния объекта и, как следствие, не происходят действия при входе и выходе (даже в том случае, если внутренний переход объявлен во внешнем состоянии, ибо текущее состояние не меняется). Это отличает внутренний переход от перехода в себя (self-transition), при котором происходит внешний переход из состояния в это же состояние, а значит, сначала осуществляется выполнение действий при выходе из всех его вложенных состояний, потом действие при выходе из собственно самого состояния, которому принадлежит переход в себя, после чего опять выполняется действие при входе. Действия при входе и выходе выполняются, даже если переход в себя осуществляется для текущего состояния. При этом сначала осуществляется выход из него, а потом - вход. Если подобный переход запускается но внешнем состоянии текущего состояния, то конечным состоянием будет именно внешнее, а не текущее состояние. Другими словами, переход в себя может послужить причиной выхода из вложенного состояния, а внутренний переход - нет.
Вложенный конечный автомат. Тело состояния может представлять собой копию отдельного конечного автомата, на который делается ссылка по имени. Конечный автомат, на который осуществляется ссылка, называется вложенным, потому что он находится внутри большего конечного автомата. Состояние, которое ссылается на этот вложенный автомат, называется состоянием вложенного автомата. Вложенный автомат можно прикрепить к классу, который обеспечит контекст для действий в рамках этого вложенного автомата, такой, например, как множество записываемых атрибутов. Вложенный автомат предназначается для повторного использования во многих конечных автоматах, так как это позволяет избежать повторов одного и тою же фрагмента конечного автомата. Вложенный автомат - это что-то вроде подпрограммы для конечного автомата.
Состояние ссылается на вложенный автомат по имени, к которому может прилагаться список аргументов. Имя представляет собой имя конечного автомата, у которого есть исходное и конечное состояния. Если у вложенного автомата есть параметры для начальною перехода, то в списке аргументов должны находиться соответствующие им аргументы. При входе во вложенный автомат в первую очередь осуществляется действие при входе, после чет начинается выполнение вложенного автомата от его исходного состояния. Когда вложенный автомат достигает своего конечного состояния, выполняется действие при выходе из состояния вложенного автомата. После этого состояние вложенного автомата считается завершенным, и далее запускается переход, основанный на неявном завершении деятельности.
Переход в состояние, ссылающееся на вложенный автомат, активизирует исходное состояние этого автомата. Однако иногда требуется переход в другое (заданное) состояние вложенного автомата. В таком случае используется состояние-"заглушка" - псевдосостояние, которое помещается в состояние, ссылающееся на вложенный автомат, и обозначает заданное состояние внутри этого автомата. Переходы могут связывать состояние-"заглушку" с другими состояниями в общем, конечном автомате. При фактическом запуске перехода в состояние-"заглушку" активизируется состояние вложенного автомата, на которое ссылается эта "заглушка".
Вложенный автомат представляет собой деятельность внутри состояния, которая может быть прервана извне. Состояние вложенного автомата можно равнозначно заменить на уникальную копию этого вложенного автомата. К вложенному автомату можно прикрепить процедурное выражение, описывающее деятельность. Деятельность можно рассматривать как ряд состояний (по одному на каждое примитивное выражение), который может быть прерван между любыми двумя составляющими. Деятельность отличается от действия, которое атомарно и не может быть прервано.
Динамический параллелизм. Как для состояния деятельности, так и для состояния вложенного автомата могут задаваться множественность и параллелизм. Множественность оно определяет, сколько копий этого состояния можно выполнять одновременно. Как правило, она равна единице. Это означает, что состояние представляет собой обычный поток управления. Если значение множественности не фиксировано, это значит, что число единиц выполнения определяется динамически, во время выполнения программы. Например, если значение множественности представляет собой 1..5, это значит, что одновременно может выполняться от одной до пяти копий этой деятельности. Если существует выражение, описывающее параллелизм (которое необходимо во всех случаях, когда оп отличен от единицы), то во время выполнения это выражение должно выдавать в качестве результата некое множество списков аргументов. Количество элементов множества указывает на количество параллельных активаций состояния. Каждое состояние получает определенный список значений аргументов в качестве значении неявного текущего события. Действия в деятельности имеют доступ к этим значениям. После завершения всех активаций динамически параллельное состояние тоже считается завершенным, и выполнение переходит к следующему состоянию.
Описанные выше особенности динамического параллелизма отображаются на диаграммах деятельности.
Откладываемые события. Представляют собой список событий, осуществление которых в данном состоянии отложено, если они не запускают переход. События остаются отложенными до тех пор, пока они не запустят переход или же пока система не перейдет в другое состояние, где они уже не будут отложенными. При реализации отложенных событий используется внутренняя очередь событий.

Нотация

Состояние изображается в виде прямоугольника с закругленными углами, у которого может быть одно или несколько необязательных разделов. Среди этих разделов могут присутствовать нижеследующие:
Раздел для имени. В нем (в виде строки) содержится опциональное имя состояния. Те состояния, у которых нет имен, называются анонимными. Все состояния (в том числе анонимные) отличаются друг от друга, однако употреблять несколько раз символ состояния с одним и тем же именем на одной диаграмме не рекомендуется, поскольку это приводит к путанице.
Вложенное состояние. Изображается в виде вложенной диаграммы состояний для композитного состояния. Диаграмма при этом помещается в рамках внешнего состояния. Переходы могут вести прямо к вложенным состояниям или к границе внешнего состояния. В отделе несовместных подсостояний они изображаются непосредственно внутри композитного состояния. В области с параллельными подсостояниями пунктирные линии делят их на подобласти, содержание несовместные подсостояния.
См, примеры и более подробное изложение в словарной статье composite state.
Раздел для внутреннего перехода. Здесь содержится список внутренних действий или деятельностей, происходящих в ответ на события в то время, когда объект находится в данном состоянии. (Причем эти события не меняют состояние объекта.)
Для выражений, описывающих действия, можно попользовать атрибуты и связи объекта, которому эти выражения принадлежат, а также параметры входящих переходов (если они есть у всех входящих переходов).
В случае если параметры отсутствуют, список аргументов (вместе со скобками) можно опустить. Сторожевое условие (имеете со скобками) и выражение действия (вместе с наклонной чертой) тоже необязательны.
Форма у действий при входе и действии при выходе одинакова, отличаются они только зарезервированными словами entry и exit, которые запрещено использовать в качестве имен событий.
entry / выражение -действия
exit / выражение-действия
У действий при входе и выходе не может быть аргументов или сторожевых условий (поскольку они вызываются неявно). Для того чтобы получить параметры для действия при входе, оно должно осуществить доступ к текущему событию. Этот механизм используется в частности, когда параметры получают вновь созданный объект.
Зарезервированное имя действия defer указывает на то, что событие отложено в данном состоянии и его подсостояниях. В этом случае сторожевого условия или действий не бывает.
имя-события /defer
Зарезервированное слово do представляет собой выражение, описывающее неатомарную деятельность.
dо / выражение-деятельности
Состояние, ссылающееся на вложенный автомат. Вызов вложенного автомата указывается внутри символа состояния при помощи строки, имеющей следующую форму:
include имя-автомата (аргументсписок)необяз
И деятельности типа "do", и вложенные автоматы служат для описания неатомарных вычислении, которые, как правило, производятся до самого конца, однако при этом могут быть прерваны запускающим переход событием.

Пример

На рис. 167 изображено состояние с внутренними переходами, на рис. 168 - объявление и использование вложенного автомата.

Рис. 167. внутренние переходы с действиями при входе и выходе и отложенным событием

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

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