Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Проектирование_МПС_лек10

.pdf
Скачиваний:
15
Добавлен:
15.02.2015
Размер:
215.87 Кб
Скачать

1

10 Конечные автоматы

Конечные автоматы используются для моделирования динамических процессов системы. Многие системы и, в частности, системы реального времени очень сильно зависят от состояния. Это означает. что их работа определяется не только поступающими на вход данными, но и тем, что происходило с системой раньше.

Для описания конечных автоматов применяются диаграммы и таблицы перехода состояний. Диаграмма перехода состояний – это представление конечного автомата в виде графа, вершины которого соответствуют состояниям, а ребра – переходам между ними. Таблица переходов состояний – это табличное представление конечного автомата.

В нотации UML диаграмму перехода состояний называют просто диаграммой состояний (statechart diagram). Традиционную иерархическую диаграмму состояний называют плоской диаграммой, а для обозначение концептуальной декомпозиции иерархических состояний употребляют термин

«иерархическая диаграмма состояний».

10.1 Основные термины и определения

Конечный автомат – это автомат с конечным числом состояний. В

любой момент времени он находится только в одном состоянии.

Переход состояний – это изменение текущего состояния, вызванное внешним событием. В ответ на поступившее событие автомат может перейти в новое состояние или остаться в прежнем. То, в какое состояние перейдет автомат, зависит как от текущего состояния, так и от события. Побочным результатом перехода в новое состояние иногда бывает некоторое действие.

Событие (его также называют дискретным сигналом или стимулом) – это некоторое явление, происходящее в определенный момент времени. Событие

2

атомарно (т.е. не прерываемо) и концептуально имеет нулевую продолжительность. Пример событий: «Карточка вставлена в банкомат», «Введен ПИН-код», «Нажат тормоз». События могут зависеть друг от друга.

Например, событие «Карточка вставлена в банкомат» всегда предшествует событию «Введен ПИН-код».

Событие таймера – это особое событие, описываемое ключевым словом after, которое говорит, что событие происходит по истечении промежутка времени, заданного выражением в скобках. Например, after (10 c) или after (промежуток времени). На диаграмме состояний событие таймера вызывает выход из данного состояния. Промежуток времени измеряется от момента входа в состояние до момента выхода из него.

Состояние описывает некоторую конкретную ситуацию,

характеризуемую протяженностью во времени. Наступление события обычно приводит к переходу конечного автомата из одного состояния в другое.

Теоретически переход в новое состояние занимает нулевое время. На практике время, необходимое для перехода в новое состояние, пренебрежимо мало по сравнению со временем, проведенным в данном состоянии.

Начальное состояние – это состояние, в котором оказывается диаграмма состояний сразу после активизации.

10.2 Конечные автоматы и объекты

Несмотря на то, что с помощью конечных автоматов можно построить модель всей системы, в объектно-ориентированном анализе и проектировании конечный автомат инкапсулируется в некотором объекте. Другими словами,

этот объект зависит от состояния и всегда находится в одном из состояний.

Конечный автомат объекта изображается в виде диаграммы состояний. В

объектно-ориентированной модели зависящие от состояния проекции системы описываются одним или несколькими конечными автоматами, каждый из которых инкапсулирован в отдельный объект. Взаимодействие конечных

3

автоматов происходит косвенно, путем обмена сообщениями между

содержащими их объектами.

10.3Пример диаграммы состояний счета клиента банка

Впримере показана простая диаграмма из двух состояний – начального и конечного (рис. 10.1).

Рисунок 10.1 – Диаграмма состояния счета клиента банка Когда открывается счет с положительным балансом, событие «Счет

открыт» вызывает переход в начальное состояние «Счет хороший».

Последующие события «Вклад» и «Обычное снятие денег» не изменяют состояния при условии, что баланс счета остается положительным. Однако событие «Разрешенное снятие денег», приводящее к отрицательному балансу,

вызывает переход в состояние «Превышены расходы по счету». В этом состоянии могут произойти другие события «Разрешенное снятие денег».

Событие «Долг погашен» вызывает обратный переход в состояние «Счет хороший». При закрытии счета производится переход в конечное состояние,

изображаемое в виде закрашенного круга внутри незакрашеного.

10.4 Пример диаграммы состояний банкомата

На рис. 10.2 показан пример диаграммы состояний банкомата. Начальное состояние для нее – «Простаивает». При получении события «Карточка вставлена» банкомат переходит в состояние «Ожидание ПИН-кода» и

находится в этом состоянии до тех пор, пока клиент введет ПИН-код. При получении события «ПИН-код введен» банкомат переходит в состояние

4

«Проверка ПИН-кода», в котором выясняет, совпадает ли введенный клиентом ПИН-код с тем, что храниться в базе данных банка.

Рисунок 10.2 – Пример диаграммы состояний банкомата Из состояния «Проверка ПИН-кода» возможно 4 перехода.

Если ПИН-коды совпадают, то осуществляется переход по ветке

«Правильный ПИН-код» в состояние «Ожидание выбора клиента».

Если ПИН-коды не совпадают, то по ветке «Неправильный ПИН-код» осуществляется возврат в состояние «Ожидание ПИН-кода». Система предлагает клиенту повторить ввод.

Если клиент три раза неправильно ввел ПИН-код, то совершается переход

«Три неудачи, украдена» в состояние «Конфискация». В состояние

«Конфискация» можно попасть если карточка оказалась утерянной. Кроме того,

клиент может нажать клавишу отмены, после чего карточка будет возвращена,

а транзакция прервана.

5

В состоянии «Ожидание выбора клиента» клиент может выбрать нужную операцию (например, снятие денег). Диаграмма состояний получает событие

«Выбрано снятие денег» и переходит в состояние «Обработка запроса на снятие». Если снятие разрешено, то диаграмма оказывается в состоянии

«Выдача наличных». После получения события «Наличные выданы» банкомат переходит в состояние «Печать», в котором печатается чек, а затем в состояние

«Возврат». После возврата карточки и получения сигнала события «Карточка возвращена» система переходит в состояние «Завершение». Из состояния

«Завершение» производится переход в начальное состояние «Простаивает» после получения события таймера.

10.5 Пример диаграммы состояний системы круиз-контроля

На рис. 10.3 показана упрощенная диаграмма состояний для объекта

«Круиз-Контроль».

Рисунок 10.3 – Пример диаграммы состояний системы круиз-контроля Первоначально диаграмма находится в состоянии «Простаивает». Когда

водитель включает зажигание, совершается событие «Двигатель включен», и

диаграмма переходит в состояние «Начало». При переводе ручки круиз-

контроля в положение «разгон» происходит событие «Рзогнаться» и система переходит в состояние «Разгон». Если водитель отпускает ручку круиз-

контроля, то происходит событие «Круиз», и система оказывается в состоянии

6

«Крейсерский режим». Когда водитель нажимает на педаль тормоза, событие

«Нажат тормоз» приводит к переходу в состояние «Отмена крейсерского режима».

Диаграмма на рис. 10.3 допускает переход из состояния «Начало» в

состояние «Разгон», даже если водитель нажал педаль тормоза. Очевидно, что это нежелательно, поскольку нажатие тормоза должно отключить систему круиз-контроля. Избежать такой ситуации можно, введя два состояния –

«Начало без торможения» и «Начало с торможением» (рис. 10.4).

Рисунок 10.4 – Частичная диаграмма состояний Переход в состояние «Разгон» разрешен только из состояния «Начало без

торможения». Поэтому диаграмма не реагирует на событие «Разогнаться», если она находится в состоянии «Начало с торможением», но переходит в состояние

«Разгон», если перед этим была в состоянии «Начало без торможения».

Событие «Нажат тормоз» приводит к переходу из состояния «Начало без торможения» в состояние «Начало с торможением», а событие «Тормоз отпущен» – к обратному переходу.