Предопределенные системные классы
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; просмотров: 332;