Разрешено ли состояние без прямого перехода на диаграмме состояний UML? - PullRequest
0 голосов
/ 13 декабря 2018

Разрешено ли состояние без прямого перехода на диаграмме состояний UML (SD), как показано ниже для StarUML?

State1 напрямую не участвует ни в одном переходе, поэтому я сомневаюсь, разрешено ли это вUML / желательно.Я думаю, что в моем приложении я на самом деле моделирую несколько объектов в одной SD.

enter image description here

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Короче говоря

Основываясь на спецификациях 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 предупреждают, что, если активация по умолчанию отсутствует, следует рассматривать модель как плохо определенную или что регион никогда не запустится.Поэтому безопаснее использовать системный подход и всегда использовать активацию по умолчанию.

0 голосов
/ 15 декабря 2018

Диаграмма является допустимой диаграммой конечного автомата UML для одного объекта (не двух объектов, как вы подозревали).Однако State1 бесполезен, потому что объект всегда будет в State1 в течение всего времени его существования.Находясь в состоянии State1, он будет либо в состоянии State2, либо в состоянии State3.

0 голосов
/ 13 декабря 2018

State1 включает State2, поэтому косвенный переход существует для State1.Эта диаграмма эквивалентна переходу к State1 с переходом по умолчанию к State2, что было бы слишком запутанным.

...