Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Design Patterns via C#.pdf
Скачиваний:
154
Добавлен:
17.03.2016
Размер:
13.25 Mб
Скачать

249

Паттерн State

Название

Состояние

Также известен как

FSM (Finite-State Machine) - КА (Конечный автомат или Машина состояний)

Классификация

По цели: поведенческий По применимости: к объектам

Частота использования

Средняя

- 1 2 3 4 5

Назначение

Паттерн State – позволяет объекту изменять свое поведение в зависимости от своего состояния. Поведение объекта изменяется на столько, что создается впечатление, что изменился класс объекта.

Введение

Паттерн State описывает способы и правила построения объектно-ориентированного представления конечных автоматов (КА). Конечные автоматы классифицируются по логическим свойствам функций переходов и выходов, а также по характеру отсчёта дискретного времени.

По способу формирования функций выходов выделяют автоматы Мили и Мура. У автоматов Мили функции выходов находятся на ребре, а у автоматов Мура функции выходов находятся в состоянии. По характеру отсчёта дискретного времени автоматы делятся на синхронные и асинхронные.

Конечный автомат Мили

Рассмотрим простейший тип конечно-автоматного преобразователя информации: Автомат Мили. Определим конечный автомат формально. Есть и другие определения, но мы остановимся на этом.

ОПРЕДЕЛЕНИЕ: Конечным автоматом Мили называется шестерка объектов:

A= <S, X, Y, s0, δ, λ>, где:

S - конечное непустое множество (состояний);

X - конечное непустое множество входных сигналов (входной алфавит)

Y - конечное непустое множество выходных сигналов (выходной алфавит)

- начальное состояние

: × → - функция переходов

: × → - функция выходов

Задавать автомат удобно графом, в котором вершины соответствуют состояниям, а ребро из состояния sn в состояние sm, помеченное x/y, проводится тогда, когда автомат из состояния sn под воздействием входного сигнала x переходит в состояние sm с выходной реакцией y.

250

ПРИМЕР:

Зададим конечный автомат, который имеет:

четыре состояния, S = {s0, s1, s2, s3}

два входных сигнала X = {x0, x1}, где: x0 = 0, x1 = 1

шесть выходных сигналов Y = {y0, y1, y2, y3, y4, y5} где: y0 = 1, y1 = 2, y2 = 3, y3 = 4, y4 = 5, y5 = 6.

Теперь представим автомат в виде графа:

Граф 1.

Кроме графического представления автомата, можно использовать и табличное, задавая функции переходов и выходов в виде таблиц. Представим данный автомат таблично. Таблица 1 - определяет функцию переходов автомата из одного состояния в другое.

Функция переходов δ (sn, xn) определяется так: δ (s0, 0) = s1; δ (s2, 1) = s0; ….

δ

0

1

 

 

 

s0

s1

s3

 

 

 

s1

s2

s0

 

 

 

s2

s2

s0

 

 

 

s3

s1

s3

 

 

 

Таблица 1.

Таблица 2 - определяет функцию выходов λ (sn, xn) так: λ (s0, 0) = y2; λ (s2, 1) = y3; ….

λ

0

1

 

 

 

s0

y2

y4

 

 

 

s1

y1

y3

 

 

 

s2

y0

y3

 

 

 

s3

y2

y5

 

 

 

Таблица 2.

251

Реализация конечного автомата Мили

Для программной реализации будет использоваться язык C# и технология WWF – как инструменты, упрощающие реализацию программных конечных автоматов. На рисунке 1, представлена блок-схема (WWF) программы, реализующей поведение автомата.

Рисунок 1.

Нетрудно увидеть, что топология блок-схемы программы повторяет топологию графа переходов конечного автомата. С каждым состоянием связана операция, выполняющая функцию ожидания очередного события прихода нового входного сигнала и чтение его в стандартный буфер – int x, а также последующий анализ того, какой это сигнал. В зависимости от того, какой сигнал пришел на вход, выполняется та или иная функция y0 – y5 и происходит переход к новому состоянию. Построив программу подобную этой и добавив активные устройства, реализующие отдельные входные и выходные операции, можно управление каким-либо процессом поручить компьютеру.

См. Пример к главе: \020_State\002_MealyStateMachine

Конечный автомат Мура

Рассмотрим еще один тип конечно-автоматного преобразователя информации: Автомат Мура. Автоматы Мура образуют другой класс моделей, с точки зрения вычислительной мощности полностью эквивалентных классу автоматов Мили. В автомате Мура: A = <S, X, Y, s0, δ, λ>, выходная функция λ определяется не на паре <состояние, входной сигнал>, а только на состоянии : → . Выход автомата Мура определяется однозначно тем состоянием, в которое автомат переходит после приема входного сигнала.

252

ПРИМЕР:

Зададим конечный автомат Мура, который будет являться эквивалентным автомату Мили, рассмотренному выше. Не составит труда преобразовать исходный автомат Мили в автомат Мура. На графе автомата Мили легко прослеживается взаимосвязь элементов входного и выходного алфавитов.

Построив таблицу соответствий состояний автомата Мили алфавитным парам, легко увидеть какие состояния требуют расщепления.

 

x0

x1

Расщепление состояния S

 

 

 

 

s0

y3

y3

Не требуется

 

 

 

 

s1

y2

y2

Не требуется

 

 

 

 

s2

y0

y1

s2 = {s2, s4}

 

 

 

 

s3

y4

y5

s3 = {s3, s5}

 

 

 

 

Таблица 3.

Состояния s2 и s3 автомата Мили расщепляются на два эквивалентных состояния: s2 = {s2, s4}, s3 = {s3, s5}, с каждым из которых связывается один выходной символ.

Автомат Мура будет иметь:

шесть состояний, S = {s0, s1, s2, s3, s4, s5}

два входных сигнала X = {x0, x1}, где: x0 = 0, x1 = 1.

шесть выходных сигналов Y = {y0, y1, y2, y3, y4, y5} где: y0 = 1, y1 = 2, y2 = 3, y3 = 4, y4 = 5, y5 = 6.

Теперь представим автомат Мура в виде графа (в сравнении с автоматом Мили):

Автомат Мили

Автомат Мура

Граф 2.

253

Реализация конечного автомата Мура

На рисунке 2, представлена блок-схема (WWF) программы реализующей поведение автомата Мура.

Рисунок 2.

Нетрудно увидеть, что топология блок-схемы программы повторяет топологию графа переходов конечного автомата. С каждым состоянием связана операция, выполнения определенных действий при наступлении данного состояния, ожидания прихода нового входного сигнала, чтение его в стандартный буфер – int x, а также последующий анализ того, какой это сигнал и перевод автомата в новое состояние.

См. Пример к главе: \020_State\003_MooreStateMachine

Рассмотренные программные модели автоматов Мура и Мили - полностью эквивалентны.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]