Форум Сообщества Аналитиков

×


Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Vadim

Страницы: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 »
181
Написать свой патч к стандарту было бы круто
Цель, конечно, не модифицировать стандарт, а в нём самом найти решение, или просто найти решение
По-моему, внешность/локальность перехода рассматривается в зависимости от некоторого состояния. Один и тот же переход может быть внешним для одного состояния и локальным для другого.
Переход имеет ровно одно состояние-исход, и по отношению к именно этому состоянию определяется будет переход внешним (будет выход и выходная деятельность из этого состояния) или локальным (не будет выхода и выходной деятельности)
Владение (если оно им не вводилось, то можно ввести) соответствовало расположению перехода внутри границ состояния.
В UML владение тоже соответствует расположению перехода внутри границ состояния.
хареловские регионы -- это полноценные состояния
этого не хватает для локальных переходов для того, чтобы владелец перехода был в иерархии подчинения состояний не ниже исхода

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

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

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

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


185
Владелец перехода -- элемент метамодели 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 перехода, а кто будет владеть каждым из них?

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

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

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

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

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

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

190
Цитировать
радио или CD включается всегда при включение будильника
Когда текущим является композитное состояние с ортогональными регионами (On), тогда в каждом из регионов (верхний и нижний) текущим будет ровно одно из состояний региона (для верхнего: DisplayCurrentTime или DisplayAlarmTime, для нижнего: PlayRadio или PlayCD). А конкретный выбор в каждом случае и определяется наличием в регионах начальных и исторических псевдосостояний и переходами из них. То есть если будильник включен, то либо включено радио, либо включено CD.
Цитировать
А если, например, включение радио или CD происходит в зависимости от истории. Как это показать?
На диаграмме(ах) показано, что выбор, радио или CD будет включено при включении будильника, зависит от того, что было включено при выключении будильника (наличие исторического псевдосостояния). А то, что включается радио, если выключений будильника пока не было, показывает исходящий из исторического псевдосостояния переход. Такая на диаграмме(ах) зависимость от истории. Если нужна другая, то надо разобрать какая,

191
Супер! Обсуждение стало конструктивным и результативным.
Цитировать
Переходы, начинающиеся с границы состояния On являются не внутренними, а локальными
Мой косяк :'(
Цитировать
Замечу, что попадается более прозрачная версия той же диаграммы, лишённая к тому же недостатка, из-за которого из PlayingRadio по событию Radio приходится выходить и тут же возвращаться обратно.
Эти диаграммы эквивалентны только тогда, когда нет действий (по терминологии Рамбо и Блаха) или активностей (по терминологии Фаулера) ни при выходе из состояния, ни при входе в состояние, ни при переходе. Например: пусть при входе в состояние Play(ing)Radio происходит настройка на "любимую" станцию. В одной диаграмме настройка будет происходить при любом событии Radio, а в другой - только если состояние Play(ing)CD.
Цитировать
В нижнем регионе начального состояния нет. Значит, диаграмма ill formed. То, о чём пишет Фаулер, было бы справедливо, если бы нижний регион содержал начальное состояние. См. приложенный вариант. Подобные ошибки (псевдосостояние истории есть, а переходов в него нет) содержатся в книге Леоненкова.
Многие источники (не только Фаулер) считают, что историческое псевдосостояние без входящего перехода, но с исходящим переходом заменяет начальное псевдосостояние, когда происходит первый вход. То есть, при первом входе в состояние On текущим состоянием в нижнем регионе становится Play(ing)Radio.
Интересная тема: возможные варианты сочетания начального и исторического псевдосостояний в одном регионе и наличия (отсутствия) исходящих (входящих) переходов исторического псевдосостояния (с начальным всё ясно: не более одного, никаких входящих и ровно один исходящий)!

192
Есть диаграмма автомата (в стартовом сообщении).
Необходимо разобраться:
  • что произойдет (в соответствии с диаграммой), если в состоянии (композитном) DisplayAlarmTime & PlayingCD наступит событие Radio;
  • почему произойдет именно так (какое состояние станет активным и по какому правилу).

193
Наверно, что-то не так сделал - ни одного ответа. А как правильно - не знаю...

194
Есть известная диаграмма (во вложении).
Если в состоянии DisplayAlarmTime & PlayingCD происходит событие Radio, то в какое наступит состояние:
  • DisplayAlarmTime & PlayingRadio (правило: если во внутреннем переходе для региона нет никаких указаний, то текущее состояние в регионе не изменяется)
  • DisplayCurrentTime & PlayingRadio (правило: если в переходе в параллельное композитное состояние для региона нет никаких указаний, то текущее состояние в регионе определяется начальным псевдосостоянием)?

195
Замена ассоциации атрибутом эквивалентна только тогда, когда кратность убираемого полюса ассоциации 0..* (чтобы заменить ассоциацию "крупные города страны" можно ввести в Город атрибут Страна, но нельзя ввести в Страну атрибут Крупные Города).

Страницы: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 »