М. Фаулер, К. Скотт - UML Основы (1114905), страница 27
Текст из файла (страница 27)
Это означает, что рассматриваемый переход обязательно произойдет, если наступит данное событие. При этом следует заметить, что этот переход не произойдет, даже если завершится деятельность; наоборот, когда деятельность «инициировать доставку» завершится, данный заказ останется в состоянии Отправка, пока не наступит событие «Отправлен». Наконец, рассмотрим переход с именем «отмена». Мы должны располагать возможностью отменить заказ в любой момент, пока заказ не доставлен клиенту. Это можно сделать, изобразив отдельные переходы из каждого состояния: Проверка, Ожидание и Отправка.
Удобный альтернативный вариант — определить некоторое суиерсостояиие для трех перечисленных состояний, после чего нарисовать единственный выходящий из него переход. В этом случае подсостояния просто наследуют любые переходы суперсостояния. Оба подхода изображены на рис. 8. 2 и 8.3. Они описывают одно и то же поведение системы. Глава 8. Диаграммы состояний ~Не все поз /получить сл Повии ~накот Отсутст Рис. 8.2.Диаграмма состояний бег суперсостояний Рис.
8.2 выглядит довольно перегруженным, хотя на нем изображено всего три дублирующих перехода. На рис. 8.3 картина в целом выглядит гораздо яснее, и если впоследствии потребуется внести какие-либо изменения, то будет значительно труднее упустить из вида событие «отмена». В данных примерах я изобразил деятельность внутри состояния в виде текста «выполнить/деятельность».
Внутри состояния также можно указать и другую информацию. Если состояние реагирует на событие, связанное с действием, которое не влечет за собой никакой переход, этот факт можно изобразить, поместив текст вида «ИмяСобытия / ИмяДействия» в прямоугольник состояния. Помимо событий с именами существуют еще два других типа событий: ° Событие может быть инициировано после завершения определенного периода времени. Такое событие можно пометить ключевым словом после. Например, можно записать после /20 минут ). Диаграммы состояний Имл суперсхтолнлл Активное [Не есе позиции проверены] /получить следующую позицию Проверка [Все позиции проверены М есе позиции досттпны] От~ранка выполнить проверку/ проверить позицию выполнить отправку/ инициировать доставку [Все позиции проверены $$ некоторые позиции отсутствуют на складе] Позиция получена [некоторые позиции отсутствуют нз складе] Ожидание отмена Отмена Заказа Достамта Рис.
8.3. Диаграмма состояний с с уперсост оян ия ми. ° Событие может быть инициировано в результате выполнения того или иного логического условия. Такое событие можно пометить ключевым словом если. Например, можно записать если /температура >100 градусов). Существуют также два особых события: вход и выход. Любое действие, связанное с событием входа, выполняется в момент перехода объекта в данное состояние. Действие, ассоциированное с событием выхода, выполняется в том случае, когда объект покидает данное состояние в результате осуществления некоторого перехода.
Ясли имеется так называемый рефлексивный переход, возвращающий объект обратно в то же самое состояние и связанный с каким-либо действием, то сначала должно выполниться действие выхода, затем действие данного перехода и, наконец, действие входа. Если с данным состоянием ассоциирована некоторая деятельность, то она начнет выполняться сразу после действия входа. Глава 8. Диаграммы состояний Диаграммы параллельных состояний Помимо состояний заказа, связанных с наличием позиций заказа, существуют также состояния, связанные с подтверждением оплаты заказа. Эти состояния могут быть представлены диаграммой состояний, подобной той, которая изображена на рис.
8.4. [опяаза Рис.8.4. Подтверждение оплаты заказа В данном случае все начинается с проверки подтверждения оплаты, Деятельность «проверить оплату» завершается сообщением о результате выполнения данной проверки. Коли оплата заказа выполнена, то данный заказ ожидает в состоянии Оплата Подтверждена до тех пор, пока не наступит событие «отправлен». В противном случае заказ переходит в состояние Отвергнут. Таким образом, поведение объекта Заказ определяется как комбинация поведений, изображенных на рис. 8.1 и 8.4, Все зти состояния и рассмотренное ранее состояние Отмена можно объединить в одну диаграмму параллельных состояний (рис. 8. б).
Обратите внимание, что на рис. 8.5 детали внутренних состояний нв изображены. Диаграммы параллельных состояний Рис. В.Б.Диаграмма лараллел»ныл состояний Смысл параллельных секций диаграммы состояний заключается в том, что в любой момент времени данный заказ находится одновременно в двух различных состояниях, каждое из которых относится к своей исходной диаграмме.
Когда заказ покидает параллельные состояния, он оказывается только в одном состоянии. Из этой диаграммы можно увидеть, что в начальный момент заказ оказывается одновременно в двух состояниях: Проверка Позиции Заказа и Подтверждение Оплаты. Если деятельность »проверить оплату» в состоянии Подтверждение Оплаты успешно завершится первой, то заказ окажется в двух состояниях: Проверка Позиции Заказа и Оплата Подтверждена. Если же наступит событие «отменен», то заказ окажется только в состоянии Отмена. Диаграммы параллельных состояний полезны в тех ситуациях, когда некоторый объект обладает множеством независимых поведений. Отметим, однако, что не следует создавать слишком большое количество параллельных состояний, описывающих поведение одного объекта.
Если для некоторого объекта имеется несколько достаточно сложных диаграмм параллельных состояний, то следует рассмотреть возможность разделения этого объекта на отдельные объекты. 134 Глава 8. Диаграммы состояний Когда использовать диаграммы состояний Диаграммы состояний являются хорошим средством для описания поведения некоторого объекта в нескольких различных вариантах использования.
Однако они не слишком пригодны для описания поведения нескольких объектов, образующих кооперацию. По существу, диаграммы состояний полезно объединять с другими методами. Например, диаграммы взаимодействия (см. главу 5) являются хорошим средством для описания поведения нескольких объектов в одном варианте использования, а диаграммы деятельности (см. главу 9) удобны для представления общей последовательности действий для нескольких объектов и вариантов использования. Не все разработчики считают диаграммы состояний естественными. Следует внимательно присмотреться к тому, как аналитики работают с этими диаграммами.
Может оказаться, что ваша команда считает диаграммы состояний бесполезными, потому что они не вписываются в ее стиль работы. Это не столь большая проблема; как всегда, нужно помнить, что следует пользоваться именно теми средствами, которые больше подходят для вашей работы. Если вы все-таки пользуетесь диаграммами состояний, не пытайтесь строить их для каждого класса в вашей системе. Хотя строгие формалисты зачастую применяют именно такой подход, это почти всегда будет пустой тратой времени. Используйте диаграммы состояний только для тех классов, поведение которых вас действительно интересует, и если построение диаграммы состояний помогает лучше его понять. Многие разработчики считают, что пользовательский интерфейс и управляющие объекты обладают именно таким поведением, которое полезно изображать с помощью диаграмм состояний.
Где найти дополнительную информацию Как в «Руководстве пользователя» (Буч, Рамбо и Джекобсон, 1999 18)), так и в «Справочнике пользователя» (Рамбо, Джекобсон и Буч, 1999 137)) можно найти дополнительную информацию по диаграммам со. стояний, Многие разработчики-практики склонны довольно часто использовать модели состояний, поатому неудивительно, что в книге Дугласа (1)оця)авз), 1998 1171 много говорится о диаграммах состояний, включая различные аспекты их реализации. Если вы планируете интенсивно использовать диаграммы, то следует обратиться к книге Кука и Дэниелса (1994) 1131.
Хотя имеются различия в семантике обозначений схем состояний и диаграмм состояний в языке 1)М?., авторы подробно рассматривают такие вопросы, в которых желательно разбираться, если вы пользуетесь диаграммами состояний. Диаграммы деятельности Диаграммы деятельности — это одна из самых больших неожиданнос- тей языка 15М1 . В отличие от большинства других конструкций языка УМ1. диаграммы деятельности не имеют явно выраженного источника в предыдущих работах «троих друзей». Напротив, диаграмма деятельности соединяет в себе идеи нескольких различных методов: диаграмм событий Джима Оделла, методов моделирования состояний В1Н., моделирования потоков работ и сетей Петри. Эти диаграммы особенно полезны в сочетании с потоками работ, а также при описании поведения, включающего в себя большое количество параллельных процессов.
Я постараюсь рассмотреть диаграммы деятельности более подробно, чем это действительно необходимо для столь небольшой книги. Причиной может служить то обстоятельство, что диаграммы деятельности являются одной из наименее понятных областей языка 13М1., а в изданных книгах по 11М1. эта тема представлена недостаточно полно. На рис. 9.1 основным элементом является состояние деятельности или просто деятельность.
Деятельность представляет собой некоторое состояние, в котором что-либо выполняется: будь то процесс реального времени, такой как написание письма, либо исполнение компьютерной программы, такой как метод некоторого класса. Диаграмма деятельности описывает последовательность подобных деятельностей, позволяя при этом одновременно изображать как условное, так и параллельное поведение. Диаграмма деятельности по сути Глава 9. Диаграммы деятельности представляет собой вариант диаграммы состояний, в которой большинство, а может быть и все состояния являются состояниями деятельности.
Таким образом, большая часть терминологии совпадает с терминологией диаграмм состояний. Условное поведение изображается с помощью ветвлений и соединений. Ветвление имеет единственный входящий переход и несколько выходящих переходов со сторожевыми условиями. Поскольку может выполняться только один из выходящих переходов, сторожевые условия должны взаимно исключать друг друга. Если в качестве сторожевого условия используется ~иначе1, то это означает, что переход с меткой «иначе» должен произойти в том случае, когда все другие сторожевые условия для данного ветвления являются ложными.
На рис. 9.1 после заполнения бланка заказа имеется ветвление. Если заказ оказывается срочным, выполняется его срочная доставка, в противном случае — обычная доставка. Соединение имеет несколько входящих переходов и единственный выходящий переход. Соединение означает окончание условного поведения, которое было начато соответствующим ветвлением. Ветвления и соединения можно указывать явным образом с помощью ромба. Состояние деятельности, так же как и любое другое состояние, может иметь несколько выходящих переходов со сторожевыми условиями и несколько входящих переходов.