Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Часть 9.doc
Скачиваний:
35
Добавлен:
02.05.2014
Размер:
5.57 Mб
Скачать

9.5. Классы, зависящие от состояния

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

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

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

обработатьСобытие (событие)

текущееСостояние ( ) : Состояние

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

Другой, более гибкий подход к проектированию операции обработатьСо­бытие состоит в том, чтобы не выполнять действие самостоятельно, а вернуть его в выходном параметре. Тогда сигнатура принимает вид:

обработатьСобытие (in событие, out действие)

Такой зависящий от состояния класс оказывается достаточно общим для ин­капсуляции любой таблицы переходов. Устройство таблицы зависит от приложе­ния и определяется в момент создания или инициализации объекта класса. Пример зависящего от состояния класса в системе круиз-контроля – это класс Управление Калибровкой. На диаграмме кооперации из аналитической модели (рис.9.5а) показан объект Управление Калибровкой, исполняющий диаграм­му состояния на рис.9.56.

Рис.9.5. Пример зависящего от состояния управляющего класса:

а – аналитическая модель (диаграмма кооперации); б – аналитическая модель (диаграмма состояний); в – проектная модель (диаграмма кооперации); г – проектная модель (диаграмма классов)

Объект Управление Калибровкой получает события Начать Калибровку и Прекратить Калибровку от двух объектов Интерфейс Кнопки Калибровки. Если получено сообщение Начать Калибровку (событие Ca1.1), то диаграмма состояний (рис.9.56) показывает, что должно быть выполнено действие Начать (Са1.2). В результате объект Управление Калибровкой посылает сообщение Начать объекту Калибровочная Константа, который выполняет действие. Если же получено сообщение Прекратить Калибровку (событие Са2.1), то из диа­граммы состояний следует, что нужно выполнить действие Прекратить (Са2.2). Теперь объект Управление Калибровкой отправляет сообщение Прекратить объекту Калибровочная Константа.

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

Соседние файлы в предмете Системы реального времени