На этом шаге рассмотрим ветвление на диаграмме деятельности в UML.
Простые последовательные потоки встречаются чаще всего, но это не единственное средство моделирования потока управления. Так же, как в блок-схеме, можно включать в диаграмму ветви, которые специфицируют альтернативные пути, выбираемые на основе булевых выражений.
Ветвление (branching) может иметь один входящий поток и несколько исходящих. На каждом исходящем потоке помещается булево выражение условия, которое вычисляется на входе в ветвь. Условия выходных потоков не должны перекрываться (в противном случае поток управления будет неоднозначным), но при этом должны учитывать все возможные варианты (в противном случае поток управления может оказаться "замороженным").
Как показано на рис. 1, ветвление изображается ромбиком.
Рис.1. Ветвление
Для удобства можно использовать ключевое слово else, чтобы пометить исходящую ветвь потока, которая выполняется, если не истинно ни одно из других выражений.
Когда два пути потока управления вновь сходятся вместе, можно задействовать специальный символ – ромбик с двумя входящими стрелочками и одной исходящей. Для объединения потоков никаких условий не требуется.
Можно достичь эффекта итерации, используя одно действие, устанавливающее значение итератора, и ветвление, которое вычисляет признак завершения итерации. UML предусматривает типы узлов для циклов, но это зачастую легче выразить текстовыми, а не графическими средствами.
UML не предусматривает языка для ветвления и итерации. На абстрактном уровне можно использовать структурированный текст, на более конкретном – синтаксис и семантику определенного языка программирования.
На следующем шаге рассмотрим параллельные потоки на диаграммах деятельности.