
Объекты
Объект CLIPS состоит из двух основных частей — свойств объекта и его поведения. Класс представляет собой своеобразный шаблон, определяющий общие свойства и поведение объектов — экземпляров этого класса. Объекты могут принадлежать классам, определенным пользователем, или некоторым системным классам (например, классам, реализующим представление объектов в виде примитивных данных). Ниже приведены несколько примеров объектов и названия их классов:
Объекты (вид, отображаемый на экран) Классы
Rolls-Royce SYMBOL
"Rolls-Royce" STRING
8.0 FLOAT
8 INTEGER
(8.0 Rolls-Royce 8 [Rolls-Royce]) MULTIFIELD
<Pointer- OOCF61AB> EXTERNAL-ADDRESS
Объекты CLIPS разделяются на две важные категории: объекты, хранящие примитивные типы данных, и объекты классов, определенных пользователем. Объекты этих двух типов отличаются способом своего создания и удаления, наборами свойств и даже методом использования.
Объекты примитивных типов неявно создаются и удаляются системой CLIPS в местах, где это необходимо. По ссылке на такой объект можно получить хранящееся в нем значение соответствующего типа. Объекты примитивных типов не имеют слотов и, как правило, не имеют имен. Классы, определяющие эти объекты, являются предопределенными классами CLIPS. Функциональность предопределенных классов, определяющих объекты примитивных типов, подобна функциональности классов, определенных пользователем, за исключением того, что к таким классам нельзя присоединить обработчики сообщений. Это делает не очень удобным использование таких классов в объектно-ориентированном программировании.
Для ссылки на объект класса, определенного пользователем, необходимо использовать имя или адрес объекта. Такие объекты явно создаются или удаляются с помощью сообщений или специальных системных функций. Свойства объекта класса, определенного пользователем, определяются набором слотов, заданных при определении класса. Слот объекта имеет имя и может содержать простое или составное значение. Например, объект Rolls-Royce является объектом созданного пользователем класса car. Один из слотов такого объекта может, например, содержать цену автомобиля со значением 75 000. Поведение объектов определяется наличием тех или иных обработчиков сообщений, присоединенных к соответствующему классу. Обработчики сообщений и способы работы с объектами подробно описаны в гл. 11. Все объекты одного класса имеют одинаковые наборы слотов, но могут содержать в этих слотах различные значения. Однако, если два объекта имеют одинаковые наборы слотов, это еще не означает, что они принадлежат одному классу, т. к. два абсолютно разных класса, теоретически, могут иметь одинаковые наборы слотов.
Основная разница между слотами объекта и неупорядоченного факта заключается в возможности наследования. Наследование позволяет использовать в классе некоторые свойства и поведение, определенные в другом классе.
Конструктор definstances позволяет создавать набор объектов, добавляющихся в базу знаний CLIPS при каждой очистке системы. При выполнении команды reset среда CLIPS очищается, а затем в список объектов добавляются все объекты, заданные конструкторами def instances. CLIPS содержит один предопределенный системный конструктор definstances, который вызывает добавление в систему объекта initial-object.