Иллюстрированный самоучитель по введению в экспертные системы


Множественное наследование в CLOS и CLIPS - часть 2


(printout t crlf "War") )

Сформируем экземпляр класса republican-quaker:

(definstances people

(richard of republican-quaker))

Теперь загрузим все это в исполняющую систему CLIPS и введем запрос к экземпляру Richard:

(send [richard] speak)

В ответ интерпретатор выведет "War" (война). Оказывается, что "ястребиный" характер республиканцев возобладал у экземпляра richard, поскольку в списке предшествования классов republican стоит раньше, чем quaker. Изменим порядок перечисления этих классов в определении republican-quaker:

(defclass republican-quaker

(is-a quaker republican)

(role concrete) )

Теперь в характере экземпляра Richard миролюбие квакеров будет доминировать. Ничего не изменится в поведении экземпляра и в том случае, если добавить обработчик сообщения в класс person:

(defmessage-handler person speak ()

(printout t crlf "Beer") )

Эта реализация метода speak перекрывается другими, поскольку класс находится в списке предшествования на последнем месте.

Слоты данных в языке COOL также поддерживают фацеты, т.е. свойства, ответственные за доступ к слотам в процессе работы программы. Например, существует фацет visibility (видимость), который определяет, какие другие классы могут обратиться к слоту. Значение private означает, что только обработчик сообщения данного класса может получить доступ к данным, а значение public позволяет это сделать также обработчикам сообщений производных классов и суперклассов.

Другие фацеты позволяют реализовать следующие возможности:

  • автоматическое определение функций доступа и присвоения значений слотам;

  • хранение данных, к которым возможен доступ со стороны всех экземпляров класса, аналогично статическим членам классов в языке C++.




Начало  Назад  Вперед



Книжный магазин