Объявление обработчиков сообщений
CLIPS позволяет задавать предварительное объявление обработчиков сообщений класса в конструкторе defclass. Эти объявления применяются только для документирования, в качестве дополнительных комментариев, и игнорируются CLIPS. Однако для обеспечения большей наглядности желательно использовать эту возможность.
Для реализации обработчиков сообщений класса необходимо применять конструктор defmessage-handler. Поскольку объявления обработчиков не являются обязательным элементом конструктора defclass, к классу могут быть добавлены обработчики, которые не были объявлены в defclass. Например, класс, представленный в примере 11.29, может содержать обработчики, приведенные в примере 11.30.
Пример 11.29. Объявление обработчика сообщений в определении класса
(defclass rectangle (is-a USER)
(slot side-a (default 1))
(slot side-b (default 1))
(message-handler find-area))
Пример 11.30. Реальные обработчики сообщений класса rectangle
(defmessage-handler rectangle find-area ( )
(* ?self:side-a ?self:side-b))
(defmessage-handler rectangle print-area ( )
(printout t (send ?self find-area) crlf))
11.3. Конструктор defmessage-handler
Манипулирование объектом происходит посредством передачи ему сообщений с помощью функции send. Результатом передачи сообщения могут быть либо вычисленное значение, либо некоторые действия обработчика. Конструктор defmessage-handler предназначен для создания обработчика сообщений, который фактически задает поведение объекта данного класса в ответ на получение определенного сообщения. Реализация сообщения представляет собой некоторую заданную последовательность действий, называемую обработчиком сообщений (или просто обработчиком).
Конструктор defmessage-handler состоит из семи элементов:
Ø имя класса, к которому добавляется обработчик (класс должен быть предварительно определен);
Ø имя сообщения, на которое будет откликаться обработчик;
Ø необязательный тип обработчика (по умолчанию primary);
Ø необязательные комментарии;
Ø список параметров, которые должны быть переданы обработчику в сообщении;
Ø необязательный символ групповых параметров для указания, что обработчик может иметь переменное число аргументов;
Ø последовательность действий, которые будут выполняться в заданном порядке в момент вызова обработчика.
Значение, возвращаемое обработчиком сообщения, является результатом вычислений последнего выражения в теле обработчика.
Дата добавления: 2021-12-14; просмотров: 276;