Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по CASE-технологиям 2.doc
Скачиваний:
206
Добавлен:
27.03.2015
Размер:
1.04 Mб
Скачать
    1. Диаграмма состояний

Диаграмма состояний (statechart diagram)одна из диаграмм UML, моделирующих дина­мику систем. Диаграмма состояний отображает конечный автомат, выделяя поток управления, следующий от состояния к состоянию [1], [2], [10], [11]. Конечный автомат — поведение, которое определяет последовательность состояний в ходе существова­ния объекта. Эта последовательность рассматривается как ответ на события и вклю­чает реакции на эти события.

Диаграмма схем состояний показывает:

  1. набор состояний системы;

  2. события, которые вызывают переход из одного состояния в другое;

  3. действия, которые происходят в результате изменения состояния.

В языке UML состоянием (state) называют период в жизни объекта, на протяжении кото­рого он удовлетворяет какому-то условию, выполняет определенную деятельность или ожидает некоторого события. Состояние изобража­ется как закругленный прямоугольник, обычно включающий его имя и подсостояния (если они есть).

С состоянием можно связывать данные пяти типов: входное действие, выходное действие, деятельность, событие и историю состояния.

Для указания действий (actions), выполняемых при входе в состояние и при выходе из состояния, используются метки entry и exit соответственно.

Действие, которое должно выполняться, когда система находится в данном состоянии, указывается после метки do. Считается, что такое действие начинается при входе в состояние и заканчивается при выходе из него (см. рис. 2.27).

Рис. 2.27. Входное и выходное действия и деятельность в состоянии

Существуют частные случаи состояния ― это начальное состояние (start state) и конечное состояние (end state). Они не содержат никаких внутренних действий. В начальном состоянии находится объект по умолчанию в начальный момент времени. Графически оно обозначается в виде закрашенного кружка (см. рис. 2.28, а). В конечном состоянии объект будет находиться по умолчанию после завершения работы автомата в конечный момент времени. Графически оно обозначается в виде закрашенного кружка, помещенного в окружность (см. рис. 2.28, б).

(а) (б)

Рис. 2.28. Начальное (а) и конечное (б) состояния

Между состояниями возможны различные типы переходов. Переход (transition) представляет собой отношение между двумя последовательными состояниями, которое указывает на факт смены одного состояния другим. Переходы между состояниями отображаются помеченными стрелками (см. рис. 2.29).

Событие [Условие]/ Действие

Рис. 2.29. Обозначение перехода между состояниями

Обычно переход инициируется событием. Событие (event) представляет собой спецификацию некоторого факта, имеющего место в пространстве и во времени. Допускаются переходы без событий. Также разрешены условные переходы. Сторожевое (ограждающее) условие (guard condition), если оно есть, представляет собой булевское выражение. Для записи этого выражения может использоваться синтаксис языка объектных ограничений. Порядок выполнения условного перехода:

  1. происходит событие;

  2. вычисляется условие перехода;

  3. если условие перехода истинно, выполняется переход и активизируется действие, в противном случае переход не выполняется.

Выражение действия (action expression) выполняется только в том случае, когда переход срабатывает. Выполняемое действие не может быть прервано никаким другим действием, пока оно не закончится. Данное действие может оказывать влияние как на сам объект, так и на его окружение, если это с очевидностью следует из контекста модели.

Если действие представляет собой посылку сигнала, то используют специальное обозначение  перед именем сигнала указывают служебное слово send.

Одной из наиболее важных характеристик конечных автоматов в UML является подсостояние (substate). Подсостояние позволяет значительно упростить моделирование слож­ного поведения. Подсостояние — это состояние, вложенное в другое состояние. На рис. 2.30 показано составное состояние (composite state), содержащее в себе два подсостояния.

Рис. 2.30. Составное состояние с вложенными в него подсостояниями

В свою очередь, в подсостояние могут вкладываться другие подсостояния. Степень вло­женности подсостояний не ограничивается.

Составное состояние может содержать несколько последовательных подсостояний или несколько параллельных подавтоматов. Последовательные подсостояния (sequential substates) используются для моделирования такого поведения объекта, при котором в каждый момент времени объект может находиться только в одном подсостоянии (см. рис. 2.30). Поведение объекта в этом случае представляет собой последовательную смену подсостояний, начиная от начального и заканчивая конечным подсостояниями.

Возможно наличие параллельных подсостояний (concurrent substates) — они позволяют специфицировать несколько подавтоматов, которые могут выполняться параллельно внутри составного состояния. Каждый из подавтоматов занимает некоторую область внутри составного состояния, которая отделяется от остальных горизонтальной пунктирной линией (см. рис. 2.31). Если на диаграмме состояний имеется составное состояние с вложенными параллельными подсостояниями, то объект может одновременно находиться в каждом из этих подсостояний.

Иногда при возврате в составное состояние возникает необходимость попасть в то его подсостояние, которое в прошлый раз было последним. Такое подсостояние называется историческим. Информация об историческом состоянии (history state) запоминается. Подобная семантика переходов отображается значком истории  буквой Н внутри кружка.

Рис. 2.31. Составное состояние с вложенными параллельными подсостояниями

Применение исторических состояний оправдано в том случае, когда необходимо организовать обработку исключительных ситуаций (прерываний) без потери данных или выполненной работы.

На диаграмме состояний отображают жизненный цикл одного объекта, начиная с момента его создания и заканчивая разрушением. С помощью таких диаграмм удобно моделировать динамику поведения класса. Такие классы обычно имеют много различных состояний. Так, банковский счет (класс Account) может иметь неско­лько различных состояний. Он может быть открыт, закрыт, или может быть превышен кредит по нему. Поведение счета меняется в зависимости от состояния, в котором он находится. На диаграмме состояний показывают именно эту информацию.

На рис. 2.32 приведен пример диаграммы состояний для банковского счета системы АТМ.

На данной диаграмме показаны возможные состояния счета, а также процесс перехода счета из одного состояния в другое. Например, если клиент требует закрыть открытый счет, последний пере­ходит в состояние Закрыт.

Находясь в конкретном состоянии, объект может выполнять определенные действия. Например, он может генерировать отчет, осуществлять некоторые вычисления или посылать событие другому объ­екту. В Rational Rose информация такого типа добавляется к модели посредством окна спецификации состоя­ния.

Упражнение

Постройте диаграмму состояний для класса Account системы АТМ, показанную на рис. 2.32.

Этапы выполнения упражнения

Создание диаграммы состояний

Найдите в браузере класс Account. Щелкните на классе правой кнопкой мыши и в открывшемся меню укажите пункт New > Statechart Diagram (Создать диаграмму состояний). Назовите ее Диаграмма состояний Account.

Добавление начального и конечного состояний

  1. Нажмите кнопку Start State (Начальное состояние) панели инструментов. Поместите это состояние на диаграмму.

  2. Нажмите кнопку End State (Конечное состояние) панели инструментов. Также поместите это состояние на диаграмму.

Добавление оставшихся состояний

1. На панели инструментов нажмите кнопку State (Состояние). Поместите состояние на диаграмму. Назовите состояние Открыт.

2. Повторив шаги п.1, поместите остальные состояния на диаграмму (см. рис. 2.32).

Описание состояний

1. Дважды щелкните мышью на состоянии Превышен счет. Перейдите на вкладку Detail (Подробно). Щелкните правой кнопкой мыши в окне Actions (Действия). В открывшемся меню выберите пункт Insert (Вставить). Дважды щелкните мышью на новом действии. Назовите его Временно заморозить счет. Убедитесь, что в окне Type (Тип) указан пункт Entry (На входе).

2. Повторив шаги п.1, добавьте следующие действия: Послать уведомление клиенту, в окне Type (Тип) укажите Do (Выполнить до завершения); Разморозить счет, в окне Type (Тип) укажите Exit (На выходе). Нажмите два раза на ОК, чтобы закрыть спецификацию.

3. Дважды щелкните мышью на состоянии Закрыт. Повторив шаги п.1, добавьте действие Выдать кредитную карточку, в окне Type (Тип) укажите Entry (На входе). Нажмите два раза на ОК, чтобы закрыть спецификацию.

Рис. 2.32.Диаграмма состояний для класса Account

Добавление переходов

1. Нажмите кнопку Transition (Переход) панели инструментов. Щелкните мышью на начальном состоянии. Проведите линию перехода к состоянию Открыт.

2. Повторив п.1, создайте остальные переходы (см. рис. 2.32).

Описание переходов

1. Дважды щелкнув мышью на переходе от состояния Открыт к состоянию Превышен счет, откройте окно его спецификации. В поле Event (Событие) введите фразу Снять деньги. Перейдите на вкладку Detail (Подробно). В поле Guard Condition (Ограждающее условие) введите отрицательный баланс. Щелкнув на кнопке ОК, закройте окно спецификации.

2. Дважды щелкнув мышью на переходе от состояния Превышен счет к состоянию Открыт, откройте окно его спецификации. В поле Event (Событие) введите Депозит. Перейдите на вкладку Detail (Подробно). В поле Guard Condition (Ограждающее условие) введите положительный баланс. Щелкнув на кнопке ОК, закройте окно спецификации.

3. Дважды щелкнув мышью на переходе от состояния Превышен счет к состоянию Закрыт, откройте окно его спецификации. В поле Event (Событие) введите фразу Проверить баланс. Перейдите на вкладку Detail (Подробно). В поле Guard Condition (Ограждающее условие) введите отрицательный баланс в течение срока более 30 дней. Щелкнув на кнопке ОК, закройте окно спецификации.

4. Дважды щелкнув мышью на переходе от состояния Открыт к состоянию Закрыт, откройте окно его спецификации. В поле Event (Событие) введите фразу Клиент требует закрыть. Перейдите на вкладку Detail (Подробно). В поле Action (Действие) введите Сохранить дату закрытия счета. Щелкнув на кнопке ОК, закройте окно спецификации.