Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
компьютерная техника (конспектировать ).docx
Скачиваний:
69
Добавлен:
05.11.2018
Размер:
1.56 Mб
Скачать

9.8 Основная программа

На основную программу (рис.9.8.1) в этом архитектуре возложено три обязанности:

  • вызов различных операции инициализации классов;

  • создание внешних событии, которые инициализируют или продолжают канал управления;

  • создание событий таймера.

Рис.9.7.6. Обраазец раздела инициализации схемы структуры класса для определенного класса.

Инициализация

Первое действие главной программы должно создавать все предварительно существующие экземпляры классов прикладных классов. Если существует лишь несколько таких экземпляров, эта работа может быть кодирована непосредственно в основной программе простым способом, как показано на рис.9.8.1. Однако есть два возможных осложнения. Во-первых, может быть большим количество предварительно существующих экземпляров, которые должны быть созданы; в этом случае мы бы предложили, чтобы требуемая информация была подготовлена как данные в файле данных или базе данных. Основная программа затем будет считывать и интерпретировать данные для создания экземпляра.

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

Вас нет дескриптора требуемого экземпляра Спецификация Сока.

Рас. 9.7.7. Образец для операции Затребовать Событие для определительного класса.

//

// Программа управления микроволновой печью

//

// Инициализировать все предварительно существующие

// экземпляры

//

myэлемент := Силовой_элемент::Установить()

myлампочка := Лампочка::Установить()

mупечь := Печь::Установить( mуэлемент, mулампочка )

//

// Загрузить все КМС

//

Силовой_элемент::Загрузить КМС()

Лампочка::3агрузить КМС()

Печь:Загрузить КМС()

//

// Собственно работа печи

//

do forever

message_here := get_message( message_buffer)

if message_here then

msg_type := unpack_message( message_buffer)

case of msg_type

нажата кнопка:

mупечь.Затребовать_событие_v1()

end case

дверьоткрыта:

mупечь.Затребовать_событие vЗ()

end case

дверьзакрыта:

mупечь.Затребовать_событие_\/4()

end case

endif

Таймер::Подать_сигнал() // Подача сигнала истекшими,

// если такие существуют, таймерами

end forever

// Конец программы микроволновой печи //

Рис.9.8.1. Структура основной программы, требуемой этой архитектурой. Язык — псевдокод, основанный на C++,

Основной модуль должен также вызывать операцию Загрузить КМС всех активных и определительных классов. Это может быть выполнено перед или после создания предварительно существующих экземпляров.

Внешние события

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

В более сложном случае основная программа получает сообщения из других задач для определения того, какое событие порождать из нескольких внешних. Этот случай показан на рис.9.8.1, где обрабатываются три сообщения, соответствующие различным внешним событиям.1

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

Эти события - те же внешние события, которые показаны на модели взаимодействия объектов на рис.5.1.1.