Внутренний переход параллельного композитного состояния(Прочитано 73225 раз)
А если, например, включение радио или CD происходит в зависимости от истории. Как это показать? Да, и все-таки, радио или CD включается всегда при включение будильника, или в момент возникновения события будильника? На диаграмме, например можно предположить отражение текущего времени, включения сигнала будильника (т.е. радио или плеера :)
Vadim дельно описал, для чего Фаулер помещал на диаграмму историческое псевдосостояние. Поясню, почему событие on я связываю со срабатыванием будильника. Других кандидатов на срабатывание нет, а будильник должен когда-то срабатывать.
[...и улетело НЛО.]



Цитировать
Поясню, почему событие on я связываю со срабатыванием будильника. Других кандидатов на срабатывание нет, а будильник должен когда-то срабатывать.
А я думаю, что от будильника Фаулер взял только отображение времени срабатывания будильника. Сам же звонок и настройка времени срабатывания будильника (да и настройка текущего времени) остались за рамками диаграммы.



Добрался до Фаулера.
Я не понимаю, зачем в одной диаграмме объединять абсолютно не связанные между собой сущности.

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

Но именно это в данном случае и получилось.

Цитировать
Разделение двух областей поведения на две диаграммы состояний делает ее значительно яснее.

Если бы это было так, то не было бы этой темы на форуме. Просто нечего было бы обсуждать.
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)



Но именно это в данном случае и получилось.
Попробовал построить эквивалентную диаграмму без параллельных и вложенных состояний - 7 состояний и 15 переходов, вряд ли так лучше.



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

Но зачем располагать всё на одной диаграмме? Отображение времени и работа радио/CD между собой никак не связаны и не влияют друг на друга. Конечно, если все состояния независимых элементов попытаться впихнуть в одну диаграмму, мы получим экспоненциальный рост её сложности (в пределе придётся перемножать количество состояний всех элементов).

Почему не изобразить две (или три, если так уж необходимо рисовать на диаграмме состояния "вкл/выкл")?

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

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)



Отображение времени и работа радио/CD между собой никак не связаны и не влияют друг на друга.

Почему не изобразить две (или три, если так уж необходимо рисовать на диаграмме состояния "вкл/выкл")?
Между собой непосредственно не связаны, но оба/обе связаны с "вкл/выкл".

Каждая диаграмма рисуется с какой-то целью. Если это описание требований, то набор из нескольких диаграмм будет намного проще и понятнее. А в данном случае даже простое текстовое описание будет понятнее. Здесь на несчастные шесть состояний используется минимум шесть разных элементов языка. Такая визуализация бессмысленна.
Первоначальная цель темы - разобраться на простом примере в семантике, то есть как читать, а не как писать.
« Последнее редактирование: 08 Апреля 2016, 19:23:46 от Vadim »



Возможное решение с двумя вложенными автоматами (если хочется моделировать "несвязанное" отдельно). На самом деле это три диаграммы, которые склеены в редакторе. Места склейки пометил красным. Нестандартный узел среда VisualParadigm добавляет сама.
[...и улетело НЛО.]



По стандарту владельцем перехода является регион.
Но в стандарте при описании групповых переходов ничего не говорится о регионах, а подчёркивается, что групповой переход исходит из (всего) композитного состояния.
Кажется, что эти утверждения противоречат друг другу, но это не так. В первом идет речь о синтаксисе и под словом "переход" подразумевается то, что на диаграмме изображается ровно одной линией со стрелкой, которая идет от (псевдо)состояния источника к (псевдо)состоянию цели. Во втором же говорится о семантике, и под словом "переход" понимается смена одного состояния на другое (под состоянием здесь понимается тоже не то, что в первом).
Разница хорошо ощущается при ортогональных композитных состояниях:
   в первом утверждении состояния это 1)DisplayTime 2)DisplayAlarmTime 3)PlayCD 4)PlayRadio;
   во втором утверждении состояния это 1)DisplayTime&PlayCD 2)DisplayTime&PlayRadio 3)DisplayAlarmTime&PlayCD 4)DisplayAlarmTime&PlayRadio.



Кажется, что эти утверждения противоречат друг другу, но это не так. В первом идет речь о синтаксисе и под словом "переход" подразумевается то, что на диаграмме изображается ровно одной линией со стрелкой, которая идет от (псевдо)состояния источника к (псевдо)состоянию цели. Во втором же говорится о семантике, и под словом "переход" понимается смена одного состояния на другое (под состоянием здесь понимается тоже не то, что в первом).
Разница хорошо ощущается при ортогональных композитных состояниях:
   в первом утверждении состояния это 1) DisplayTime 2) DisplayAlarmTime 3) PlayCD 4) PlayRadio;
   во втором утверждении состояния это 1) DisplayTime&PlayCD 2) DisplayTime&PlayRadio 3) DisplayAlarmTime&PlayCD 4) DisplayAlarmTime&PlayRadio.
Владелец перехода -- элемент метамодели UML, т. е. речь не только от том, как изображать на диаграмме. Я полагаю, что владение переходом определяет не только внешний вид. Кстати, вопрос, кто владеет каждым рассматриваемым переходом.)
Разницу можно прочувствовать, если добавить действия по выходу в каждое вложенное состояние (stopDispleying..., stopPlaying...), или считать, что есть do-деятельности и следить, прерываются они или нет. По второй трактовке получается, что несмотря на то, что владеет переходом нижний регион[?], срабатывание перехода вызывает прекращение do-деятельностей в верхнем регионе (или выполнение действий по выходу).
У Рамбо и Блахи в их книге "UML 2.0. Объектно-ориентированное моделирование и разработка" есть пример 6.11 с термостатом. Я полагаю, что он нарисован по 1й трактовке. Иначе выходит, что установка часов вызывает переключение единиц измерения температуры (с Цельсиев на Фаренгейты).
« Последнее редактирование: 11 Апреля 2016, 15:05:35 от [прилетело НЛО и...] »
[...и улетело НЛО.]



Владелец перехода -- элемент метамодели UML, т. е. речь не только от том, как изображать на диаграмме. Я полагаю, что владение переходом определяет не только внешний вид. Кстати, вопрос, кто владеет каждым рассматриваемым переходом.)
Согласен с утверждением, а сам использовал понятия не модели, а диаграммы потому, что: 1)думалось так проще и понятнее 2)привык, что диаграмма должна отражать (почти) всё, что есть в модели.
Про владение переходами: on и off владеет единственный регион будильника целиком; alarm, time и переходом от начального к DisplayTime владеет верхний регион состояния On; CD, radio, переходом от начального к историческому и переходом от исторического к PlayRadio владеет нижний регион состояния On.
Разницу можно прочувствовать, если добавить действия по выходу в каждое вложенное состояние (stopDispleying..., stopPlaying...), или считать, что есть do-деятельности и следить, прерываются они или нет. По второй трактовке получается, что несмотря на то, что владеет переходом нижний регион[?], срабатывание перехода вызывает прекращение do-деятельностей в верхнем регионе (или выполнение действий по выходу).
Последний гвоздь в крышку гроба второй трактовки.
У Рамбо и Блахи в их книге "UML 2.0. Объектно-ориентированное моделирование и разработка" есть пример 6.11 с термостатом. Я полагаю, что он нарисован по 1й трактовке. Иначе выходит, что установка часов вызывает переключение единиц измерения температуры (с Цельсиев на Фаренгейты).
Переходом after(90 sec without input) владеет регион InteractiveDisplay [?]. Если его (переход) заменить на эквивалентную конструкцию с fork - получится 4 перехода, а кто будет владеть каждым из них?



Про владение переходом в стандарте пишут примерно так:
Кого считать владельцем перехода точно не определено, но это один из регионов, в котором содержится переход, и который принадлежит прямо или косвенно конечному автомату. Рекомендуется, чтобы владельцем перехода был регион такой что: исход и цель перехода находятся в нём; сам он находится глубже всего в иерархии вложенности. Если исход перехода по событию Radio на диаграмме Фаулера -- состояние On, то владельцем по этой рекомендации следует считать основной регион автомата.

Можно заключить, что смыслы, вкладываемые в примеры от Фаулера и Рамбо с Блахой нестандартны. Если бы UML позволял проводить границы не только между регионами внутри состояния, но и между регионом и состоянием, то групповые переходы от "границы региона" и групповые переходы от границы состояния могли бы наглядно показывать разницу между двумя трактовками. Полагаю, что Фаулер и Блаха с Рамбо рисовали переходы от "границы региона". А по стандарту эти переходы следует считать идущими от границы состояния.

Выходит, что переходом after(90 sec without input) действительно владеет регион InteractiveDisplay. При явном представлении в виде составного перехода владелец будет тот же.
[...и улетело НЛО.]



Про владение переходом в стандарте пишут примерно так:
Кого считать владельцем перехода точно не определено, но это один из регионов, в котором содержится переход, и который принадлежит прямо или косвенно конечному автомату. Рекомендуется, чтобы владельцем перехода был регион такой что: исход и цель перехода находятся в нём; сам он находится глубже всего в иерархии вложенности.
Искал в стандарте, где это зафиксировано не в виде фразы (сама фраза - 14.2.3.8.5 Transition ownership из UML 2.5), а как ограничение в метамодели - и не нашел.
Если исход перехода по событию Radio на диаграмме Фаулера -- состояние On, то владельцем по этой рекомендации следует считать основной регион автомата.
А если вместо этого перехода сделать 2 перехода (по одному для каждого подсостояния нижнего региона) по событию Radio, то они будут иметь владельцем нижний регион?
Если бы UML позволял проводить границы не только между регионами внутри состояния, но и между регионом и состоянием, то групповые переходы от "границы региона" и групповые переходы от границы состояния могли бы наглядно показывать разницу между двумя трактовками. Полагаю, что Фаулер и Блаха с Рамбо рисовали переходы от "границы региона". А по стандарту эти переходы следует считать идущими от границы состояния.
Может то, что переход локальный, говорит о том, что он идет от "границы региона"?

« Последнее редактирование: 18 Апреля 2016, 12:35:49 от Vadim »



Искал в стандарте, где это зафиксировано не в виде фразы (сама фраза - 14.2.3.8.5 Transition ownership из UML 2.5), а как ограничение в метамодели - и не нашел.
Действительно так. Я полагаю, что в этом месте стандарта лакуна.
А если вместо этого перехода сделать 2 перехода (по одному для каждого подсостояния нижнего региона) по событию Radio, то они будут иметь владельцем нижний регион?
Если следовать рекомендации стандарта, то так и будет. Ради эксперимента посмотрел как определит владельца перехода среда Visual Paradigm. Переходом от границы композитного состояния в этой среде владеет собственник этого состояния. Переходом к границе -- собственник состояния, из которого исходит переход. Т. е. владелец перехода совпадает с владельцем его истока (даже если переход идёт наружу из композитного состояния).
Может то, что переход локальный, говорит о том, что он идет от "границы региона"?
Локализация (если следовать стандарту) предусмотрена на уровне состояний, а не регионов-владельцев. Локальный переход выполняется без выполнения действий по входу и по выходу и без прерывания do-деятельности состояния, в котором он локализован. То, что локализация не связана с регионом-владельцем, тоже не способствует ясности картины.
Если обратиться к Д. Харелу, то можно видеть, что его "регионы", которые он называл компонентами ничем не отличаются от состояний. Ортогональное состояние у него образуется как результат декартова произведения компонент-состояний-сомножителей. http://www.wisdom.weizmann.ac.il/~harel/papers/Statecharts.pdf Также он рассматривает вопрос, рисовать ли границы ортогонального состояния (не совпадающие с границами регионов) -- рис. 21а и b. И, не видя необходимости в двойных границах, указывает как предпочтительный вариант с одинарными. Но вариант с двойной границей указан как возможный.
В "метамодели" Харела можно легко придти к той трактовке 2-й примеров Фаулера, Рамбо и Блахи, которую мы обсуждали.
Добавлю, что во всей коллекции примеров диаграмм от Харела нет ни одного примера, в котором переход идёт от границы региона. Есть рис. 14 из статьи по ссылке выше, но там обычное неортогональное состояние. Сборник примеров см. тут с 16-й страницы: http://www.wisdom.weizmann.ac.il/~harel/papers/Statecharts.History.pdf Смотреть с осторожностью. Уровень вложенности доходит до шести. )))
« Последнее редактирование: 18 Апреля 2016, 16:52:11 от [прилетело НЛО и...] »
[...и улетело НЛО.]



Я полагаю, что в этом месте стандарта лакуна.
И приходится её (лакуну) заполнять :)

Зачем вообще нужен владелец перехода (а по метамодели переход любого типа обязан иметь регион-владельца)?
Когда речь идет о внешнем переходе понятно, почему должен быть владелец - мало знать исход и цель. Например надо различать (см. вложения 1-3), а указание региона-владельца и позволит это сделать.
Если переход локальный, то зачем ему владелец? Мы и так знаем, что не выйдем за границы состояния, из которого исходит локальный переход (а значит и любого из регионов, в которые это состояние непосредственно или опосредованно входит)!
локализация не связана с регионом-владельцем
Не понял :'(



Не понял :'(
Описание внешних/локальных/внутренних переходов в стандарте осуществлено без упоминания термина регион. Там говорится о состоянии-истоке, и состоянии, содержащем переход. Содержащее переход состояние, видимо должно определяться по картинке, т. к. по метамодели его определить затруднительно, если следовать стандарту. Так, я полагаю, что с точки зрения стандарта все Ваши три примера неотличимы, если представлять их не графически, а как набор взаимосвязанных экземпляров метаклассов (элементов UML).
В прочем, сами составители стандарта ему не следуют. Например, на рис. 14.34 приведены примеры локальных переходов (см. аттач), но левый нижний переход не является локальным, он внутренний (его исток и его цель совпадают!). Внутренние переходы по стандарту изображаются без линий (см. 14.2.4.10). Т. е. рисунок из стандарта нарушает сам стандарт.)))

Про регионы в стандарте есть попытка разъяснения в 14.2.3.2. Я затрудняюсь понять, чего не хватало в исходном предложении Харела, и почему завели регионы.
[...и улетело НЛО.]




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19