- •«Диаграммы состояний»
- •1. Что такое диаграмма состояний
- •Набор символов
- •Дополнительные элементы в изображении состояния
- •Дополнительные обозначения для переходов: события и действия
- •Дополнительные обозначения для переходов: условия переходов
- •2. Подчиненные состояния
- •Последовательные подчиненные состояния
- •3. История состояний
- •Параллельные подчиненные состояния
- •4. Сообщения и сигналы
- •5. Зачем нужны диаграммы состояний
- •Дополнение к общей картине
- •6. Резюме
- •Вопросы и ответы
- •Задание
Параллельные подчиненные состояния
Находясь в состоянии Работа, GUI-интерфейс не просто ожидает действий пользователя. Он также отслеживает системное время и, возможно, обновляет экран по истечении заданного интервала времени. Например, на экране могут содержаться часы, изображение которых должно регулярно обновляться.
Эти действия происходят одновременно с последовательностями, о которых шла речь в предыдущем разделе. Хотя каждая последовательность является набором последовательных подчиненных состояний, две последовательности переходов происходят параллельно друг с другом. Параллельные последовательности переходов изображаются пунктирной линией, как показано на рис. 7.
Рис. 7. Параллельные подчиненные состояния наступают одновременно. Графически они разделяются пунктирной линией
Выделение в состоянии Работа двух компонентов напоминает об изученных ранее отношениях агрегации и композитных объектах. Если каждый компонент является частью только одного "целого", речь идет о композитном объекте. Параллельные части состояния работа связаны с этим состоянием таким же отношением. С этой точки зрения, состояние Работа является композитным состоянием. Состояние, включающее только последовательные подчиненные состояния, также называется композитным.
3. История состояний
Что происходит, если при отображении заставки пользователь нажимает клавишу или перемещает указатель мыши, чтобы вернуть экран в состояние работа? Возвращается ли экран к исходному состоянию, наступающему сразу же после инициализации GUI-интерфейса? Или же на экране отражается последнее состояние, предшествующее моменту включения заставки? Очевидно, что в первом случае пользователь потеряет время и выполненную работу и вынужден будет возобновить ее сначала.
Диаграмма состояний позволяет учесть такую особенность. В UML применяется специальное обозначение, указывающее на то, что композитное состояние запоминает активное промежуточное состояние во время выхода объекта из композитного состояния. Это символ «н», заключенный в небольшой круг и соединенный сплошной линией со стрелкой с запоминаемым подчиненным состоянием. На рис. 8 это обозначение введено для отображения состояния Работа.
Рис. 8. История состояний, обозначенная символом «Н» в небольшом круге, показывает, что композитное состояние запоминает свое активное промежуточное состояние при выходе объекта из этого композитного состояния
На рассматриваемой диаграмме не принимались во внимание те окна, которые открываются другими — вложение состояний в иные подчиненные состояния. Если запоминаются подчиненные состояния всех уровней вложенности (как для подчиненных состояний Работа окон состояния Работа), то история состояний называется глубокой. Если запоминается только самое верхнее подчиненное состояние, история считается мелкой. Для глубокой истории в кружочке отображается надпись «Н*».
История состояния, начальное состояние (изображенное закрашенным кружочком) и конечное состояние ("глазок") называются псевдосостояниями. Они не имеют переменных состояния, набора действий и поэтому не являются "полноценными" состояниями.
