Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Самовчитель по UML.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.26 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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