Джим Арлоу, Айла Нейштадт - UML 2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование (1037782), страница 60
Текст из файла (страница 60)
Узлы вызова действия,инициирующие конкретные операции, как правило, используются дляболее детального моделирования деятельности при проектировании.Создать Orderвызов деятельностиЗакрыть Orderвызов поведенияgetBalance():double(Account::)имя операцииимя класса (необязательное)Получить баланс(Account::getBalance():double)if self.balance <= 0:self.status = 'INCREDIT'elseself.status = 'OVERDRAWN'имя узлаимя операции(необязательное)вызовоперацииязык программирования(например, Python)Рис. 14.11. Примеры синтаксиса узла вызова действия32314.8.
Узлы управления14.7.2. Узел действия, принимающий событие времениУзел действия, принимающий события времени, реагирует на время.Узел действия, принимающий события времени, реагирует на время.Этот тип узла имеет временное выражение и генерирует событие времени, когда это выражение становится истинным.
Поведение такогоузла зависит от наличия входящего ребра.Например, на рис. 14.12 показан узел действия, принимающий события времени, без входящего ребра. Этот узел станет активным и будетгенерировать событие времени после запуска его деятельностивладельца, когда его временное выражение становится истинным.
В приведенном примере событие времени генерируется в конце каждого финансового года и инициирует деятельность Отправить налоговую декларацию компании.Отправить налоговую декларацию компаниинаступил конецфинансового годавременное выражениеРис. 14.12. Узел действия, принимающий событие времени,без входящего ребраОднако в примере на рис. 14.13 действие, принимающее событие времени, имеет входящее ребро и станет активным только после получения маркера по этому ребру. Этот пример является фрагментом системы управления лифтом. Первое действие открывает дверь лифта и запускает действие, принимающее событие времени.
Это действие ожидает десять секунд и затем передает маркер действию Закрыть дверь.Открыть дверьЗакрыть дверьожидаем 10 секундвременное выражениеРис. 14.13. Узел действия, принимающий событие времени,с входящим ребромОбратите внимание, что временное выражение может указывать на:• некоторое событие (например, конец финансового года);• конкретный момент времени (например, 11/03/1960);• временной интервал (например, ожидать 10 секунд).14.8. Узлы управленияУзлы управления контролируют поток управления деятельности.В табл. 14.2 представлены все узлы управления UML 2; их подробноеобсуждение см. в следующих разделах.324Глава 14.
Диаграммы деятельностиТаблица 14.2СинтаксисИмяСемантикаНачальный узелУказывает, где начинается поток при 14.8.1вызове деятельности.Конечный Завершает определенный потокузел пото деятельности – другие потокикане затрагиваются.«decisionInput» условиепринятия решенияКонечные узлыКонечный Завершает деятельность.узел деятельностиРаздел14.8.114.8.1УзелрешенияПоток проходит по исходящему ребру, 14.8.2сторожевое условие которого истинно.Может иметь входные данные (необязательно).УзелслиянияКопирует входные маркеры в единст 14.8.2венное выходное ребро.УзелРазделяет поток на несколько парал 14.8.3ветвления лельных потоков.{описаниеобъединения}Узел объ Синхронизирует несколько парал 14.8.3единения лельных потоков.Может иметь описание объединения(не обязательно) для изменения его семантики.14.8.1.
Начальный и конечный узлыНачальный узел показывает, где начинается деятельность.Как уже говорилось в разделе 14.4, начальный узел (initial node) – этоточка, в которой начинается поток при вызове деятельности. У деятельности может быть более одного начального узла. В этом случае потоки запускаются во всех начальных узлах одновременно и выполняются параллельно.Конечный узел деятельности завершает все потоки деятельности.Деятельность также может быть инициирована действием принятия события (раздел 15.6) или узлом, являющимся параметром (раздел 14.9.3).Таким образом, начальные узлы не являются обязательными, поскольку есть другие способы запуска деятельности.Конечный узел потока завершает один из потоков деятельности.14.8. Узлы управления325Конечный узел (final node) деятельности завершает все потоки деятельности.
Конечных узлов деятельности может быть много, и тот, который будет активирован первым, завершит все остальные потоки и саму деятельность.Конечный узел потока просто останавливает один из потоков деятельности, остальные потоки продолжают выполнение. Пример приведенна рис. 15.10.14.8.2. Узлы решения и слиянияУзел решения имеет одно входящее ребро и два и более альтернативных исходящих ребер. Маркер, поступающий по входящему ребру, будет предложен всем исходящим ребрам, но пройдет только по одномуиз них.
Узел решения – это перекресток потоков, на котором маркердолжен выбрать только один путь.Узел решения передает маркер на то выходное ребро, для которого выполняется сторожевое условие.Каждое выходное ребро защищено сторожевым условием (guard con+dition), которое означает, что ребро примет маркер только в случае выполнения сторожевого условия. Важно, чтобы сторожевые условиябыли гарантированно взаимоисключающими, т. е. чтобы в любой момент времени истинным могло быть только одно из них. В противномслучае согласно спецификации UML 2 поведение узла решения формально является неопределенным!Для задания ребра, по которому пройдет поток управления в случаеневыполнения всех сторожевых условий, может использоваться ключевое слово else.На рис.
14.14 показан простой пример узла решения. После действияПолучить корреспонденцию поток управления попадает в узел решения.Если выполняется условие [это мусор], почта отправляется в мусорнуюкорзину, в противном случае (else) почтовое сообщение открывается.Узел, отмеченный стереотипом «decisionInput» (входные данные решения), представляет условие принятия решения. Его результат используется сторожевыми условиями на исходящих ребрах. Пример фрагмента деятельности показан на рис.
14.15. Здесь условие принятия решения сравнивает запрашиваемую для снятия сумму с балансом счета. Если баланс больше или равен запрашиваемой сумме, условиепринимает значение истина и поток переходит к действию Снять сумму.В противном случае регистрируется неплатежеспособность.На рис. 14.14 показан узел слияния (merge node). В узлах слияния сходятся два или более входящих ребра и выходит одно исходящее. Ониобъединяют все входящие потоки в один исходящий. Семантика слияния очень проста: все маркеры, предлагаемые на входящих ребрах,предлагаются на исходящем ребре. Маркеры и поток не изменяются.326Глава 14.
Диаграммы деятельностиОбработка корреспонденцииключевое словоПолучитькорреспонденциюсторожевоеусловие[это мусор]elseузел решенияOpen mailBin mailузел слиянияРис. 14.14. Пример узла решения и узла слияния«decisionInput»balance >= amountЗапросить суммудля снятия со счета[истина][ложь]условие принятиярешенияСнять суммуЗарегистрироватьнеплатежеспособностьРис. 14.15. Фрагмент деятельности с узлом, помеченнымстереотипом «decisioninput»Узел слияния и непосредственно следующий за ним узел решения могут быть объединены в один символ, как показано на рис. 14.16.
Однако мы не рекомендуем применять такую сокращенную нотацию, поскольку изображение узлов по отдельности придает диаграмме большую наглядность.14.8.3. Узлы ветвления и объединения – параллелизмУзел ветвления разделяет поток на несколько параллельных потоков.Параллельные потоки деятельности можно создать путем разделенияодного потока с помощью узла ветвления. Хотя обычно параллелизмявляется решением, принимаемым во время проектирования, нередконеобходимо показать параллельные деятельности при моделированиибизнеспроцессов. По этой причине мы будем часто использовать узлыветвления и объединения как при анализе, так и при проектировании.32714.8.
Узлы управления[условие1][условие2][условие3]слияниерешениеРис. 14.16. Узел слияния и узел решения могут быть объединены в один символУзел ветвления имеет одно входящее и два или более исходящих ребер.Маркеры, поступающие по входящим ребрам, дублируются и предлагаются на всех исходящих ребрах одновременно. Тем самым единственный входящий поток разделяется на несколько параллельных исходящих потоков. У каждого исходящего ребра может быть сторожевоеусловие, и маркер, как и в узлах решения, может передаваться по исходящему ребру только в случае выполнения сторожевого условия.Узел объединения синхронизирует и объединяет несколько входящихпотоков в единственный исходящий.В узле объединения несколько входящих ребер встречаются и объединяются в одно исходящее. Эти узлы синхронизируют потоки: маркерна их единственном исходящем ребре предлагается только после того,как поступили маркеры всех входящих потоков.
Они осуществляютоперацию логического И над всеми своими входящими ребрами.На рис. 14.17 показан простой пример Процесс производства продукта, в котором используются узлы ветвления и объединения. В этом примере:Процесс производства продуктаветвлениеСпроектироватьновый продуктИзготовитьпродуктНайти рыноксбыта продуктаобъединениеПродатьпродуктРис. 14.17.
Деятельность Процесс производства продукта включает узлыветвления и объединения328Глава 14. Диаграммы деятельности•••продукт сначала разрабатывается;поиск рынка сбыта и изготовление продукта осуществляются параллельно;продукт реализуется только после завершения обоих процессов –поиска рынка сбыта и изготовления.На рис. 14.17 деятельность Процесс производства продукта начинаетсяс действия Спроектировать новый продукт. После этого узел ветвления разделяет единый поток на два параллельных. В одном из этих потоков ведется поиск рынка сбыта продукта (Найти рынок сбыта продукта), в другом – продукт изготавливается (Изготовить продукт). Узел объединениясинхронизирует эти два параллельных потока, поскольку ожидаетмаркер от каждого из параллельных действий.