Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектування інформаційних систем.doc
Скачиваний:
95
Добавлен:
21.09.2019
Размер:
28.77 Mб
Скачать

15.5. Історичний стан

Як було відзначено вище, формалізм звичайного автомата не дозволяє враховувати передісторію в процесі моделювання поведінки об'єктів. Проте функціонування цілого ряду систем засноване на можливості виходу з окремих станів з подальшим поверненням у цей же стан. При цьому може виявитися необхідним врахувати ту частину діяльності, яка була виконана на момент виходу з цього стану, щоб не починати її виконання спочатку. Для цієї мети в мові UML існує історичний стан.

Історичний стан (history state) застосовується в контексті складеного стану. Він використовується для запам'ятовування того з послідовних підстанів, який був поточним у момент виходу зі складеного стану. При цьому існує два різновиди історичного стану: недавнє й давнє (рис. 20.10).

Рис. 20.10. Графічне зображення недавнього (а) і давнього (б) історичного стану

Недавній історичний стан (shallow history state) позначається у формі невеликого кола, у яке поміщена латинська буква "Н" (рис. 20.10, а). Цей стан володіє наступною семантикою. По-перше, він є першим підстаном у складеному стані, і перехід ззовні в цей складений стан повинен вести безпосередньо в цей історичний стан. По-друге, при першому попаданні в недавній історичний стан воно не зберігає ніякої історії (історія порожня). Іншими словами, при першому переході в недавній історичний стан він замінює собою початковий стан підавтомата.

Далі слідує послідовна зміна вкладених підстанів. Якщо в деякий момент відбувається вихід з вкладеного стану (наприклад, у разі деякої зовнішньої події), то цей історичний стан запам'ятовує той з підстанів, який був поточним на момент виходу. При наступному вході в цей же складений стан історичний підстан вже має непорожню історію і відразу відправляє підавтомат в підстан, що запам'ятав всі попередні йому підстани.

Історичний стан втрачає свою історію в той момент, коли підавтомат доходить до свого кінцевого стану. При цьому недавній історичний стан запам'ятовує історію тільки того підавтомата, до якого він відноситься. Іншими словами, цей тип стану здатний запам'ятати історію тільки одного з ним рівня вкладеності.

Стан, що запам'ятав, у свою чергу, також може бути складеним станом. Давній історичний стан (deep history state) позначається у формі невеликого кола, в яке поміщена латинська буква "Н" із символом "*" (рис. 20.10, б) і служить для запам'ятовування всіх підстанів будь-якого рівня вкладеності для поточного підавтомата.

Простим прикладом, що ілюструє застосування недавнього історичного стану, може служити логіка роботи поштової програми-клієнта. Припустимо, при запуску цієї програми ми знаходимося в стані написання нового повідомлення, причому набраний вже значний фрагмент тексту. Поштова програма може бути конфігурована таким чином, що у фіксовані моменти часу (наприклад, кожні 30 хвилин) вона перевіряє наявність нових повідомлень на сервері провайдера при видаленому доступі. Очевидно, що черговий дозвін, хоча і перериває роботу редактора, не повинен привести до втрати набраного фрагменту тексту.

У цьому випадку складений стан "робота редактора" повинен містити вкладений історичний підстан, який запам'ятовує виконану роботу. Після закінчення дозвону й завантаження нової пошти (у разі її наявності) ми повинні повернутися до збереженого фрагменту нашого повідомлення й продовжити роботу редактора програми.

Діаграма станів поштової програми-клієнта (див. рис. 20.5) може бути доповнена з врахуванням розглянутого аспекту її поведінки. Читачеві пропонується це виконати самостійно як вправу.