Определение 11.2. Синтаксис спецификатора роли класса

<роль-класса>::= (role concrete │ abstract)

Абстрактные классы предназначаются только для наследования. Нельзя создать экземпляры объектов абстрактного класса. Конкретные классы могут быть использованы как для наследования, так и для создания экземпляров объектов этих классов.

Если с помощью спецификатора роли был создан абстрактный класс, а потом данный класс был использован в функции make-instance для создания экземпляра объекта этого класса, COOL сгенерирует соответствующую ошибку.

Если спецификатор роли класса не был задан, роль класса определяется наследованием. В этом случае роль нового класса принимает значение роли первого непосредственного суперкласса из списка наследования (при­мер 11.11).

Пример 11.11. Наследование спецификатора роли класса

(defclass A (is-a USER)

(role concrete))

(defclass В (is-a USER))

(defclass С (is-a A B))

(defclass D (.is-a В А))

Класс а является конкретным, поскольку это явно задано спецификатором роли. Класс B — абстрактным, т. к. его первый суперкласс user абстрактный. Класс C будет конкретным классом, потому что первый его суперкласс (а) является конкретным классом, а класс D, напротив, станет абстрактным классом, поскольку абстрактным классом является класс В, его первый суперкласс в списке наследования.

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

С помощью спецификатора активности класса можно задать поведение объекта данного класса при проведении сопоставления образцов. Класс может быть либо активным, либо неактивным.

Определение 11.3. Синтаксис спецификатора активности класса

<активность-класса>::= (pattern-match reactive │ non-reactive)

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

Если спецификатор роли класса не был задан явно, активность класса определяется наследованием. В этом случае активность нового класса принимает значение активности первого непосредственного суперкласса из списка наследования (пример 11.12).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: