2. Язык UML. Руководство пользователя. Буч_ Рамбо_ Якобсон (2-е издание) (2006) (1185732), страница 55
Текст из файла (страница 55)
Диаграмма деятельностиБазовые понятияДиаграмма деятельности показывает поток управления – от одной деятельности к другой.Деятельность (activity) – это выполняющийся в данный моментнеатомарный набор действий внутри машины состояний (автомата). Выполнение некоторой деятельности в конечном счете раскрывается в виде выполнения отдельных действий (actions), каждое изкоторых может изменить состояние системы или передавать сообщения. Действия заключаются в вызове другой операции, посылкеДиаграммы деятельности284сигнала, создании или уничтожении объекта либо в выполнениипростых вычислений (например, вычислении выражения). Диаграмма деятельности представляет собой набор узлов и дуг.Общие свойстваОбщиесвойствадиаграммобсуждаются в главе 7.Диаграмма деятельности обладает рядом свойств, общих для всехдиаграмм: она наделена именем и графическим наполнением, являющимся проекцией модели.
От диаграмм других типов отличаетсясвоим содержимым.СодержимоеСостояния,переходыи машинысостояний(автоматы)обсуждаются в главе 22,объекты –в главе 13.Атрибутыи операцииобсуждаютсяв главах 4 и 9,сигналы –в главе 21,созданиеи уничтожениеобъектов –в главе 16,состоянияи автоматы – в главе 22.Диаграммы деятельности обычно содержат действия, узлы деятельности, потоки и значения объектов. Как и все прочие диаграммы, могут содержать примечания и ограничения.Действия и узлы деятельностиВ потоке управления, моделируемом диаграммой деятельности,нечто происходит: вы можете вычислить выражение, которое устанавливает значение атрибута или возвращает некоторое значение,вызвать операцию объекта, послать ему сигнал либо даже создатьили уничтожить объект. Эти исполняемые атомарные вычисленияназываются действиями.
Как показано на рис. 20.2, действие изображается в виде овала. Внутри него можно написать выражение.Базовые понятияМоделирование времении пространства обсуждаетсяв главе 24.285На заметку. В реальном мире, конечно, каждое вычислениетребует времени и пространства (особенно это важно для систем реального времени).
Важно иметь возможность смоделировать такие свойства.Узел деятельности (activity node) – это организационная единица деятельности. Вообще, он представляет собой вложеннуюгруппу действий или других вложенных узлов. Более того, узлыдеятельности имеют видимую подструктуру и, как правило, требуют некоторого времени на завершение. Действие можно представлять как частный случай узла деятельности. Точнее говоря,это такой узел деятельности, который не может быть подвергнутдекомпозиции. Аналогичным образом узел деятельности можно рассматривать как композицию, поток управления которойсостоит из других действий и узлов.
Если погрузиться в деталивнутреннего устройст ва узла деятельности, там можно обнаружить другую диаграмму деятельности. Как показано на рис. 20.3,нотация действия и узла деятельности одинакова, за исключениемтого что последний может иметь дополнительные части, которыеобычно поддерживаются инструментом редактирования за пределами диаграммы.Рис. 20.3. Узлы деятельностиРис. 20.2. ДействияНа заметку. UML не предусматривает языка для подобныхвыражений. Абстрактно можно использовать структурированный текст, а более конкретно – синтаксис и семантикуопределенного языка программирования.Действия не могут быть подвергнуты декомпозиции. Болеетого, они атомарны – это означает, что события могут происходить, но внутреннее поведение действия невидимо. Вы не можетевыполнить часть действия: оно либо выполняется целиком, либоне выполняется вообще.
Наконец, часто предполагается, что времявыполнения действий несущественно, хотя некоторые из них могут требовать ощутимых затрат времени.Потоки управленияКогда некоторое действие или узел деятельности завершаетвыполнение, поток управления немедленно переходит к следующему действию или узлу деятельности. Этот поток изображаетсяпри помощи стрелочек, показывающих его путь от одного действияили узла к другому. В UML поток управления представлен в видепростой стрелочки, направленной от предшественника к последователю, без метки события (рис. 20.4).В самом деле, поток управления гдеFто должен начинатьсяи завершаться, если только он не бесконечен.
Поэтому, как показано на рис. 20.4, вы можете выразить специальными символамиинициализацию (круг) и завершение (круг, заключенный в окружность).Диаграммы деятельности286инициализацияпотокзавершениеБазовые понятияВетвлениеи итерацииможноизобразитьна диаграммахвзаимодействия (см.главу 19).287Когда два пути потока управления вновь сходятся вместе, можно задействовать специальный символ – ромбик с двумя входящими стрелочками и одной исходящей. Для объединения потоков никаких условий не требуется.Можно достичь эффекта итерации, используя одно действие,устанавливающее значение итератора, и ветвление, которое вычисляет признак завершения итерации. UML предусматривает типыузлов для циклов, но это зачастую легче выразить текстовыми,а не графическими средствами.Рис.
20.4. Завершение переходовНа заметку. UML не предусматривает языка для ветвленияи итерации. На абстрактном уровне можно использоватьструктурированный текст, на более конкретном – синтаксиси семантику определенного языка программирования.ВетвлениеВетвление –это соглашение об обозначении,семантически эквивалентноемножественнымпереходамс защитными условиями (см.главу 22).Простые последовательные потоки встречаются чаще всего,но это не единственное средство моделирования потока управления.Так же, как в блокFсхеме, можно включать в диаграмму ветви, которые специфицируют альтернативные пути, выбираемые на основебулевых выражений. Ветвление (branching) может иметь один входящий поток и несколько исходящих.
На каждом исходящем потоке помещается булево выражение условия, которое вычисляетсяна входе в ветвь. Условия выходных потоков не должны перекрываться (в противном случае поток управления будет неоднозначным), но при этом должны учитывать все возможные варианты(в противном случае поток управления может оказаться «замороженным»).
Как показано на рис. 20.5, ветвление изображается ромбиком.защитное условиеветвлениезащитное условиеобъединениеПолучитьследующий заказРис. 20.5. ВетвлениеДля удобства можно использовать ключевое слово else, чтобы пометить исходящую ветвь потока, которая выполняется, еслине истинно ни одно из других выражений.Разделение и соединениеПараллельный потокуправлениячастосуществуетв контекстенезависимого активногообъекта,которыйобычно моделируетсякак процессили поток(см.
главу 23). Узлыописываются в главе 27.Простые и ветвящиеся последовательные переходы встречаются на диаграммах деятельности чаще всего. Однако иногда, особенно при моделировании бизнесFпроцессов, могут встретиться и параллельные потоки. В UML для описания разделения и соединенияпараллельных потоков управления применяют линейку синхронизации (synchronization bar). Она изображается в виде жирной горизонтальной или вертикальной линии.Рассмотрим в качестве примера параллельные потоки в системе,которая имитирует человеческую речь и жестикуляцию. Как показано на рис. 20.6, разделение (forking) представляет собой расщеплениеодного потока управления на несколько параллельных.
В этом процессе присутствуют один входной и ряд независимых выходных потоков управления. После разделения деятельность, ассоциированнаяс каждым из них, выполняется параллельно. Концептуально деятельности в каждом потоке действительно параллельны, хотя в реальнойработающей системе они могут быть не только параллельными (какв случае, если система развернута на нескольких узлах), но и состоящими из прерывистых последовательностей (когда она развернутана одном узле), что создает иллюзию параллельности.Как следует из рис. 20.6, соединение (joining) представляет синхронизацию нескольких параллельных потоков управления. Соединение может иметь ряд входящих потоков и один исходящий.Перед соединением потоков деятельности, которые ассоциированыс каждым из них, выполняются параллельно; в момент соединенияпотоки синхронизируются, то есть теперь каждый из них ждет, когда все остальные достигнут точки соединения, начиная с которойпродолжит выполняться один поток управления.288Диаграммы деятельностисоединениеБазовые понятияДорожка –эторазновидностьпакета.
Пакеты обсуждаютсяв главе 12,классы –в главах 4 и 9,процессыи потоки –в главе 23.289Каждой дорожке на диаграмме присваивается уникальное имя.На самом деле дорожка не несет никакой глубокой семантики – развечто может отражать такую сущность реального мира, как, например,организационное подразделение компании. Каждая дорожка представляет собой высокоуровневую обязанность части деятельности,отображенной на диаграмме, и в конечном счете может быть реализована в виде одного или нескольких классов. На диаграмме деятельности, разбитой на дорожки, каждая деятельность принадлежит только одной из них, но переходы могут пересекать границы дорожек.«плавательная дорожка»Рис. 20.6.
Разделение и соединениеАктивныеобъектыобсуждаютсяв главе 23,сигналы –в главе 21.На заметку. Между точками разделения и соединения должен поддерживаться баланс. Это означает, что число потоков,исходящих из точки разделения, должно быть равно числупотоков, приходящих в соответствующую точку соединения.Деятельности, выполняемые в параллельных потоках, могутобмениваться информацией между собой, посылая сигналы.Такое средство организации взаимодействия последовательных процессов называется сопрограммой (coroutine).В большинстве случаев при моделировании подобного взаимодействия применяются активные объекты.«Плавательные дорожки»При моделировании бизнесFпроцессов вы обнаружите, чтона диаграммах деятельности иногда желательно разбивать состояния деятельности на группы, каждая из которых представляетотдел компании, занимающийся определенной деятельностью.В UML такие группы называются «плавательными дорожками»(swimlanes), потому что визуально каждая группа отделяетсяот соседних вертикальной чертой, подобно плавательным дорожкам в бассейне (см.