#uml #state-machine #multiple-instances
#uml #конечный автомат #несколько экземпляров
Вопрос:
Мне было интересно, не могли бы вы помочь мне прояснить два аспекта, касающиеся конечных автоматов с несколькими экземплярами.
Первый вопрос
Рассмотрим пример конечного автомата SM1, содержащий одно состояние A:
Слева, начало перехода создает новый экземпляр конечного автомата. Остановка перехода завершает экземпляр. Может быть несколько экземпляров конечного автомата SM1, работающих параллельно, например, 5 экземпляров.
Теперь я хочу, чтобы переход завершал ВСЕ экземпляры конечного автомата SM1, которые выполняются в данный момент времени. Например. мы создаем пять конечных автоматов A, а затем переход stopALL завершит их ВСЕ сразу.
Разрешено ли такое поведение спецификацией UML? Если да, существует ли графическое обозначение для однозначного представления такого поведения? Я не смог найти ответ в документе спецификации UML.
Второй вопрос
Рассмотрим конечный автомат SM2 с несколькими экземплярами с состоянием A и одним переходом StartStop:
Поведение перехода выглядит следующим образом: при запуске переход создает новый экземпляр SM2 и завершает существующий.
Разрешено ли такое поведение спецификацией? Существует ли однозначный графический способ выразить такое поведение?
Ответ №1:
Специального метода UML не существует, но стандартных инструментов UML абсолютно достаточно. Вам необходимо передать сигнал завершения (на диаграмме конечного автомата вы можете представить его по поведению при переходе, который должен завершать другие экземпляры). Затем вам просто нужно смоделировать, что при завершении приема конечный автомат переходит в конечное состояние.
Завершить весь пример
Обратите внимание, что поведение после косой черты (/) — это поведение, вызываемое при переходе состояния, т.Е. Когда конечный автомат изменяет свое состояние на final, вызывается поведение sendStopAllSignal, которое, в свою очередь, должно быть описано на диаграмме классов (возможно, с соответствующей диаграммой действий). Аналогично, вам необходимо включить поведение receiveStopAllSignal вдиаграмма классов.
Завершение существующего при запуске
Это аналогичная ситуация — вам нужно, чтобы оба sendStopSignal и receiveStopSignal были смоделированы в другом месте.
Однако обратите внимание, что такое соглашение об именовании (sendAbcSignal для поведения отправки / широковещательного сигнала Abc и receiveAbcSignal для поведения в качестве реакции на прием сигнала Abc) является довольно распространенным, полезным и понятным (т. Е. Вы, Вероятно, не будете моделировать отдельные диаграммы действий для этого поведения, если там не требуется дополнительная логика).
Комментарии:
1. Спасибо, Истер, это было бы потрясающе. Не могли бы вы указать мне на спецификацию OMG UML, где говорится о широковещательных сигналах? Я вижу только информацию, связанную с классом, и ничего, связанного с конечным автоматом.
2. Найдите BroadcastSignalAction и / или SignalBroadcastAction (ну …) в спецификации UML OMG.
3. Итак, как я понимаю из первого абзаца в 13.3.3.2, это часть текстовой записи, а не графической. Фактически, графически это поведение не может быть выражено явно.
4. Хотя это выглядит как небольшое изменение по сравнению с вашими диаграммами, оно имеет существенное значение, поскольку показывает, что действие запускается при переходе. Более того, если вы хотите явно смоделировать, что сигнал транслируется, вам нужно использовать для этого другие диаграммы, например диаграммы взаимодействия.
5. Большое спасибо, Истер. Вы сделали это очень ясно для меня.