проектный практикум 7 практик. Создание диаграмм прецедентов (вариантов) использования 2
Скачать 1.86 Mb.
|
Тема: Создание диаграммы состоянийЦель работы: изучение среды программного инструмента моделирования StarUML, поддерживающего UML, и приобретение навыков по созданию диаграммы состояний. Теоретическая часть Диаграммы состояний Для представления взаимодействий объектов в системе используют диаграммы последовательности и кооперации. Прецеденты и сценарии описывают поведение системы, но если нам важна динамика класса, изменение состояний отдельного объекта, то для этой цели полезно построить диаграммы состояний. Диаграмма состояний показывает положение одиночного объекта,события и сообщения, которые вызывают переход из одного состояния в другое, и действия, являющиеся результатом смены состояния. Диаграмма состояний показывает объект с момента его создания и до его уничтожения. Диаграмму состояний строят не для каждого класса в системе, а только для классов с динамическим поведением, которые отсылают и принимают много сообщений, изменяют свое состояние. Программный код из диаграмм состояний не генерируются, но они важны для понимания динамики поведения класса, дают возможность понять логику изменений перед кодированием. Существует много форм диаграмм состояний, незначительно отличающихся друг от друга семантикой. На диаграмме имеются два специальных состояния – начальное (start) и конечное (stop). Начальное состояние выделено черной точкой, оно соответствует состоянию объекта, когда он только что был создан. Конечное состояние обозначается черной точкой в белом кружке, оно соответствует состоянию объекта непосредственно перед его уничтожением. На диаграмме состояний может быть одно и только одно начальное состояние. В то же время, может быть столько конечных состояний, сколько вам нужно, или их может не быть вообще. Когда объект находится в каком-то конкретном состоянии, могут выполняться различные процессы. Процессы,происходящие, когда объект находится в определенном состоянии, называются действиями (actions). Основные элементы диаграмм состояний Диаграмму состояний часто рассматривают в контексте конечного автомата. Тогда можно сказать, что диаграмма состояний(Statechartdiagram) показывает автомат,фокусируя внимание на потоке управления отсостояния к состоянию. Автомат (Statemachine) –это описание последовательностисостояний, через которые проходит объект на протяжении всего жизненного цикла, реагируя на события, - в том числе описание реакций на эти события. Состояние (State) –это ситуация в жизни объекта,на протяжениикоторой он удовлетворяет некоторому условию, осуществляет определенную деятельность или ожидает какого-то события. Для поиска состояний класса можно просматривать атрибуты этого класса. Хорошим индикатором состояний является такой атрибут класса как «статус». Диаграмма состояний изображается в виде графа с вершинами и ребрами. Состояние на диаграмме изображается прямоугольником со скругленными вершинами. Под именем состояния могут размещаться действия (рис. 1). Рисунок 1 - Состояния Кроме обычных состояний на диаграмме состояний могут размещаться псевдосостояния. Псевдосостояние (pseudo-state) -вершина в конечном автомате,которая имеет форму состояния, но не обладает поведением. Примерами псевдосостояний, которые определены в языке UML, являются начальное и конечное состояния. Начальное состояние (startstate) -разновидность псевдосостояния,обозначающее начало выполнения процесса изменения состояний конечного автомата или нахождения моделируемого объекта в составном состоянии. В этом состоянии находится объект по умолчанию в начальный момент времени. Оно служит для указания на диаграмме состояний графической области, от которой начинается процесс изменения состояний. Графически начальное состояние в языке UML обозначается в виде закрашенного кружка, из которого может только выходить стрелка-переход (рисунок 2) Рисунок 2 - Начальное и конечное состояния Конечное состояние (finalstate) -разновидность псевдосостояния,обозначающее прекращение процесса изменения состояний конечного автомата (рис. 2). Объект находится в конечном состоянии непосредственно перед уничтожением. Конечных состояний может быть несколько. Находясь в каком-либо состоянии, объект может выполнять определенные действия, с состоянием можно связать такие действия как входное и выходное действия и внутренняя или просто деятельность. С состоянием можно связывать данные пяти типов: деятельность, входное действие, выходное действие, событие и история состояния. Деятельность Деятельностью (activity) называется поведение, реализуемое объектом, пока он находится в данном состоянии. Деятельность – это прерываемое поведение. Оно может выполняться до своего завершения, пока объект находится в данном состоянии, или может быть прервано переходом объекта в другое состояние. Деятельность изображают внутри самого состояния, ей должно предшествовать слово do (делать) и двоеточие. Входное действие Входным действием (entryaction) называется поведение, которое выполняется, когда объект переходит в данное состояние. Данное действие осуществляется не после того, как объект перешел в это состояние, а, скорее, как часть этого перехода. В отличие от деятельности, входное действие рассматривается как непрерываемое. Входное действие также показывают внутри состояния, ему предшествует слово entry (вход) и двоеточие. Выходное действие Выходное действие (exitaction) подобно входному. Однако, оно осуществляется как составная часть процесса выхода из данного состояния. Оно является частью процесса такого перехода. Как и входное, выходное действие является непрерываемым. Выходное действие изображают внутри состояния, ему предшествует слово exit (выход) и двоеточие. Поведение объекта во время деятельности, при входных и выходных действиях может включать отправку события другому объекту. В этом случае описанию деятельности, входного действия или выходного действия предшествует знак « ^ ». Соответствующая строка на диаграмме выглядит как Do: ^Цель.Событие (Аргументы) Здесь Цель – это объект, получающий событие, Событие – это посылаемое сообщение, а Аргументы являются параметрами посылаемого сообщения. В общем случае действие имеет следующий формат: <метка действия / выражение действия> Деятельность может также выполняться в результате получения объектом некоторого события. При получении некоторого события выполняется определенная деятельность. Срабатывание <перехода> (fire) - выполнение перехода из одного состояния в другое. На диаграмме переход изображается сплошной стрелкой. У перехода существует несколько спецификаций: событие, граничные условия, действия и посылаемые события. <имя события>(<список параметров, разделенных запятыми>)[<сторожевое условие>]/<выражение действия>. У перехода существует несколько спецификаций. Они включают события, аргументы, ограждающие условия, действия и посылаемые события. События Событие (event) – это то, что вызывает переход из одного состояния в другое. Событие размещают на диаграмме вдоль линии перехода. На диаграмме для отображения события можно использовать как имя операции, так и обычную фразу. Большинство переходов должны иметь события, так как именно они, прежде всего, заставляют переход осуществиться. Тем не менее, бывают и автоматические переходы, не имеющие событий. При этом объект сам перемещается из одного состояния в другое со скоростью, позволяющей осуществиться входным действиям, деятельности и выходным действиям. Ограждающие условия Ограждающие условия (guardconditions) определяют, когда переход может, а когда не может осуществиться. В противном случае переход не осуществится. Ограждающие условия изображают на диаграмме вдоль линии перехода после имени события, заключая их в квадратные скобки. Ограждающие условия задавать необязательно. Однако если существует несколько автоматических переходов из состояния, необходимо определить для них взаимно исключающие ограждающие условия. Это поможет читателю диаграммы понять, какой путь перехода будет автоматически выбран. Действие После условий может указываться действие. Действием (action), как уже говорилось, является непрерываемое поведение, осуществляющееся как часть перехода. Входные и выходные действия показывают внутри состояний, поскольку они определяют, что происходит, когда объект входит или выходит из него. Большую часть действий, однако, изображают вдоль линии перехода, так как они не должны осуществляться при входе или выходе из состояния. Действие рисуют вдоль линии перехода после имени события, ему предшествует косая черта. Рисунок3 - Пример диаграммы состояний Диаграммы состояний не надо создавать для каждого класса, они применяются только в сложных случаях. Если объект класса может существовать в нескольких состояниях и в каждом из них ведет себя по-разному, для него может потребоваться такая диаграмма. Событие или действие могут быть поведением внутри объекта, а могут представлять собой сообщение, посылаемое другому объекту. Если событие или действие посылается другому объекту, перед ним на диаграмме помещают знак « ^ ». Порядок выполнения работы Постановка задачи Проектируя класс Заказ, программист понял, что за поведением этого класса надо наблюдать. Многие требования к классу значительно изменялись при изменении состояния его экземпляра. Например, заказы, выполнение которых было приостановлено, вели себя не так, как выполненные заказы, а те, в свою очередь, не так, как отмененные заказы. Чтобы убедиться, что проект удовлетворяет всем этим требованиям, программист со своей группой разработчиков создал диаграмму Состояний для класса Заказ. С помощью этой диаграммы разработчики смогли окончательно понять, как надо писать код для этого класса. Постройте диаграмму Состояний для класса Заказ, показанную на рисунке 4 Рисунок4 - Диаграмма состояний для класса Заказ Создание диаграммы Найдите в браузере класс Заказ. Щелкните на классе правой кнопкой мыши и в открывшемся меню укажите пункт AddDiagram>StatechartDiagram (Создать диаграмму состояний) (рисунок 5) Рисунок 5 - Создание диаграммы состояний Добавление начального и конечного состояний Нажмите кнопку InitialState (Начальное состояние) панели инструментов. Поместите это состояние на диаграмму. Нажмите кнопкуFinalState (Конечное состояние)панели инструментов. 4.Поместите это состояние на диаграмму. Добавление суперсостояния Нажмите кнопку State (Состояние) панели инструментов. Поместите это состояние на диаграмму. Добавление оставшихся состояний На панели инструментов нажмите кнопку State (Состояние). Поместите состояние на диаграмму. Назовите состояние Отменен. На панели инструментов нажмите кнопку State(Состояние). Поместите состояние на диаграмму. Назовите состояние Выполнен. На панели инструментов нажмите кнопку State(Состояние). Поместите состояние на диаграмму внутрь суперсостояния. Назовите состояние Инициализация. На панели инструментов нажмите кнопку State (Состояние). Поместите состояние на диаграмму внутрь суперсостояния. Назовите состояние Выполнение заказа приостановлено. Описание состояний Дважды щелкните на состоянии Инициализация. Рисунок 6 – Добавление списка внутренних действий Выберите тип нового действия AddEntryAction. Назовите его Сохранить дату заказа Рисунок 7 – Добавление действия EntryAction Повторите этапы 1-3, добавив следующие действия: Собрать клиентскую информацию, DoAction Добавить к заказу новые графы, DoAction Дважды щелкните на состоянии Отменен. Повторите этапы 1 - 3, добавив действие Сохранить дату отмены, ExitAction Дважды щелкните на состоянии Выполнен. Повторите этапы 1 - 3, добавив действие Выписать счет, указать пункт DoAction. Добавление переходов Нажмите кнопку Transition (Переход) панели инструментов. Щелкните мышью на начальном состоянии. 3. Проведите линию перехода к состоянию Инициализация. 4. Повторив шаги с первого по третий, создайте следующие переходы: От состояния Инициализация к состоянию Выполнение заказа приостановлено От состояния Выполнение заказа приостановлено к состоянию Выполнен От суперсостояния к состоянию Отменен От состояния Отменен к конечному состоянию От состояния Выполнен к конечному состоянию На панели инструментов нажмите кнопку SelfTransition (Переход к себе). Щелкните мышью на состоянии Выполнение заказа приостановлено Описание переходов Дважды щелкнув мышью на переходе от состояния Инициализация к состояниюВыполнение заказа приостановлено, откройте окно спецификации перехода (рисунок 8). В поле Information введите фразуВыполнить заказ. Рисунок 8- Окно спецификации перехода Щелкнув на кнопке ОК, закройте окно спецификации. Повторив шаги с первого по третий, добавьте событиеОтменить заказ к переходу между суперсостоянием и состоянием Отменен. Дважды щелкнув мышью на переходе от состояния Выполнение заказаприостановлено к состоянию Выполнен,откройте окно его спецификации. В поле Information введите фразуДобавить к заказу новую позицию. Перейдите на вкладку Properties (Свойства). В поле GuardCondition (Сторожевое Условие) введитеНе осталосьнезаполненных позиций. Щелкнув на кнопке ОК, закройте окно спецификации. Дважды щелкните мышью на рефлексивном переходе (SelfTransition) состояния Выполнение заказа приостановлено. В поле Information введите фразуДобавить к заказу новую позицию. Перейдите на вкладку Properties (Свойства). В поле GuardCondition (Сторожевое Условие) введитеОстаютсянезаполненные позиции. Щелкнув на кнопке ОК, закройте окно спецификации. Постройте диаграмму Состояний для объекта Заказ, показанную на рисунке 9. Пример. В примере если покупатель получил заказ,то этособытие вызывает переход из состояния Укомплектован в состояние Выдан. Если же покупатель не получил свой заказ в течение двух недель, то заказ расформировывается, а деньги возвращаются покупателю на банковскую карту. Условие [Покупатель не забрал заказ в течение 2 недель] вызывает переход в состояние Расформирован при этом выполняется действие Вернуть деньги на карту. Рисунок 9 - Окончательная диаграмма состояний объекта Заказ Контрольные вопросы Для чего предназначены диаграммы состояний. Основные элементы диаграммы состояний, их характеристики Лабораторная работа №5 |