Управление проектами - статьи



             

Выделение в метод части конечного автомата - часть 2


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

Введём несколько обозначений. Обозначим через RS(x, y) множество, содержащее все состояния автомата, в которые можно попасть из состояния y, не проходя при этом через состояние x, включая y и исключая x. Специальный символ stop добавляется в множество RS(x, y), если из состояния y за некоторое количество переходов можно дойти до действия, завершающего работу автомата (stop). Обозначим множество всех переходов некоторого конечного автомата A через All_T(A), а переход из состояния а в состояние b по сигналу z - через t(a, z->b).

Определение 1. Множество состояний S замкнуто на множестве переходов T, если не существует перехода

t(x',e->s)

T : s
S, x'
S

Трансформация Extract Sub State Machine для перехода t(x,e -> y) конечного автомата A, может быть применена при выполнении следующих трех условий:

  1. x != y, иначе RS пусто и это будет случай выделения автомата без состояний;
  2. множество RS(x,y) замкнуто на множестве переходов All_T(A)\t(x,e->y);
  3. stop
    RS(x, y).

Трансформация Extract Sub State Machine для перехода t(x,e -> y) заключается в следующем.

  1. Создаётся и добавляется в активный класс метод P с реализацией в виде конечного автомата.
  2. В этот метод перемещаются все состояния из множества RS(x, y) .
  3. Действия, приписанные переходу t(x,e -> y), становятся действиями, приписанными начальному переходу конечного автомата метода P(). Вместо них в исходный конечный автомат вставляется вызов метода P() и команда перехода в исходное состояние x.
  4. Все команды перехода в состояние x в созданном конечном автомате заменяются на команды возврата из метода (return).

8.gif

Рис. 8. Часть автомата после проведения преобразования Extract Method




9.gif

Рис. 9. Описание выделенного метода




Содержание  Назад  Вперед