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

OpenU.Ru

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



activity graph (граф деятельности)

Особое состояние конечного автомата, в котором все или большая часть состояний является состояниями деятельности или состояниями действия и в котором все, или большая часть переходов запускаются при завершении деятельности в исходных состояниях. На графе деятельности изображается поток работ или работа процедуры. Граф деятельности является завершенным блоком модели и отображается на диаграмме деятельности.
См. state machine.

Семантика

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

Нотация

Нотация графа деятельности отображается на диаграмме деятельности. Граф деятельности представляет собой разновидность конечного автомата. Существует несколько видов сокращенных нотаций, которые наилучшим образом подходят для диаграмм деятельности: состояния деятельности, разветвления, слияния, "плавательные дорожки", состояния потока объекта, класс в состоянии, нотации получения и отправки сигнала, а также отсроченные события.
См. статью энциклопедии control icons, в которой перечислены дополнительные символы, использующиеся на диаграммах деятельности.

Пример

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

Пример

На рис. 13 все деятельности разделены "плавательными дорожками" на три части. Каждая из частей соответствует отдельному, вовлеченному в деятельность участнику. В языке UML не требуется, чтобы каждая "дорожка" соответствовала объекту или классу. В нашем случае "дорожкам" соответствуют различные классы, которые осуществляют операции, реализующие в окончательной модели отдельные виды деятельности.
Эта диаграмма также демонстрирует использование символов потока объектов. Потоки объектов соответствуют различным состояниям объекта Заказ, который в результате нескольких деятельностей претерпевает различные изменения.
Рис. 
 Диаграмма деятельности и "плавательные дорожки"
Рис. 13. Диаграмма деятельности и "плавательные дорожки"
Так, например, символ Order[placed] (Заказ [помещен]) означает, что на момент вычислений Order был перенесен в состояние placed в результате выполнения деятельности Request service (Обработка запросов), но при этом он еще не был принят на обработку деятельностью Take order (Принять заказ). После завершения деятельности Take order объект попадает в состояние entered (принят). Все потоки объектов на этой диаграмме символизируют один и тот же объект в различные моменты времени. Это означает, что они не могут существовать одновременно, поэтому через них можно провести линию последовательности (пунктирная линия со стрелками на нашей диаграмме).
Поток объектов. Объекты, которые являются входными или выходными данными для какого-либо действия, можно изображать в виде символов-объектов. Такой символ представляет собой объект, который в данный момент может служить входными данными для вычислений или же только что стал выходными данными какого-либо вычисления. Как правило, объект одновременно является и тем и другим. На диаграмме это изображается с помощью пунктирной стрелки, которая идет от исходящего перехода состояния деятельности к символу потока объектов и затем от потока объектов к входящему переходу в деятельность, для которой этот поток объектов служит входными данными. Обычно один и тот же объект является выходными данными для одной деятельности и входными - для другой.
Если стрелки, указывающие на поток объектов, дают достаточное представление о последовательности деятельностей, то поток управления (стрелки из сплошных линий) можно не изображать. Другими словами, когда выходные данные одного действия используются последующим действием в качестве входных данных, то отношение потока объектов включает в себя и поток управления.
Класс в состоянии. Зачастую объект используется в нескольких последовательных деятельностях, которые меняют его состояние. Чтобы избежать неточности, каждое состояние объекта может изображаться на диаграмме отдельно. При этом название состояния указывается в квадратных скобках рядом с именем объекта. Такую же нотацию можно использовать и на диаграммах кооперации.
См. также статью энциклопедии control icons, где указаны другие символы, которые также могут использоваться в диаграммах деятельности.
"Отложенные" события. Иногда воздействие некоторого события на систему нужно "отложить" до завершения какой-либо другой деятельности. (Обычно событие, которое не обрабатывается сразу, считается утерянным.) Отложенным считается такое событие, которое помещается во внутреннюю очередь до тех пор, пока оно не будет либо использовано, либо отменено. Для каждого состояния или деятельности могут быть определены события, воздействие которых "откладывается", если они происходят во время этой деятельности или состояния. Все прочие события либо обрабатываются мгновенно, либо теряются.
Когда конечный автомат переходит в новое состояние, все отложенные в предыдущем состоянии события запускаются на обработку. Правда, это происходит только для тех событий, которые не являются отложенными также и для нового состояния. Если одно из отложенных событий инициирует переход из нового состояния, этот переход происходит немедленно. Если же в этом случае потенциально возможно несколько переходов (когда несколько отложенных событий инициируют разные переходы), то такой случай считается точкой семантических вариаций. Чтобы выбрать нужный переход, нужно приписать точке вариаций определенное правило.
Если событие происходит в состоянии, в котором оно считается отложенным, и при этом может запустить переход, то такое событие не помешается в очередь. Если же событие не запускает переход, то его помешают в очередь. При изменении активного, состояния отложенные события могут запускать переходы. Причем если они считаются отложенными и в новом состоянии, то они продолжают оставаться в очереди. Возможность запуска перехода отложенным событием особенно удобна в тех случаях, когда событие должно быть отложено в композитном состоянии, но может инициировать переходы в одном или нескольких подсостояниях. В противном случае это событие пришлось бы "откладывать" в каждом из подсостояний, в котором оно не запускает переход. В случае если отложенное событие соответствует переключающему событию, но при этом не удовлетворяет сторожевому условию, переход не запускается, а событие остается в очереди.
На диаграммах отложенные события обозначаются внутри состояния, после чего ставится косая черта и обозначается операция defer (отложить). Если событие не запускает перехода, оно сохраняется и повторяется тогда, когда объект переходит в новое состояние. Но и в новом состоянии оно опять может быть отложено. Когда же объект, наконец, достигает состояния, в котором событие не отложено, оно должно либо быть принято, либо проигнорировано. Отсутствие операции defer автоматически снимает событие с очереди. Если операция defer была задана в композитном состоянии, то событие будет отложено на протяжении всего композитного состояния.
Состояния действия атомарны, следовательно, они откладывают любое событие, которое происходит во время их выполнения. В этом случае излишне помечать необходимость отложить событие. Событие будет отложено на тот срок, пока не завершится это действие, после чего событие может запускать переход.

Пример

На рис. 14 изображен процесс приготовления кофе. Мы не показали на этом графе внешний объект coffeePot (Кофеварка), а только те деятельности, которые предпринимает человек, готовящий кофе. Включение кофеварки изображено в виде отправляемого ей сигнала. Деятельность по нахождению чашек происходит после включения кофеварки. После этого нужно дождаться, когда на кофеварке погаснет лампочка. Тут есть некоторая проблема. Если событие light goes out (лампочка гаснет) происходит еще до того, как человек нашел чайки, то оно теряется, так как конечный автомат еще не готов к его обработке. Во избежание этого, состояние Get Cups (Взять чашки) Откладывает событие light goes out. Теперь, если событие случается в момент деятельности, оно не теряется, а помещается в очередь до тех пор, пока конечный автомат не выйдет из состояния Get Cups. После этого событие обрабатывается и запускает переход.
Рис. 14. Отложенное событие и пиктограммы управления
Рис. 14. Отложенное событие и пиктограммы управления
Обратите внимание на то, что событие light goes out не является переключающим для состояния Get Cups, а, следовательно, не прекращает эту деятельность. Это событие будет переключающим для состояния приема сигнала, который следует за завершением деятельности Get Cups.
Динамический параллелизм. Динамический параллелизм со значением, отличным от единицы, изображается в виде строки, обозначающей множественность в правой верхней части символа деятельности (рис. 15). Динамическая деятельность получает несколько списков аргументов. Все подробности должны при этом быть описаны в виде текста. Если параллелизм применяется к нескольким деятельностям, то они должны быть частями одной композитной деятельности, у которой ставится показатель множественности.
Рис. 15. Динамический параллелизм
Рис. 15. Динамический параллелизм
Структура графа. Конечный автомат должен иметь правильную структуру вложенности, то есть рекурсивно разделен на параллельные и последовательные подсостояния. На графах деятельности для этого используются разветвления и развилки. У каждого разветвления существует свое слияние (merge), а у каждой развилки - свое слияние (join). Однако это не всегда удобно. Стандартная ситуация - частично упорядоченный граф, в котором нет прямых циклов, а развилки и слияния не всегда совпадают. Структура вложенности такого графа не может считаться правильной, но ситуацию можно изменить, присвоив потокам управления деятельности и введя в граф состояние синхронизации, в котором переходы пересекают потоки управления. Такая декомпозиция не единственна, однако в случае частично упорядоченного графа она обладает одинаковой семантикой выполнения (поэтому явно показывать декомпозицию или состояния синхронизации в обычном частично упорядоченном графе необязательно). Явно показывать декомпозицию следует в более сложных графах, в которых присутствуют параллелизм и условные зависимости.

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