М. Фаулер, К. Скотт - UML. Основы - 2002 (1158629), страница 28
Текст из файла (страница 28)
Используйте диаграммы состояний только для тех классов, поведение которых вас действительно интересует, и если построение диаграммы состояний помогает лучше его понять. Многие разработчики считают, что пользовательский интерфейс и управляющие объекты обладают именно таким поведением, которое полезно изображать с помощью диаграмм состояний. Где найти дополнительную информацию Как в «Руководстве пользователя» (Буч, Рамбо и Джекобсон, 1999 18)), так и в «Справочнике пользователя» (Рамбо, Джекобсон и Буч, 1999 137)) можно найти дополнительную информацию по диаграммам со. стояний, Многие разработчики-практики склонны довольно часто использовать модели состояний, поатому неудивительно, что в книге Дугласа (1)оця)авз), 1998 1171 много говорится о диаграммах состояний, включая различные аспекты их реализации.
Если вы планируете интенсивно использовать диаграммы, то следует обратиться к книге Кука и Дэниелса (1994) 1131. Хотя имеются различия в семантике обозначений схем состояний и диаграмм состояний в языке 1)М?., авторы подробно рассматривают такие вопросы, в которых желательно разбираться, если вы пользуетесь диаграммами состояний. Диаграммы деятельности Диаграммы деятельности — это одна из самых больших неожиданнос- тей языка 15М1 .
В отличие от большинства других конструкций языка УМ1. диаграммы деятельности не имеют явно выраженного источника в предыдущих работах «троих друзей». Напротив, диаграмма деятельности соединяет в себе идеи нескольких различных методов: диаграмм событий Джима Оделла, методов моделирования состояний В1Н., моделирования потоков работ и сетей Петри. Эти диаграммы особенно полезны в сочетании с потоками работ, а также при описании поведения, включающего в себя большое количество параллельных процессов. Я постараюсь рассмотреть диаграммы деятельности более подробно, чем это действительно необходимо для столь небольшой книги. Причиной может служить то обстоятельство, что диаграммы деятельности являются одной из наименее понятных областей языка 13М1., а в изданных книгах по 11М1.
эта тема представлена недостаточно полно. На рис. 9.1 основным элементом является состояние деятельности или просто деятельность. Деятельность представляет собой некоторое состояние, в котором что-либо выполняется: будь то процесс реального времени, такой как написание письма, либо исполнение компьютерной программы, такой как метод некоторого класса. Диаграмма деятельности описывает последовательность подобных деятельностей, позволяя при этом одновременно изображать как условное, так и параллельное поведение. Диаграмма деятельности по сути Глава 9.
Диаграммы деятельности представляет собой вариант диаграммы состояний, в которой большинство, а может быть и все состояния являются состояниями деятельности. Таким образом, большая часть терминологии совпадает с терминологией диаграмм состояний. Условное поведение изображается с помощью ветвлений и соединений. Ветвление имеет единственный входящий переход и несколько выходящих переходов со сторожевыми условиями. Поскольку может выполняться только один из выходящих переходов, сторожевые условия должны взаимно исключать друг друга. Если в качестве сторожевого условия используется ~иначе1, то это означает, что переход с меткой «иначе» должен произойти в том случае, когда все другие сторожевые условия для данного ветвления являются ложными.
На рис. 9.1 после заполнения бланка заказа имеется ветвление. Если заказ оказывается срочным, выполняется его срочная доставка, в противном случае — обычная доставка. Соединение имеет несколько входящих переходов и единственный выходящий переход. Соединение означает окончание условного поведения, которое было начато соответствующим ветвлением.
Ветвления и соединения можно указывать явным образом с помощью ромба. Состояние деятельности, так же как и любое другое состояние, может иметь несколько выходящих переходов со сторожевыми условиями и несколько входящих переходов. Чтобы сделать ветвления и соединения более понятными на диаграмме, следует использовать ромбы. Параллельное поведение изображается с помощью слияний и разделений. Разделение имеет единственный входящий переход и несколько выходящих переходов.
Когда срабатывает входящий переход, все выходящие переходы выполняются параллельно. Таким образом, после поступления заказа заполнение бланка заказа и выставление счета выполняются параллельно (рис. 9.Ц. Данная диаграмма утверждает, что эти деятельности могут осуществляться параллельно. По существу, это означает, что последовательность их выполнения может быть произвольной. Можно вначале заполнить бланк заказа, выставить счет и отправить товар, после чего получить оплату. Или можно вначале выставить счет, получить оплату, после чего заполнить бланк заказа и отправить товар. Все эти варианты допускаются рассматриваемой диаграммой.
Эти деятельности можно сделать чередующимися. Так, например, взять первую позицию заказа со склада, напечатать счет, затем вторую позицию заказа, поместить счет в конверт и т. д. Или выполнять некоторые из этих деятельностей одновременно: печатать счет и проверять наличие товаров на складе.
Согласно нашей диаграмме, любой из этих вариантов является корректным. Диаграммы деятельности Поступление Зиюз Выставить Счет Заполнить Бланк Звал [срочный зжаз[ [иначе[ Обычная Доставка Срочная Доставка Получить Оплату ф -иф — — Окончание Рас. 9.1. Диаграмма деятельности Рассматриваемая диаграмма деятельности позволяет выбрать отдельный заказ, с которым необходимо что-либо сделать. Другими словами, данная диаграмма просто устанавливает основные правила последовательности действий, которые необходимо соблюдать.
В этом заключает- Глава 9. Диаграммы деятельности ся главное различие между диаграммой деятельности и схемой потоков: схемы потоков обычно ограничены последовательными процессами, в то время как диаграммы деятельности могут описывать параллельные процессы. Это необходимо для моделирования бизнес-систем, т. к. они зачастую имеют не только последовательные бизнес-процессы.
В подобных случаях становится чрезвычайно полезным метод, позволяющий поддерживать параллельное поведение. Такой метод особенно нужен тем аналитикам, которые желают моделировать поведение, не являющееся безусловно последовательным, и использовать возможности данного метода для распараллеливания отдельных операций. Все это может повысить эффективность и улучшить ответственность бизнес-процессов. Диаграммы деятельности оказываются весьма полезными для параллельных программ, поскольку они позволяют изобразить графически нити процесса и их синхронизацию по времени исполнения.
В процессе моделирования некоторого параллельного поведения необходима синхронизация. Мы не можем закрыть заказ до тех пор, пока он не будет оплачен и отправлен клиенту. Именно это указывает слияние перед деятельностью Закрыть Заказ. Слияние на диаграмме деятельности означает, что выходные переходы могут произойти только в том случае, когда состояния у всех входящих переходов завершат свои деятельности. Разделения и слияния должны соответствовать друг другу.
В простейшем случае это означает, что для любого разделения на диаграмме должно иметься соответствующее слияние, которое объединяет все нити, имеющие начало в этом разделении. (Это правило обусловлено тем обстоятельством, что диаграмма деятельности является, по существу, разновидностью диаграммы состояний.) Однако это правило имеет несколько исключений: ° Нить, выходящая из некоторого разделения, сама может быть разделением с новыми нитями, которые объединяются вместе до того, как будет достигнуто слияние всех исходных нитей. ° Коли выходящая из некоторого разделения нить сразу попадает в другое разделение, то это второе разделение можно удалить, а выходящие из него нити изобразить выходящими из первого разделения. Таким образом на рис.
9.2 удалено разделение между деятельностями по приготовлению еды и исходным разделением. Аналогично, если некоторое слияние непосредственно переходит в другое слияние, то первое слияние можно удалить, а все входящие в него нити изобразить входящими во второе слияние. Это упрощение нотации позволяет преодолеть ненужное усложнение диаграмм, и точно такая же семантика позволяет изображать на диаграмме дополнительные разделения и слияния. Декомпозиция деятельности ° Для синхронизации нитей может использоваться дополнительная конструкция, которая называется синхронизирующим состоянием. Это позволяет избежать путаницы при интерпретации правил разделения и слияния для нескольких параллельных нитей. Более подробно с этой конструкцией можно познакомиться, обратившись к «Справочнику пользователя» (Рамбо, Джекобсон и Буч, 1999 (37)) или стандартной документации.
Данное правило имеет еще одно исключение, при котором все входные состояния некоторого слияния должны быть завершены до того, как это слияние сможет произойти. Вы можете добавить дополнительное условие на отдельную нить, выходящую из разделения. Результатом этого является так называемая условная нить. Если в ходе выполнения процесса условие такой условной нити принимает значение ложь, это означает, что данная нить должна быть завершена для выполнения последующего слиянии. Так, из диаграммы на рис.
9.2 следует, что даже если у меня нет желания пить вино, все же я хотел бы иметь возможность съесть спагетти с соусом Карбонара. (Должен сознаться, что, к сожалению, мне так и не удалось проверить зто правило в процессе работы нзд данной диаграммой,) строение не) Рис. Э.2. Разделения, слияния и условные патоки Декомпозиция деятельности Деятельность может быть разделена на поддеятельности.
Ситуация здесь во многом аналогична изображению суперсостояния и подсостояний на диаграмме состояний. Можно показать только суперсостояние на родительской (порождающей) диаграмме или показать супер- состояние и относящееся к нему поведение внутри этого суперсостоя- 140 Глава 9. Диаграммы деятельности Посттпланив Заказа Заполнить Бланк Заказа Выставить Счет [срочн Полгкиь Оплату Закрыть Заказ Рис. 9.3. Использование составное деятельности по доставке ния, как это представлено на рис. 9.3. В данном случае деятельность по доставке выделена как отдельная со своим началом и окончанием. Можно также изобразить переходы, входящие или выходящие непосредственно из дочерней диаграммы.