Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все лекции по системам реального времени.pdf
Скачиваний:
252
Добавлен:
02.05.2014
Размер:
8.11 Mб
Скачать

СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ

210

Рис.9.4. Пример класса интерфейса устройства вывода:

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

впроектная модель (диаграмма классов)

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

Класс, зависящий от состояния, инкапсулирует информацию,

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

Зависящий от состояния класс предоставляет операции для дос- тупа к таблице переходов состояний и для ее изменения. В частности, проектируются операции для обработки входных событий, вызы-

www.pdffactory.com

СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ

211

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

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

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

обработатьСобытие (событие) текущееСостояние ( ) : Состояние

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

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

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

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

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

www.pdffactory.com

СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ

212

показан объект Управление Калибровкой, исполняющий диаграмму состояния на рис.9.56.

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

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

www.pdffactory.com

СИСТЕМЫ РЕАЛЬНОГО ВРЕМЕНИ

213

Объект Управление Калибровкой получает события Начать Ка-

либровку и Прекратить Калибровку от двух объектов Интерфейс Кнопки Калибровки. Если получено сообщение Начать Калибровку

(событие Ca1.1), то диаграмма состояний (рис.9.56) показывает, что должно быть выполнено действие Начать (Са1.2). В результате объ-

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

кратить (Са2.2). Теперь объект Управление Калибровкой отправляет сообщение Прекратить объекту Калибровочная Константа.

В проектной модели (рис.9.5в и 9.5г) сообщения Начать Калиб-

ровку и Прекратить Калибровку отображаются на вызовы операции

обработать Событие класса Управление Калибровкой, которой в ка-

честве входного параметра передаются соответственно события нача-

лоКалибровки и прекраще-ниеКалибровки. Действия начать и прекра-

тить превращаются в операции объекта абстрагирования данных Ка-

либровочная Константа и вызываются операцией обработатьСо- бытие объекта Управление Калибровкой.

9.6. Классы, скрывающие алгоритмы

Такие классы скрывают алгоритмы, применяемые в предметной области; они типичны в системах реального времени, а также в науч- ных и инженерных приложениях. Как правило, такой класс скрывает не только алгоритм, но и локальные данные, необходимые для его ра- боты.

Пример скрывающего алгоритм класса это класс Средняя Ско- рость (рис.9.6), который скрывает алгоритм вычисления средней скорости автомобиля в системе круиз-контроля и мониторинга. В нем

есть операция сброс для обнуления внутренних данных и операция вычислить для расчета средней скорости движения. Обе эти опера-

ции вызывают операцию вывести объекта Интерфейс Маршрутного Дисплея, передавая среднюю Скорость в качестве параметра (рис.9.6б). Диаграмма класса изображена на рис.9.6в.

www.pdffactory.com