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

       

Выделение составного состояния по общему переходу


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

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

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

Рис. 14.Исходный конечный автомат

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

Применение данной трансформации к автомату, изображенному на рис. 14, позволяет выделить составное состояние On, содержащее состояния X, Y, Q, Z, если в качестве выделенного перехода использовать переход по сигналу TurnOff (). Для спецификации внутренностей составного состояния создается диаграмма, приведенная на рис. 15, а модифицированный исходный автомат показан на рис. 16. Введение иерархического состояния позволило упростить исходную диаграмму за счет удаления дублировавшихся переходов и сделать ее более наглядной и понятной.

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

Для сложных автоматов достаточно типична ситуация, когда какое-либо событие должно быть одинаковым образом обработано в нескольких состояниях, при этом его обработка не должна прерывать основной ход событий, то есть по его окончании автомат должен возвратиться в исходное состояние. Примером таких событий может быть протоколирование какой-либо активности либо другие «фоновые» для автомата задачи. Моделирование такого поведения вынуждает разработчиков определять для каждого из состояний, в котором должна быть обработана «фоновая» активность, переход, содержащий эквивалентную последовательность действий и возвращающий автомат в исходное состояние. Такие переходы избыточны, загромождают описание автомата и мешают его восприятию, как, например, на .

Предлагаемая трансформация выполняется во многом аналогично предыдущей. На первом шаге выделяется множество состояний A1…An автомата S, для каждого из которых существует переход Ti, обладающий следующими свойствами: он срабатывает при условии t, в нем выполняются действия act, и после его завершения автомат возвращается в исходное состояние Ai. К автомату S добавляется новое составное состояние B, содержащее состояния A1…An, а для спецификации состояния В создается отдельная диаграмма D. К автомату S добавляется переход T из состояния B по стимулу t, выполняющий действия act и завершающийся оператором перехода в состояние истории (deep history state). Если у множества состояний A1…An имеется только одна входная точка A1, то возможно дальнейшее преобразование автомата. Все операторы перехода в состояние A1 заменяются операторами перехода в состояние В, а к состоянию В добавляется стартовый переход, ведущий в состояние A1.


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



Рис. 15. Результат трансформации: спецификация составного состояния On

Создание в автомате S нового составного состояния B, явно содержащего состояния A1…An, корректно в том и только том случае, когда это добавление не нарушает строгую иерархию состояний по включению. Иными словами, новое состояние, будучи изображенным на любой диаграмме состояний, описывающей автомат, не должно пересекать границы уже существующих состояний. Перенос перехода T из состояний D1…Dn в состояние E корректен только в том случае, если E является составным состоянием и не содержит явно никаких состояний, кроме D1…Dn, а в каждом из состояний D1…Dn есть либо переход, эквивалентный T, либо переход, срабатывающий при тех же условиях, что и T.



Рис. 16. Результат трансформации: модифицированный исходный автомат



После этого становится возможным переместить состояния A1…An с исходной диаграммы на диаграмму D (Рис. 19), добавив вместо них состояние В и переход Т к исходной диаграмме (Рис. 18).



Рис. 18. Результат трансформации




Рис. 19. Результат трансформации

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


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