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

×


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

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


Сообщения - [прилетело НЛО и...]

Страницы: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 »
481
Попробовал со слиянием.
Прошу еще раз посмотреть, оценить правильность.
На диаграмме есть лишний поток управления от "удалить товар" к "оформлению заказа".
Пока клиент не зарегался / не авторизовался, не ясно как определить были ли у него раньше покупки или нет. Разумно предложить клиенту авторизоваться либо зарегаться и после его выбора выводить нужную форму.
Не вижу смысла сначала вводить адрес доставки, а затем выбирать её способ. Например, если способ = самовывоз, может не понадобится вводить адрес. Вероятно, следует поменять местами, либо объединить.
У диаграммы лишь одни финальный узел, т. е. у ВИ лишь один возможный исход -- успешное оформление заказа. Заказ нельзя отменить, авторизация всегда успешна, регистрация всегда успешна. Разумно показать на диаграмме неуспешные завершения и альтернативные потоки, ведущие к ним.
Нигде нет сторожа, проверяющего, что заказ оформляется по непустой (после удалений товаров) корзине. Аналогично, нет сторожа для удалений из пустой корзины.

482
Похоже мы (вдвоем, за стандарт пока утверждать не буду :) ) по-разному понимаем то, что называем состоянием-исходом для перехода:
Я не пишу о своём понимании, я показываю, что можно вкладывать смыслы, отличающиеся от стандартных, и получать более внятные, на мой взгляд, объяснения чем те, что предлагает стандарт. У Харела нет деления переходов на локальные/внешние/внутренние. От этого его "метамодель" ничуть не страдает.
Недостаток стандарта мне видится в том, что кое-что, выраженное в конкретном синтаксисе, не нашло явного отражения в абстрактном синтаксисе. Имеется в виду невнятица про владельца, из-за которой в Ваших 3-х примерах его для внешнего перехода придётся определять на глазок, а не по метамодели.

483
Давайте по шагам:
Да, можно идти по шагам. Но можно взглянуть с другого угла на диаграммы состояний: не через призму понятий, предлагаемых стандартом, а через исходные положения Харела, через рассмотренные нами примеры. Всё наше обсуждение, как мне кажется, показало, что нарисованное на диаграмме вполне можно понять, а написанное в стандарте даёт такую терминологию, метамодель и семантику, что смыслы расходятся с нарисованным. Можно продолжать держаться за написанное и патчить. Можно смотреть как то же самое нарисованное изложил другими словами Харел. Можно пытаться подбирать свои собственные слова, подходящие к тому, что видит на диаграмме глаз.
Переход имеет ровно одно состояние-исход.
В примере 1 исходом перехода по стандарту и по "нестандарту" является состояние С.
В примере 2 исходом перехода по стандарту является состояние С а по "нестандарту" являются состояния С и B.
В примере 3 исходом перехода по стандарту является состояние С а по "нестандарту" являются состояния С, B и A.
"Нестандарт" мы видим глазами на диаграмме и понимаем, что при переходе придётся выйти из 1 (в примере 1), 2 (в примере 2) и 3 (в примере 3) состояний. Но стандартное понимание исхода узко. Оно говорит, что во всех 3 случаях исход 1. Стандартное понимание исхода позволяет выразить лишь то, надо ли делать exit из состояния, от которого непосредственно начинается переход. Видимое глазами нестандартное понимание исхода позволяет выразить то, что надо делать exit'ы всех покидаемых состояний.
Внешность/локальность перехода определяется по отношению к переходу целиком
В примере 1 переход внешний по стандарту, а по "нестандарту" он внешний для С, но локальный для B (кандидата во владельцы перехода) и А.
В примере 2 переход внешний по стандарту, а по "нестандарту" он внешний для С и B, но локальный для А (кандидата во владельцы перехода).
В примере 3 переход внешний по стандарту, а по "нестандарту" он внешний для С, B и А. Владеет переходом сам автомат (по "нестандарту").
Нестандартное понимание согласуется с видимым глазом расположением части стрелки за границами состояния, по отношению к которому исследуется локальность/нелокальность.
Переход внешний рисуется наружу от границы состояния-исхода и не имеет ограничений кто будет состоянием-целью (соответствующий экземпляр метакласса Transition имеет значение атрибута kind равное external).
Это положение показывает, как стандартное понимание отдаляется от визуального. Глаз видит, что то, будет ли переход внешним (т. е. будет ли автомат делать exit'ы и какие), зависит от всего перехода, от того, как он лёг на диаграмму и на границы состояний, а не только лишь от того, где переход начался.

Не примите выше написанное за попытку предлагать нестандартные термины, метамодель и проч. В обсуждении приведён ряд диаграмм, авторы которых составляли их, опираясь на видимые глазом смыслы и вошли в противоречие со стандартом. Учитывая, что среди авторов известные специалисты и один из "троих друзей", можно предположить, что стандарт не рассчитан на такие примеры. Более простые машины состояний он описывает верно и в полном соответствии с увиденным. А эти -- в неполном.

484
Переход имеет ровно одно состояние-исход, и по отношению к именно этому состоянию определяется будет переход внешним (будет выход и выходная деятельность из этого состояния) или локальным (не будет выхода и выходной деятельности)
Ваши 3 примера, как мне кажется, показывают, что это не так. Если локальностью перехода считать то самое "будет ли действие по выходу и прерывание do-деятельности", то выйдет, что внешность/локальность можно определять не только для исхода, но для любого состояния, к которому переход имеет отношение.
В UML владение тоже соответствует расположению перехода внутри границ состояния.
Почему бы так и не сказать в стандарте? Всё началось с того, что в примерах Фаулера расположение группового перехода в границах региона не соответствует тому, что этому переходу стандарт предписывает выходы из соседних регионов.
Этого не хватает для локальных переходов для того, чтобы владелец перехода был в иерархии подчинения состояний не ниже исхода.
Если не привязывать понятие локальности исключительно к исходу, то промежуточный элемент в иерархии не нужен, я полагаю.

485
Написать свой патч к стандарту было бы круто, но я вряд ли в это смогу внести свой вклад.
По-моему, внешность/локальность перехода рассматривается в зависимости от некоторого состояния. Один и тот же переход может быть внешним для одного состояния и локальным для другого. Понятие владения переходом по смыслу связано или близко с его локальностью. Метамодель этого не отражает. Стандарт чётко об этом не говорит. И это неожиданный [для меня] неприятный сюрприз.
По-моему, у Харела было изящно: ортогональное состояние описывается декартовым произведением нескольких состояний. Т. е. хареловские регионы -- это полноценные состояния. Не увеличивается количество сущностей. Владение (если оно им не вводилось, то можно ввести) соответствовало расположению перехода внутри границ состояния.
 

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

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

487
Искал в стандарте, где это зафиксировано не в виде фразы (сама фраза - 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 Смотреть с осторожностью. Уровень вложенности доходит до шести. )))

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

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

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

489
Кажется, что эти утверждения противоречат друг другу, но это не так. В первом идет речь о синтаксисе и под словом "переход" подразумевается то, что на диаграмме изображается ровно одной линией со стрелкой, которая идет от (псевдо)состояния источника к (псевдо)состоянию цели. Во втором же говорится о семантике, и под словом "переход" понимается смена одного состояния на другое (под состоянием здесь понимается тоже не то, что в первом).
Разница хорошо ощущается при ортогональных композитных состояниях:
   в первом утверждении состояния это 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й трактовке. Иначе выходит, что установка часов вызывает переключение единиц измерения температуры (с Цельсиев на Фаренгейты).

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

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

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

493
В исходном тексте:"Figure 10.5 shows a pathetically simple alarm clock that can play either CDs or the radio and show either the current time or the alarm time." То есть, имелось в виду, что когда будильник срабатывает (событие on), то может либо заиграть CD, либо заработать радио.
Второй фрагмент: "Figure 10.5 also includes a history pseudostate. This indicates that when the clock is switched on, the radio/CD choice goes back to the state the clock was in when it was turned off. The arrow from the history pseudostate indicates what state to be in on the first time when there is no history." То есть, переводчик снова отличился.

Пусть текущее состояние Off и происходит событие on. Совершается переход в композитное состояние с 2-мя ортогональными регионами. В этом переходе неявный fork, то есть, текущим станет сочетание из двух подсостояний, взятых из разных регионов. В верхнем регионе есть начальное псевдосостояние, следовательно, можно определить, что текущим станет DisplayTime. В нижнем регионе начального состояния нет. Значит, диаграмма ill formed. То, о чём пишет Фаулер, было бы справедливо, если бы нижний регион содержал начальное состояние. См. приложенный вариант. Подобные ошибки (псевдосостояние истории есть, а переходов в него нет) содержатся в книге Леоненкова.
На счёт И и ИЛИ стандарт указывает, что составные диаграммы как бы порождают И-ИЛИ дерево, описывающее какие конфигурации состояний допустимы. Для рассматриваемого примера дерево будет:
OR
 Off
 On
  AND
   OR
    DisplayTime
    DisplayAlarmTime
   OR
    PlayCD
    PlayRadio

Отдельно замечу, что на диаграмме отсутствуют действия и деятельности. То есть, работа радио, CD, отображение времени -- всё это в воображении. Автомат лишь переключается между состояниями, и больше ничего не делает. Тут было бы уместно вспомнить тему про то, чему не следует учить.

494
Дефектом обоих вариантов диаграммы является отсутствие в нижнем регионе начального состояния и перехода из него в историческое псевдосостояние. Т. о. в любом случае диаграмма ill formed.

495
Можно прибавить, что в книге Блахи и Рамбо есть пример другой диаграммы с такими же групповыми локальными переходами (стр. 151, рис. 6.11). Пример трактуется так же как у Фаулера.
P. S. Если бы на диаграмме Фауле переход был бы не локальным, а внешним, то после него была бы активной конфигурация состояний DisplayCurrentTime & PlayingRadio.

Страницы: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 »