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

OpenU.Ru

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

branch (разветвление)

Элемент в конечном автомате, где одно переключение ведет к нескольким возможным последствиям, каждое из которых имеет сторожевое условие.
См. fork; join; junction state; merge.

Семантика

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

Нотация

Разветвление можно изобразить, повторяя переключающее событие на нескольких дугах переходов с разными сторожевыми условиями. Кроме того, это можно сделать, используя переходы по завершении, как на диаграммах деятельности.
Для удобства стрелка перехода может быть связана с ромбом, который обозначает разветвление. Стрелка перехода помечается переключающим событием, если таковое имеется, однако при этом действие указывать нельзя. Все действия происходят в последнем сегменте перехода.
Из ромба могут выходить две и более стрелки. Возле каждой стрелки ставится сторожевое условие. В качестве сторожевого условия можно использовать зарезервированное слово else. Его значение будет истинным в том случае, если ложны значения всех прочих (явно заданных) сторожевых условий. Наконечник каждой стрелки может указывать либо на еще одно разветвление, либо на состояние. У тех стрелок, которые указывают на состояние, может быть указано действие.
Нотация в виде дерева, по сути, представляет собой то же самое, что и нотация в виде отдельных переходов, которые запускаются одним общим переключающим событием. При этом каждый переход имеет собственное сторожевое условие, действие и целевое состояние. На рис. 37 вы видите два способа моделирования одной и той же ситуации.

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

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