22.5. Предыстория 501
• Переходите из составного состояния (и, следовательно, из подсосто
яния A).
• Проходите через одно или более внешних состояний.
• Возвращаетесь в составное состояние, но хотели бы продолжить вы
полнение в подсостоянии A с того момента, на котором останови
лись в прошлый раз.
Как можно добиться этого? Понятно, что составному состоянию необ
ходим какойто способ для запоминания подсостояния, в котором вы
находились при выходе из него. Это требование возвращения к тому,
на чем остановились, настолько распространено, что специально для
его реализации в UML было включено псевдосостояние предыстории.
Предыстория позволяет суперсостоянию при возвращении после пре
рывания «начинать с того, на чем остановился».
С помощью предыстории суперсостояния запоминают последнее ак
тивное подсостояние. Существует два типа псевдосостояний предысто
рии – неглубокая и глубокая предыстории. Рассмотрим их по очереди.
22.5.1. Неглубокая предыстория
На рис. 22.12 показан конечный автомат прецедента BrowseCatalog сис
темы электронной коммерции.
В данном примере из суперсостояния Browsing можно выйти по трем со
бытиям:
• exit – завершает автомат и возвращается на то место, где осуществ
лялось выполнение до него (нет необходимости рассматривать этот
случай более подробно);
• goToBasket – осуществляет переход в составное состояние Displaying
Basket, в котором отображается текущее содержимое корзины для
покупок;
• goToCheckout – осуществляет переход в составное состояние Check
ingOut, в котором покупателю представляется заказ с перечислени
ем всех покупок.
При возвращении в состояние Browsing из DisplayingBasket или CheckingOut
было бы неплохо, чтобы пользователи попадали именно туда, где оста
новились. Только такое поведение имеет смысл.
Неглубокая предыстория запоминает последнее подсостояние того же
уровня, что и псевдосостояние неглубокой предыстории.
Псевдосостояние неглубокой предыстории может иметь множество вхо
дящих переходов, но только один исходящий. Псевдосостояние неглу
бокой предыстории запоминает, в каком подсостоянии вы находились
при выходе из суперсостояния. Если затем происходит возвращение из