Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.



complex transition (комплексный переход)

Переход, у которого есть несколько исходных "и-или" целевых состояний. Такой переход представляет собой реакцию на событие, которое привело к изменению количества параллельных состояний. Он представляет собой синхронизацию управления, развилку управления или же и то и другое, в зависимости от количества исходных и целевых состояний.
См. branch; composite state; fork; join; merge.

Семантика

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

Пример

На рис. 55 изображено типичное параллельное композитное состояние с входящим и исходящим комплексным переходом. На следующем рисунке, 13.56, показана история обычного выполнения этого автомата (активные состояния указаны в скобках под каждым изображением). История выполнения наглядно демонстрирует, как с течением времени меняется число активных состояний.

Рис. 55. Развилка и слияние

Параллельные состояния

Если в структуре конечного автомата допущены неточности, ряд комплексных переходов может привести к несогласованностям, включая блокировки, повторное использование состояния и другие проблемы. Этот вопрос был подробно изучен в теории сетей Петри. Стандартным решением всех подобных проблем является добавление в конечный автомат строгих формальных правил, которые помогут избежать противоречий и несовместимостей. Эти правила называются правилами "структурного программирования" для конечных автоматов. Существуют также и другие способы решения этой проблемы, каждый из которых имеет свои плюсы и минусы. Правила, принятые в языке UML, требуют, чтобы конечный автомат разбивался на более мелкие состояния (для этого используется дерево "и-или"). Преимущества этого способа в том, что вложенную структуру легко создавать, понимать и поддерживать. Недостаток же ее состоит в том, что она запрещает определенные значимые конфигурации. В общем, это компромисс, при которым вы отказываетесь от конструкций типа "goto" ради структурированного программирования.
Комплексное состояние можно разложить на ряд взаимоисключающих подсостояний (декомпозиция "или") или же на ряд параллельно протекающих подсостояний (декомпозиция "и"). Структура в данном случае будет рекурсивной. Обычно уровни "и" чередуются с уровнями "или". Уровень "и" представляет собой параллельное разложение состояния - то есть все подсостояния будут активными одновременно. Уровень "или" представляет собой последовательное Разложение состояния. В этом случае подсостояния будут становиться активными одно за другим. Допустимое множество параллельных состояний можно получить, рекурсивно разворачивая узлы в дереве (начинать, следует с корневого узла). Заменяйте состояние "и" всем и его прямыми потомками, заменяйте состояние "или" одним из его прямых потомков. Это соответствует вложенной структуре подсостояний.

Рис. 56. История активных состояний в параллельном конечном автомате

Пример

На рис. 57 изображено дерево состоянии "и-или", соответствующего, конечному автомату с рис. 55. Стандартные активные состояния указываются в скобках. Изображенный момент соответствует третьему шагу с рис. 56.
Рис. 57. Дерево подсостояний "и-или"
Если переход оказывается в области параллелизма, он тем самым входит во все существующие там подсостояния. Если переход оказывается в последовательной области, он входит только в одно под-состояние. Активное состояние в последовательной области может меняться. Что же касается области параллелизма, то параллельные подсостояния являются активными до тех пор, пока активна вся область. Однако, как правило, каждое параллельное подсостояние разделяется в дальнейшем на последовательные области.
Таким образом, простой переход (то есть переход, у которого есть один вход и один выход) должен соединять только два состояния в одной и той же последовательной области или два состояния, разделенные уровнями "или". Комплексный переход соединяет все подсостояния в параллельной области и состояние, которое находится вне этой области. (Мы не станем разбирать здесь более сложные случаи достаточно сказать, что и в таких случаях нужно следовать вышеизложенным принципам.) Другими словами, переход, который входит в параллельную область, должен войти в каждое из подсостояний. Переход, исходящий из параллельной области, должен обеспечить выход из каждого подсостояния.
Допустим также сокращенный вариант представления комплексного перехода, когда комплексный переход входит в параллельную область, но при этом пропускаются одна или несколько подобластей значит, в данном случае существует скрытый переход к исходному состоянию каждого пропущенного подсостояния. Если у какой-либо подобласти нет исходного состояния, значит, модель плохо согласована. Когда комплексный переход выходит из параллельного состояния, осуществляется неявный переход из каждой пропущенной подобласти. На момент запуска перехода всякая деятельность внутри такой подобласти прекращается - другими словами, этот переход представляет собой вынужденный выход. Сам переход может быть соединен с самой внешней параллельной областью. В таком случае это будет переход к исходному состоянию каждой подобласти - типичная ситуация в моделировании. Точно так же переход из внешней параллельной области является вынужденным выходом из каждой подобласти (в случае, когда у перехода есть переключающее событие) или же ожиданием деактивизации каждой подобласти (если переключающего события у него нет).
Правила для комплексных переходов создаются для того, чтобы не позволять делать активными одновременно бессмысленные комбинации состояний. Множество параллельных подсостояний - это разделение внешнего композитного состояния. При этом активными могут быть либо сразу все эти полсостояния, либо ни одно из них.

Условные потоки управления

В графе деятельности выходящий из развилки сегмент может иметь сторожевое условие. Это называется условным потоком управления. При запуске перехода поток, началом которого является сегмент, обладающий сторожевым условием, инициируется только в том случае, если это сторожевое условие удовлетворено. Все сегменты, не имеющие сторожевых условий, инициируются сразу же после запуска перехода. Каждой развилке должно соответствовать последующее слияние. Если же условный поток не инициируется, поскольку не удовлетворено его сторожевое условие, деятельность соответствующего сегмента в момент слияния считается завершенной. Другими словами, ожидания завершения потока управления для условного потока в этом случае не производится. Если же ни один из условных потоков не начнется, управление сразу же будет передано слиянию. Условный поток можно приравнять к графу, у которого разветвление и слияние окружают обусловленную часть графа деятельности.

Пример

На рис. 58 вы видите граф деятельности с двумя условными потоками. Он изображает процедуру регистрации на авиарейс. Еще до начала всей операции пассажир должен предъявить свой билет. Далее следуют три параллельных потока управления, два из которых - условные. Распределение мест в самолете происходит всегда, а вот багаж проверяют только в том случае, если он у пассажира есть. Паспорт проверяют тоже только в том случае, если полет международный1. После того как все три потока закончены, управление сводится в один поток, в котором пассажиру возвращают билет и посадочный талон. Если условный поток не запускается, он считается завершенным и не препятствует объединению.

Нотация

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

Пример

На рис. 59 показан конечный автомат с рис. 55, у которого есть дополнительный исходящий переход. Кроме того, на нем изображена неявная развилка, идущая от состояния Setup к исходному состоянию каждой подобласти, а также неявное слияние конечных состояний каждой подобласти в состояние Cleanup.
Если событие fl происходит в то время, когда активно состояние В2, осуществляется переход к состоянию Cleanup. Такой переход является неявным слиянием. Он прекращает состояния А2 и В2.

Рис. 59. Комплексный переход (развилка, слияние)

Алфавитный указатель