Общая идея составного состояния ясна. Теперь нужно внимательно разобраться с
деталями составных состояний и связанных с ними переходов. Мы сделаем это
постепенно, несколько раз возвратившись к описанию семантики составных
состояний и переходов в подходящем контексте.
Первое правило можно сформулировать прямо здесь: переход из составного
состояния наследуется всеми вложенными состояниями. При этом, если для
вложенного состояния определен переход с тем же событием перехода и
сторожевым условием, что и у наследуемого перехода, то преимущество имеет
локально определенный переход.
Мы не случайно употребили характерный термин объектно-ориентированного
программирования "наследование" в данном контексте. По нашему мнению,
назначение составных состояний аналогично назначению суперклассов:
90
выявить
общее в нескольких элементах и описать это общее только один раз. Тем самым
сокращается описание модели и она становится более удобной для восприятия
человеком (сравните рис. 4.13 и 4.14 еще раз).
Перейдем к рассмотрению специальных состояний. Прежде всего, специальное
состояние состоянием не является,
91
в том смысле, что автомат не может в нем
"пребывать" и оно не может быть текущим активным состоянием (см. разд. 4.4.1).
Начальное состояние — это специальное состояние, соответствующее ситуации,
когда машина состояний еще не работает.
На диаграмме начальное состояние изображается в виде закрашенного кружка.
Начальное состояние не имеет таких составляющих, как действия на входе, выходе
и внутренняя активность, но оно обязано иметь исходящий переход,
92
ведущий в то
состояние, которое будет являться по настоящему первым состоянием при работе
машины состояний. Исходящий переход из начального состояния не может иметь
события перехода, но может иметь сторожевое условие. В последнем случае
должны быть определены несколько переходов из начального состояния, причем
один из них обязательно должен срабатывать. В программистских терминах
начальное состояние — это метка точки входа в программу. Управление не может
задержаться на этой метке. Даже графически типичный случай начального
состояния с одним непомеченным переходом очень похож на бытовую
пиктограмму "начинать здесь". Начальное состояние может иметь действие на
переходе — это действие выполняется до начала работы машины состояний.
Насколько обязательным является
использование начального состояния в
диаграмме состояний? Этот вопрос не имеет однозначного ответа — все зависит от
ситуации. Например, в диаграммах на рис. 4.13 и 4.14 мы обошлись без начального
состояния, и поведение светофора не стало от этого менее понятным. Однако в
других случаях наличие начального состояния может быть желательно или даже
90
Но состояния не являются классификаторами, поэтому прямо использовать отношение
обобщения было бы синтаксически неправильным.
91
В оригинале специальное состояние называется pseudostate, но слово псевдосостояние нам
кажется слишком искусственным.
92
Разумеется, начальное состояние не может иметь входящих переходов — машина состояний не
может вернуться в ситуацию до начала своей работы.