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

Типичные приемы моделирования Жизненный цикл объекта

Автоматы чаще всего применяются для моделирования жизненного цикла объ­екта (см. главу 13), особенно если это экземпляр класса (см. главы 4 и 9), преце­дент (см. главу 16) или система (см. главу 31) в целом. В то время как взаимодей­ствия (см. главу 15) моделируют поведение сообщества объектов, работающих совместно, автоматы предназначены для моделирования поведения единичного объекта на протяжении времени его жизни. Примерами могут служить интерфей­сы, контроллеры и устройства.

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

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

- если контекстом является класс или прецедент, идентифицируйте сосед­ние классы, включая предков, а также все классы, доступные из данного с помощью зависимостей или ассоциаций (такие соседи - кандидаты на роль целей для действий или на включение в сторожевые условия);

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

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

3. Решите, на какие события объект может реагировать. Если интерфейсы (см. главу 11) объекта уже специфицированы, то в них и содержится описание таких событий; в противном случае необходимо рассмотреть, какие объекты могут взаимодействовать с объектом в данном контексте и какие события они могут посылать.

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

  1. Идентифицируйте все действия при входе и выходе (особенно если обнару­жится, что выражаемая с их помощью идиома используется в автомате).

6. Если это необходимо, разверните выявленные к этому моменту состояния, применяя аппарат подсостояний.

7. Убедитесь, что все события, встречающиеся в автомате, соответствуют тем, которые ожидает интерфейс объекта. Следует убедиться также в том, что вес события, ожидаемые интерфейсом объекта, нашли отражение в автомате. Наконец, нужно выявить те места, где имеет смысл игнорировать события

8. Убедитесь, что все действия, упомянутые в автомате, поддержаны отноше­ниями, методами и операциями объемлющего объекта.

9. Следуя переходам автомата вручную или с помощью инструментальных средств, проверьте ожидаемые последовательности событий и реакций на них. Особое внимание нужно обратить на недостижимые состояния и состо­яния, в которых автомат может «застрять» (то есть тупиковые).

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

В качестве примера на рис. 21.8 показан автомат для контроллера в домашней системе безопасности, который следит за различными датчиками, расставленны­ми по периметру дома.

В жизненном цикле такого контроллера есть четыре основных состояния: Ини­циализация (контроллер входит в рабочий режим), Ожидание (контроллер го­тов к работе и ожидает тревожных сигналов или команд от пользователя), Команда

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

При получении события alarm (тревога), которое имеет параметр s, иденти­фицирующий сработавший датчик, управление переходит из состояния Ожида­ние в состояние Активен. При вхождении в состояние Активен выполняется действие при входе setAlarm и управление попадает в состояние Проверка (где проверяется, не ложная ли тревога), затем в состояние Звонок (в компанию, уста­новившую сигнализацию для регистрации тревоги) и, наконец, в состояние Жду. Из состояний Жду и Активен контроллер может выйти только после сброса сигна­ла тревоги (действие clear) или получения от пользователя события attention, возможно, предшествующего выдаче команды.

Обратите внимание на отсутствие конечного состояния. Это тоже типично для встроенных систем, которые должны работать непрерывно.

Советы

При моделировании автоматов в UML помните, что каждый автомат представ­ляет динамические аспекты поведения отдельного объекта - как правило, экзем­пляра класса, прецедента или системы в целом. Хорошо структурированный ав­томат обладает следующими свойствами:

  • он прост и не содержит избыточных состояний или переходов;

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

  • эффективен и реализует моделируемое поведение с оптимальным балансом времени и ресурсов в соответствии с требованиями, которые накладывают выполняемые им действия;

  • легок для понимания, в частности потому, что имена всех состояний и пере­ходов взяты из словаря системы (см. главу 4);

  • его глубина вложенности не слишком велика (ограничивается одним-двумя уровнями для обработки наиболее сложных аспектов поведения);

  • использует параллельные состояния в умеренном количестве, поскольку ак­тивные объекты зачастую подходят лучше.

Изображая автомат в UML, руководствуйтесь следующими принципами:

  • избегайте пересекающихся переходов;

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

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