Короче говоря
Основываясь на спецификациях UML 2.5, этот тип диаграмм является вполне допустимым.Тем не менее, с помощью дедукции мы можем понять, что это не лучший подход.
Подробности: почему оно действительно
Согласно определениям (раздел 14.2.3.4.1
):
State1
является составное состояние , выполненное ровно из одной области . State2
и State3
являются простыми состояниями , и в этом случае они также прямые подсостояния из State1
Первый ответ на ваш вопрос предлагается по правилам ввода состояния (раздел 14.2.3.4.5
):
Явный ввод: если входящийПереход или его продолжения завершаются в непосредственно содержавшемся подсостоянии составного состояния, затем это подсостояние становится активным и ...
Это также усиливается в правилах, касающихся регионов (раздел 14.2.3.2
),а точнее к их активации:
Таким образом, ваша диаграмма совершенно верна, с явным переходом из исходного состояния вподсостояние State2
.
Подробности: почему это не рекомендуется
Прежде всего, предлагается (раздел 14.2.4.5.1), что это может помочь в некоторых случаях скрыть разложение составного состояния:
- При явной активации для такого сокрытия потребуется нарисовать вариант модели, показывающий переход от исходного к
State1
вместо прямого перехода к State2
. - При активации по умолчанию у вас будет только одна модель: начальная для State1 и State1 :: начальная для State2.До вас, чтобы показать или скрыть детали.Или увеличить масштаб региона, игнорируя его контекст.
Затем, если позже вам понадобится расширить составное состояние несколькими «ортогональными» областями:
- при активации по умолчанию, вы просто добавите дополнительные области сих собственная активация по умолчанию.
- при явной активации у вас будет асимметрия между одной (явно активированной) областью и другими областями (которые требуют активации по умолчанию).
- в качестве альтернативы, вы можете рассмотреть возможность использования нескольких явных активаций.Но это не очень хорошо поддерживается: во-первых, нет перехода с несколькими целевыми объектами, во-вторых, множественные переходы из (внешнего) исходного состояния в разные (внутренние) целевые подсостояния могут быть неоднозначными в отношении семантики и модели выполнения переходов.
Спецификации UML предупреждают, что, если активация по умолчанию отсутствует, следует рассматривать модель как плохо определенную или что регион никогда не запустится.Поэтому безопаснее использовать системный подход и всегда использовать активацию по умолчанию.