Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Типичные приемы моделирования Реактивные объекты

Чаще всего диаграммы состояний используются для моделирования реактив­ных объектов, особенно экземпляров классов, прецедентов и системы в целом.

В то время как взаимодействия (см. главу 15) применяются для моделирования поведения сообщества объектов, совместно решающих некоторую задачу, диаграм­мы состояний предназначены для моделирования поведения одного объекта на протяжении его жизненного цикла. Если диаграммы деятельности (см. главу 19) моделируют поток управления от деятельности к деятельности, то диаграммы состояний - поток управления от события к событию.

При моделировании поведения реактивного объекта нужно специфицировать главным образом три вещи: устойчивые состояния, в которых может находиться объект, события, которые инициируют переходы из одного состояния в другое, и дей­ствия, выполняемые при каждой смене состояния. Моделирование реактивного объекта подразумевает моделирование всего его жизненного цикла (см. главу 21) начиная с момента создания и вплоть до уничтожения, с особым акцентом на устой­чивые состояния, в которых может находиться объект.

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

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

Моделирование реактивного объекта складывается из следующих процессов:

1. Выберите контекст для автомата- класс, прецедент или систему в целом,

2. Выберите начальное и конечное состояния для объекта. Для использования в остальной части модели, возможно, стоит сформулировать пред- и пост­условия (см. главу 10) для начального и конечного состояния.

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

4. Определите разумное частичное упорядочение устойчивых состояний на протяжении жизненного цикла объекта.

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

6. Присоедините действия к переходам (как в машине Мили) и/или к состояниям (как в машине Мура).

7. Рассмотрите, как можно упростить автомат за счет использования подсостояний, ветвлений, разделений, слияний и исторических состояний.

8. Проверьте, что любое из состояний достижимо при некоторой комбинации событий.

9. Убедитесь в отсутствии тупиковых состояний, то есть таких, из которых нет переходов ни при какой комбинации событий.

10. Трассируйте автомат вручную или с помощью инструментальных средств и проверьте, как он ведет себя при ожидаемых последовательностях событий и реакций на них.

На рис. 24.2 показана диаграмма состояний для разбора простого контекстно-свободного языка. Примеры таких языков можно найти в системах, для которых входной или выходной поток составляют XML-сообщения. В таких случаях про­ектируется автомат для разбора потока символов, удовлетворяющего синтаксису языка:

сообщение: '<' строка '>' строка ';'

Первая строка представляет тэг, вторая - тело сообщения. Из данного потока символов извлекаются только сообщения, удовлетворяющие правилам синтаксиса.

Из рисунка видно, что для автомата предусмотрены только три устойчивых со­стояния: Ожидание, ПолучениеЛексемы и ПолучениеТела. Диаграмма состоя­ний спроектирована в виде машины Мили - действия привязаны к переходам. На самом деле в автомате есть только одно представляющее интерес событие (см. главу 20) - вызов put с фактическим параметром с (символом). В состоянии Ожидание автомат отбрасывает все символы, не интерпретируемые как начало

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

Обратите внимание, что эта диаграмма описывает автомат, работающий непре­рывно - в нем нет конечного состояния.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]