Объявление обработчиков сообщений

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);

Ø необязательные комментарии;

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

Ø необязательный символ групповых параметров для указания, что обработчик может иметь переменное число аргументов;

Ø последовательность действий, которые будут выполняться в заданном порядке в момент вызова обработчика.

Значение, возвращаемое обработчиком сообщения, является результатом вычислений последнего выражения в теле обработчика.


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



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