166
UML SysML и пр. / Re: Внутренний переход параллельного композитного состояния
« : 19 Июня 2016, 14:53:58 »Конкретный синтаксис с несколькими предысториями допускает толкование, что для каждого способа входить в состояние по предыстории (в Вашем примере от 16.06 таких способов у State1 два -- левый и правый) есть отдельная память, ведущая независимую историю. Т. е. при входе слева срабатывает левая предыстория, справа -- правая. Если бы "вертолётная площадка" была одна, повода для такого толкования не возникало бы.Когда "вертолётная площадка" одна, то и история одна, причём как она изменяется (до сих пор мы больше внимания уделяли тому, как история используется) тоже понятно: если выход через финальное состояние, то история обнуляется, если нет, то в историю записывается та конфигурация, из которой произошёл выход (в случае неглубокой истории из этой конфигурации будет использоваться только верхний уровень).
Если считать, что для каждого способа входить в состояние по предыстории есть отдельная память, то нужно определить как на каждую из этих "памятей" влияет выход из композитного состояния. На примере диаграммы: если произошёл выход из State1, конфигурация могла быть State2, а могла и State3. Как это повлияет на историю левого исторического и как это повлияет на историю правого исторического (ведь выход из State2 не означает, что вход был через левое историческое)? Может считать, что влияние оказывается на ту историю, через которую произошёл вход? Но вход мог произойти и без истории (в примере этого нет, но могло бы быть)!
Остаётся вариант, что история композитного состояния одна общая (это согласуется и с тем случаем, когда имеются по одному псевдосостоянию и глубокой и неглубокой истории - история у них общая).
Замечу, что у Харела (автора предысторий) во всех его примерах в "площадку" обязательно входит звено. То есть, у него это не совсем тэг.Здесь в "площадку" звенья ни входят, ни выходят (правда это не Харел и не UML) http://matlab.exponenta.ru/stateflow/book1/2.php
Общий недостаток нотации начальных и исторических псевдосостояний вижу в том, что для обозначения дефолтных состояний (начального по умолчанию, истории по умолчанию) используются звенья. Визуально такие звенья мало чем отличаются от обычных и хочется повесить на них триггер, к примеру. Но стандарт не велит. Если бы такие псевдозвенья выглядели бы не так, как обычные, запреты стандарта были бы подкреплены конкретным синтаксисом. Придумался простой способ достичь этого. Псевдопереходы из начальных и исторических псевдосостояний нужно рисовать пунктиром. Связать пунктир с невозможностью повесить триггер легко.Конкретный синтаксис это вообще субъективно. Тут бы с абстрактным синтаксисом (где всё сводится к "да" или "нет") разобраться.
"Математическая" трактовка почти та же, что у протокольных диаграмм состояний. А протокольные финальные состояния нечем не отличаются от обычных.Я понимаю "математический" автомат, как что-то похожее на https://ru.wikipedia.org/wiki/Конечный_автомат
К финальному состоянию стандарт привязывает специфический аспект -- генерацию события завершения для региона. Схожий с завершением, на мой взгляд, момент связан с терминацией (terminate-псеводостоянием). Только terminate прибивает всю машину. Представим, что есть два вида таких псевдосостояний: первый (обычный) -- для завершения региона, второй (со *) -- для завершения всей машины. Т. е. я хочу подвести к тому, что финальное состояние региона -- это, по смыслу, псевдосостояние, т. к. это условное обозначение.Состояния могут быть нестабильными, а псевдосостояния нестабильны всегда.
Рассуждения о том, что финальное состояние -- стабильная вершина, как мне кажется, схоластичны. Если регион достиг финала, то нет никакой разницы, считаем ли мы "текущим" одно из его финальных состояний или никакое из его подсостояний, поскольку он завершён. Понятие стабильной вершины само по себе вызывает вопросы. Простое состояние без do-деятельности с переходом из него, запускаемым по завершению, стабильно лишь фиктивно. При работе машины оно проскакивается. Т. е. стабильность определяется работой автомата, а не на уровне синтаксиса. Псевдосостояния -- это спец. обозначения. Именно этим они отличаются от состояний. То, что псевдосостояния нестабильные вершины, не отделяет их от состояний (которые тоже могут быть нестабильны).
В примере 2-я диаграмма - состояние State6 определяет 3 стабильные конфигурации ({State7, State9},{State7, final},{final, State9}) и одну нестабильную - {final, final}. А если не будет исходящего без триггера перехода из State6 - 4 стабильные? А если такой переход будет, но с условием (которое может и выполняться, и невыполняться) - и то проскакивается, то не проскакивается?