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

Активные классы

Объект, который имеет отдельный конечный автомат для каждого экземпляра, используется для создания активного класса. Диаграмма класса (рис.9.5.4) для активного класса определяется указанием:

  • имени класса;

  • компонент экземпляра;

  • аксессоров;

  • тейкеров события;

  • инициализатора;

  • конструктора для предварительно существующих экземпляров.

Рис.9.5.3. Структура диаграммы класса для пассивного класса.

Имя класса. Имя класса для активного класса такое же, как и у объекта, его породившего.

Компоненты экземпляра. Компоненты экземпляра для активного класса определяются точно таким же образом, что и компоненты экземпляра для пассивного класса, за исключением того, что никакая компонента не ставится в соответствие атрибуту текущего состояния. Вместо этого экземпляр активного класса унаследует текущую компоненту состояния из класса Активный Экземпляр.

Рис.9.5.4. Структура диаграммы Активного класса.

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

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

1. Если событие, порожденное генератором событий, не вызывает создания нового экземпляра объекта, определите соответствующий тейкер события как экземплярную операцию. Дайте ему имя Затребовать событие <метка события>.

2. Если событие, порожденное генератором событий, вызывает создание нового экземпляра объекта, определите соответствующий тейкер события как операцию с классом и дайте ему имя Затребовать и Создать событие <метка события>.

Определите входные параметры, соответствующие каждому элементу данных события, переносимых этим событием. Выходные параметры не определяются для тейкера события, так как событие в ООА представляет собой асинхронное взаимодействие, которое поэтому не может производить синхронный вывод.

Цель тейкера события - принять событие, определить, какое действие (если оно имеется) должно быть выполнено и выполнить это действие, таким образом получая экземпляр в новом состоянии.

Обратите внимание, что в этой архитектуре мы определили общедоступный интерфейс класса в терминах тейкеров событий, а не действий (или процессов, составляющих действие). Это обеспечивает истинную семантическую инкапсуляцию состояния экземпляра. Сопоставьте это со схемой, в которой общедоступный интерфейс определен в терминах действий или процессов. Несмотря на то что такая схема инкапсулирует состояние экземпляра в смысле законности, она стимулирует неуловимую взаимозависимость через классы: фактически она требует, чтобы пользователь класса был достаточно, хорошо осведомлен о модели состояний, на которой класс основан, и мог определять, какое действие следует вызвать.

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

Конструктор для предварительно существующих экземпляров. Если модели ООА допускают существование экземпляров рассматриваемого объекта до временной шкалы анализа, обеспечивают конструктор для создания экземпляра класса таким же образом, как и для пассивных объектов. Конструктор называется Установить.