Методы композиции и декомпозиции исполняемых UML моделей

       

Выделение в метод возвратной части конечного автомата


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

Согласно исследованию, проведённому в [], многие конечные автоматы, используемые в промышленных системах, содержат в себе несколько возвратных частей для различных состояний. Многие из них состоят из 1-3 состояний, однако в каждом третьем конечном автомате с большим количеством состояний встречаются возвратные части из 4 и более состояний.

Большое количество состояний затрудняет восприятие общей схемы работы конечного автомата. Зачастую такой конечный автомат приходится описывать на нескольких диаграммах, что нарушает целостность картины. Однако все состояния, входящие в возвратную часть конечного автомата, можно перенести в отдельный метод, что сократит общее количество состояний автомата. Назовём такую трансформацию «выделением в метод возвратной части конечного автомата».

Рассмотрим определение части модельного конечного автомата, представленное на Рис. 1. Это автомат допускает выделение метода, так как для состояния X существует возвратная часть конечного автомата, состоящая из одного состояния Y.

Рис. 1.Часть автомата, допускающая выделение метода



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

В результате применения трансформации «выделение метода», создаётся метод Proc () с реализацией в виде конечного автомата. Все состояния из возвратной части конечного автомата (в данном примере только Y ) переносятся в выделенный метод. Действия, приписанные переходу в Y, становятся действиями, приписанными начальному переходу конечного автомата метода Proc (). Вместо них в исходный конечный автомат вставляются вызов метода Proc () и команда перехода в исходное состояние X (Рис. 2).


Все команды перехода в состояние X в созданном конечном автомате заменяются командами возврата из метода (return) (Рис. 3).



Рис. 3. Описание выделенного метода Proc ()

Часть автомата, выделенная в метод, обладает следующей семантикой: получив сигнал sig3 (), автомат выполняет некоторые действия, начиная с состояния Y, по завершении которых возвращается в состояние X. Подобная логика близка по смыслу к вызову метода - выполнение задачи с последующим возвратом в исходное состояние. Именно это и служит основанием для выделения метода.

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

Существует частный случай трансформации - выделение в метод группы состояний автомата, все переходы из которых завершают работу автомата, то есть ведут в символ stop. В этом случае выделение метода корректно, если все команды завершения работы автомата в выделенном методе (stop) заменяются командами возврата из метода (return), а вместо действий, приписанных исходному переходу, добавляются вызов метода Proc () и команда завершения работы автомата (stop).

В таком случае преобразованный автомат будет выглядеть так, как показано на Рис. 4:



Рис. 4. Результаты применения второго варианта трансформации


Содержание раздела