Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Объявление обработчиков сообщений
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); Ø необязательные комментарии; Ø список параметров, которые должны быть переданы обработчику в сообщении; Ø необязательный символ групповых параметров для указания, что обработчик может иметь переменное число аргументов; Ø последовательность действий, которые будут выполняться в заданном порядке в момент вызова обработчика. Значение, возвращаемое обработчиком сообщения, является результатом вычислений последнего выражения в теле обработчика.
|