Автор Тема: Рефакторинг диаграммы состояний  (Прочитано 897 раз)

Vadim

  • Full Member
  • ***
  • Сообщений: 150
  • Рейтинг читателей: 30
    • Просмотр профиля
Рефакторинг диаграммы состояний
« : 08 Ноября 2016, 17:40:01 »
Есть исходная диаграмма (вложение 1).
Поскольку из ВСЕХ подсостояний состояния "забирание" есть переходы по событию "сохранить" с очень схожими свойствами, хочется повысить выразительность диаграммы (графически подчеркнуть наличие перехода по событию "сохранить" из любого подсостояния и схожесть результатов такого перехода).
Для подсостояний "ОК" и "ошибка" решение простое: объединяем их композитным состоянием "нет" и переход "сохранить" делаем от этого композитного состояния (вложение 2).
Для подсостояний "ОК" и "есть" тоже есть вариант: объединяем их композитным состоянием с псевдосостоянием истории и переход делаем от этого композитного состояния к псевдосостоянию истории (вложение 3).
Для всех подсостояний получилось как-то "некрасиво" (вложение 4).
Может есть идеи?


[прилетело НЛО и...]

  • Full Member
  • ***
  • Сообщений: 216
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Рефакторинг диаграммы состояний
« Ответ #1 : 08 Ноября 2016, 19:33:43 »
Проще простого навести критику, а чтоб предложить, надо подумать, сделать пару витков по орбите. Поэтому в быстром ответе лишь замечание:
Во всех вариантах с "вертолётной площадкой" переходы в неё привычнее видеть нарисованными "крючком", т. е. с явным покиданием состояния, из которого они идут. Иначе они локальны. Стандарт разрешает локальные переходы в исторические псевдосостояния, но толком не говорит про то, как они работают, так как всюду переходы в исторические псевдосостояния рассматриваются в контексте входа в регион или в суперсостояние, их содержащее. При локальном переходе входа не происходит, что приводит к возможной трактовке перехода как возврата не к тому, откуда вышли, а к тому, куда последний раз вошли. Харел явно пишет, мол: "на вертолётную площадку садиться только извне состояния", даже если переход нарисован как "локальный" (в кавычках, так как у него нет такого термина). Там же он даёт пример "локального перехода" в историю. Но это переход из начального состояния, т. е. псевдопереход, имеющий отношение ко входу в состояние.
[...и улетело НЛО.]

Vadim

  • Full Member
  • ***
  • Сообщений: 150
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: Рефакторинг диаграммы состояний
« Ответ #2 : 08 Ноября 2016, 20:43:26 »
Прием с "вертолётной площадкой" подсмотрен у Харела (STATECHARTS: A VISUAL FORMALISM FOR COMPLEX SYSTEMS - fig.14,  fig.15, fig.34).
Поскольку композитное состояние во вложении 3 "искусственное" (не имеет ни входной, ни выходной деятельности), пара выход-вход ничего не меняет, то есть можно и "крючком".
В данной теме псевдосостояние истории не цель, а только средство - если есть возможность обойтись, то и ладно.

[прилетело НЛО и...]

  • Full Member
  • ***
  • Сообщений: 216
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Рефакторинг диаграммы состояний
« Ответ #3 : 10 Ноября 2016, 00:34:38 »
В 1996-м, описывая версию диаграмм для Statemate, он уже такого себе не позволял. Аналогично в 2004 в версии для Rhapsody. Оттуда и цитировалось. В 1987м в "On the formal semantics of statecharts" "вертолётная площадка" вообще оказывается набалдашником на конце "исторического входа" в состояние, непосредственно обрамляющее её. Т. е. три соавтора уговаривали его за "крючки" и уговорили. В версии электронных часов 1988-го года "On visual formalisms" схожий с фиг. 14 фрагмент решён им иначе (фиг. 22).
И, наконец, рассматривая драфт рисунка к статье, на которую Вы сослались, в "Statecharts in the making" (фиг. 20), мы видим в исходнике "крючки".) То есть, верстальщик не понял, почему "крючок", и испортил диаграмму!)

По теме: покружив так и этак, решило, что размер примера не даёт в достаточной мере оценить размер выгоды, получаемой после рефакторинга. Сначала у нас 3 состояния и 5 переходов (в сумме 8 ). Потом 4 состояния и 4 перехода (те же 8 ). Или 4 состояния + 4 перехода + 1 "верт-площадка" (ого, 9). Наконец, 4 состояния + 4 перехода + 2 псевдосостояния (ого-го, 10). По примитивной "количественной оценке" получаем, что первый вариант рефакторинга не упрощает диаграмму, а два других усложняют. Введя в исходную диаграмму больше подсостояний, можно ощутить движение к лучшему.

Но если считать не по стандарту, т. е. нестабильные вершины рассматривать как начала/продолжения переходов, то оценка всегда 8.
« Последнее редактирование: 10 Ноября 2016, 00:49:19 от [прилетело НЛО и...] »
[...и улетело НЛО.]

Vadim

  • Full Member
  • ***
  • Сообщений: 150
  • Рейтинг читателей: 30
    • Просмотр профиля
Re: Рефакторинг диаграммы состояний
« Ответ #4 : 10 Ноября 2016, 11:49:18 »
размер примера не даёт в достаточной мере оценить размер выгоды, получаемой после рефакторинга
Пример специально уменьшен - осталось только самое необходимое (почти). В реальности может быть более объёмная конструкция: например есть choice или junction - повторять одно и тоже несколько раз и утомительно, и опасно (в случае внесения изменений необходимо поправить в нескольких местах). И читателю диаграммы придется самостоятельно делать вывод об однотипности деятельности по определенному событию для разных подсостояний.

[прилетело НЛО и...]

  • Full Member
  • ***
  • Сообщений: 216
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Рефакторинг диаграммы состояний
« Ответ #5 : 11 Ноября 2016, 01:37:31 »
Ну вот экзотическое решение с состоянием подмашины. Если у Ok и Avail разные кишки, то подмашину ещё придётся и экстендить. Из пушки по воробьям.
[...и улетело НЛО.]