При работе с диаграммами деятельности часто сталкиваешься с ситуациями, когда выход одной операции инициирует многочисленные вызовы другой операции. Есть несколько способов показать это, но лучше всего подходит область расширения. Область расширения (expansion region) отмечает область диаграммы деятельности, где операции выполняются один раз для каждого элемента коллекции.
На рис. 11.9 процедура Choose Topics (Выбрать темы) генерирует список тем. Затем каждый элемент этого списка становится маркером для входа процедуры Write Article (Написать статью). Подобным образом каждая операция Review Article (Рецензировать статью) генерирует единственную статью, которая добавляется к выходному списку области расширения. Когда все маркеры в области расширения достигают выходной коллекции, область расширения генерирует единственный маркер для списка, который передается процедуре Publish Newsletter (Опубликовать информационный бюллетень).
В данном случае в выходной и входной коллекциях одинаковое количество элементов. Однако в выходной коллекции может оказаться меньше элементов, чем во входной; в таком случае область расширения действует как фильтр.
На рис. 11.9 все статьи пишутся и рецензируются параллельно, что отмечено ключевым словом «concurrent». Область расширения также может быть итеративной. Итеративные области должны полностью обрабатывать каждый входной элемент за один раз.
Если есть только одна операция, которую надо вызывать несколько раз, то применяется нотация, показанная на рис. 11.10. Такой способ записи предполагает параллельное расширение, поскольку оно наиболее общее. Эта нотация соответствует концепции динамического параллелизма, принятой в UML 1.