Предопределенные системные классы


COOL предоставляет 17 системных классов: OBJECT, USER, INITIAL-OBJECT, PRIMITIVE, NUMBER, INTEGER, FLOAT, INSTANCE, INSTANCE-NAME, INSTANCE-ADDRESS, ADDRESS, FACT-ADDRESS, EXTERNAL-ADDRESS, MULTIFIELD, LEXEME, SYMBOL И STRING.

Пользователь не может удалять или изменять эти классы. На рис. 11.1 представлена диаграмма наследования этих классов.

Все перечисленные системные классы, за исключением initial-object, являются абстрактными. Это означает, что они могут быть использованы только для наследования и не могут применяться для создания экземпляра объекта данного класса. Ни один из этих классов не имеет слотов и, за исключением класса user, ни один из них не имеет обработчиков сообщений. Однако пользователь может явно присоединить обработчики сообщений ко всем системным классам за исключением instance, instance-address и instance-name. Класс object является суперклассом для всех остальных классов, включая классы, определенные пользователем. Все классы, определенные пользователем, должны (хотя, в крайнем случае, это условие можно нарушить) наследоваться прямо или косвенно от класса user, поскольку этот класс имеет все стандартные системные обработчики сообщений, на­пример, обработчики сообщения для инициализации или удаления объекта к нему уже присоединены (эти системные обработчики сообщений описываются в разд.11. 3.3).

Рис. 11.1.Диаграмма наследования системных классов CLIPS

Системный класс primitive и все его подклассы предоставляют классы, чаще всего используемые в родовых функциях для ограничения типов. Но при необходимости к ним можно добавить новые обработчики сообщений или унаследовать от них новые классы. Однако три системных наследника класса: PRIMITIVE — INSTANCE, INSTANCE-ADDRESS и NSTANCE-NAME — предназначены только для использования в методах родовых функций (в частности они применяются при формировании неявно объявленных методов, перегружающих системные функции — см. разд. 10.5.1). Эти классы не могут иметь подклассов или обработчиков сообщений.

Класс initial-object используется в конструкторе definstances по умолчанию для создания объекта [initial-object] во время выполнения команды reset. Это конкретный системный класс (термин "конкретный класс" будет введен чуть позже) отвечает за сопоставления образцов в левой части правил, хотя он во всех отношениях идентичен системному классу user.

11.2. Конструктор defclass

Конструктор defclass создает новый пользовательский класс в среде CLIPS. Он определяет свойства (слоты) и поведение (обработчики сообщений) класса объектов. Конструктор defclass состоит из пяти элементов:

Ø имя;

Ø список суперклассов, от которых новый класс наследует слоты и обработчики сообщений;

Ø спецификатор, объявляющий, позволять или нет создание прямых объектов нового класса;

Ø спецификатор, объявляющий, могут или нет экземпляры этого класса использоваться при сопоставлении образцов объектов в левой части правил;

Ø список слотов, определенных в новом классе.

Все классы, определенные пользователем, должны наследоваться, по край­ней мере, от одного класса. С этой целью COOL предоставляет предопределенные системные классы для использования в качестве базовых в новых производных классах.

Любой слот, явно заданный в defclass, заменяет (перегружает) слоты, полученные с помощью наследования от базовых классов. Для всех новых клас­сов COOL к списку суперклассов применяет специальный алгоритм получения списка предшествования классов (см. разд. 11.2.1). Слоты класса описываются с помощью граней (facets). Примеры некоторых граней, включая грань значения по умолчанию, грань мощности (количества элементов) и грань типа доступа, представлены ниже.



Дата добавления: 2021-12-14; просмотров: 319;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.