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

×


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

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


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

Страницы: « 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 »
451
Хороший пример, вызвал вопрос - в примере из предыдущего сообщения (рис. 14.34 с состоянием s2) какими (локальными или внешними) будут переходы, если бы они были нарисованы внутри s0 (мой вариант в скобках):
  • из s0 в s0 (локальный, он и нарисован слева внизу)
  • из s0 в s1 (локальный, он и нарисован слева в середине)
  • из s1 в s0 (не знаю!, стандарт считает внешним)
  • из s1 в s2 (внешний)
В стандартных терминах локальности/внешности так и будет.

Переход внутренний или локальный сам по себе, но для локального перехода, целью которого является композитное состояние, это композитное состояние должно иметь начальное псевдосостояние (также, как для внешнего перехода, целью которого является композитное состояние, это композитное состояние должно иметь начальное псевдосостояние).
Я имел в виду, что локальность перехода лучше (разумнее) определять для него самого, а не для его возможных связок с переходами из начальных состояний. Конкретная диаграмма может быть такой, что от границы состояния, к которой ведёт локальный/внешний переход, может начинаться цепочка переходов из начальных псевдосостояний, которая телепортирует куда-то внутрь вложенных подсостояний (при этом маршрут телепортации может зависеть от предыстории, например, чтобы было веселее). В таком случае цепочку проще разбить на звенья и описывать поведение по частям. Локальность/внутренность -- это поведение и свойство первого звена.

452
Тогда как будет выглядеть ответ на вопрос в первом топике не по стандарту, а по Харелу?
По Харелу диаграмма состояний основывается на формализме higraph'ов (хайграфов), введённым им же (см.).
В хайграфе ребро-переход соединяет между собой два блоба (blobs) -- набора вершин-состояний, соединённых связками И- и ИЛИ-. Каждый такой блоб-набор определяет некоторое множество допустимых конфигураций состояний. Блоб в терминах UML -- это состояние или композитное состояние и, может быть, регион. И это важно, что переход, фактически, описывает биекцию между наборами конфигураций состояний.

Если диаграмма нарисована в соответствии с замыслом Фаулера, то она выглядит так как в приложении.
DisplayAlarm & PlayCD --radio--> DisplayAlarm & PlayRadio
другие части биекции, описываемой переходом по radio:
DisplayAlarm & PlayRadio --radio--> DisplayAlarm & PlayRadio
DisplayCurrent & PlayCD --radio--> DisplayCurrent & PlayRadio
DisplayCurrent & PlayRadio --radio--> DisplayCurrent & PlayRadio

Если нужно, чтобы переход по radio затрагивал оба региона, то стрелку следует рисовать от границы состояния On. В этом случае описываемая переходом биекция:
DisplayAlarm & PlayCD --radio--> DisplayCurrent & PlayRadio
DisplayAlarm & PlayRadio --radio--> DisplayCurrent & PlayRadio
DisplayCurrent & PlayCD --radio--> DisplayCurrent & PlayRadio
DisplayCurrent & PlayRadio --radio--> DisplayCurrent & PlayRadio

Как-то так.

453
А если так: на рис. 14.34 левый нижний (и верхний) переход не внутренний, а локальный потому, что целью является композитное состояние (s0) и в целевую конфигурацию состояний должно войти то элементарное состояние, на которое есть переход от начального псевдосостояния. Пример: дополним рис. 14.34 состоянием s2 и начальным псевдосостоянием внутри s0 с переходом к s2. Тогда для исходной конфигурации {s0, s1} внутренний переход (для s0!) приведет к той же конфигурации {s0, s1}, а локальный переход - к конфигурации {s0, s2}.
Разбираемый пример показывает, что описание локальных и внутренних переходов в стандарте дано неаккуратно и не отражено должным образом в метамодели. Так мне кажется.
Очевидно, что нет особой необходимости запрещать рефлексивные локальные переходы. Если составителю диаграммы нужно, чтобы осуществлялся выход из всех вложенных подсостояний, но не выход композитного, он нарисует стрелкой рефлексивный локальный переход. Если не нужно -- он напишет текстом внутренний переход.
К сказанному Вами замечу, что мы не можем считать переход внутренним или локальным не по его свойствам, а по наличию/отсутствию начального псевдосостояния в суперсостоянии и перехода из него. Так мне кажется.)

454
Конструктивная критика приветствуется.  :)
Не уверен, что критикую конструктивно, но всё же:
Авторизация не имеет неуспешного окончания из-за чего может зацикливаться.
Оплата картой предполагает ещё одно действующее лицо, шаги которого отсутствуют.
Выделять ВИ, в котором только шаги системы, вряд ли разумно.

455
Просьба указать на недочеты.
1) Никогда не соединяйте варианты использования коммуникациями (ассоциациями) -- сплошными линиями. У этих связей на одном конце должно быть действующее лицо, а на другом -- ВИ.
2) Избегайте связей обобщения (наследования) между вариантами использования, тем более множественного наследования. Обобщение ВИ предполагает довольно непростое их описание, которое, скорее всего Вы не сможете составить, или составите с большим трудом.
3) Попробуйте начать с простой диаграммы ВИ, где будут указаны только ВИ уровня цели пользователя и не будет никаких связей между ВИ. Затем составьте текстовые описания. По мере составления описаний Вы можете придти к выводу, что следует завести расширения, включаемые ВИ и/или ВИ-наследники. И только в таком случае будет иметь смысл новая версия диаграммы со связями включения, расширения, наследования.

456
В прочем, сами составители стандарта ему не следуют. Например, на рис. 14.34 приведены примеры локальных переходов (см. аттач), но левый нижний переход не является локальным, он внутренний (его исток и его цель совпадают!). Внутренние переходы по стандарту изображаются без линий (см. 14.2.4.10). Т. е. рисунок из стандарта нарушает сам стандарт.)))
Придумалась казуистическая трактовка, которая бы позволила не считать левый нижний "красный" переход внутренним. Если исток перехода = {s0 s1}, а цель = {s0}, то они не совпадают. А с истоком = {s0 s1} = цели переход был бы внутренним и рисовался бы строчкой текста. Но снова смотрим в метамодель и видим, что исток = vertex, в данном случае, -- состояние, а не коллекция или конфигурация состояний.

Я не забыл про вопрос о трактовке по Харелу. Точный ответ для него достаточно трудоёмок. Чтобы его составить, мне надо освободиться от других дел.

457
2. Клиент сам определяет были у него покупки или нет. На форме "оформление заказ" будет такой выбор. Далее клиент один из вариантов выбирает и т.д.
Соответствующие действия клиента есть только в Вашем тексте, их нет на диаграмме.
3. Доставка. Сначала ввод адреса, потому что исходя из адреса будет выдаваться способ доставки. Например если по такому-то адресу нет курьерской доставки, на форме она и не появится. Если наоборот сделать, то после того как клиент ввел адрес, а на него нет курьерской доставки, выдавать ошибку и возвращать к выбору доставки.
Если смотреть, как я сделал, сначала адрес, а потом способ доставки, то даже при самовывозе, адрес моно просто не учитывать потом, а внести его в базу как и контактные данные, вдруг клиент потом решит еще раз заказать и не самовывозом, а тут раз и все автоматом заносится.
Дело Ваше.
4. Альтернативные потоки я сделаю чуть позже, я про них помню )) Сейчас пока преподаватель принял как есть (не думаю что он вообще проверял что-то). А вот когда буду пояснительную записку писать, обязательно учту альтернативные потоки.
Сейчас диаграмма указывает, что альтернативных потоков нет. О чём и было написано. Раз преподаватель принял, то тема себя изжила.

Кстати вопрос по альтернативным потокам: отказаться от оформления заказа можно в любой точке в момент его оформления, получается будет много много стрелок к возврату в корзину...

В языке есть средства, чтобы обойтись одной стрелкой.

458
Попробовал со слиянием.
Прошу еще раз посмотреть, оценить правильность.
На диаграмме есть лишний поток управления от "удалить товар" к "оформлению заказа".
Пока клиент не зарегался / не авторизовался, не ясно как определить были ли у него раньше покупки или нет. Разумно предложить клиенту авторизоваться либо зарегаться и после его выбора выводить нужную форму.
Не вижу смысла сначала вводить адрес доставки, а затем выбирать её способ. Например, если способ = самовывоз, может не понадобится вводить адрес. Вероятно, следует поменять местами, либо объединить.
У диаграммы лишь одни финальный узел, т. е. у ВИ лишь один возможный исход -- успешное оформление заказа. Заказ нельзя отменить, авторизация всегда успешна, регистрация всегда успешна. Разумно показать на диаграмме неуспешные завершения и альтернативные потоки, ведущие к ним.
Нигде нет сторожа, проверяющего, что заказ оформляется по непустой (после удалений товаров) корзине. Аналогично, нет сторожа для удалений из пустой корзины.

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

460
Давайте по шагам:
Да, можно идти по шагам. Но можно взглянуть с другого угла на диаграммы состояний: не через призму понятий, предлагаемых стандартом, а через исходные положения Харела, через рассмотренные нами примеры. Всё наше обсуждение, как мне кажется, показало, что нарисованное на диаграмме вполне можно понять, а написанное в стандарте даёт такую терминологию, метамодель и семантику, что смыслы расходятся с нарисованным. Можно продолжать держаться за написанное и патчить. Можно смотреть как то же самое нарисованное изложил другими словами Харел. Можно пытаться подбирать свои собственные слова, подходящие к тому, что видит на диаграмме глаз.
Переход имеет ровно одно состояние-исход.
В примере 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'ы и какие), зависит от всего перехода, от того, как он лёг на диаграмму и на границы состояний, а не только лишь от того, где переход начался.

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

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

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

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

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

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

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

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

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

Страницы: « 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 »