ГЛАВА 10. Родовые функции


Помимо функций, описанных в гл. 8, CLIPS предоставляет еще один меха­низм, поддерживающий процедурную парадигму представления знаний, — родовые функции. Родовые функции подобны функциям, созданным с по­мощью конструктора deffunction. Они также могут использоваться для оп­ределения нового процедурного кода в CLIPS и могут быть вызваны как любые другие функции. Однако, в отличие от простых, родовые функции являются более мощным средством обработки данных, т. к. они способны выполнять различные наборы действий в зависимости от числа и типа по­лученных в данный момент аргументов. Родовые функции подобны пере­груженным операторам или функциям языка C++. Например, функция + может выполнять как операцию конкатенации строк, так и простое арифме­тическое сложение чисел. Родовые функции определяются с помощью кон­структоров defgeneric и defmethod, которые подробно будут описаны В данной главе. Родовые функции обычно состоят из нескольких компонентов, называемых методами. Каждый метод определяет последовательность дей­ствий, выполняющих обработку различных наборов аргументов. Родовая функция, которая имеет более одного метода, называется перегруженной.

Родовые функции могут содержать как системные методы, так и методы, определенные пользователем. Например, перегруженная функция + состоит из двух методов:

Ø неявный метод, являющийся системной функцией, которая обрабатывает арифметическое сложение;

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

CLIPS не позволяет использовать функции, созданные с помощью конст­руктора deffunction, в качестве методов родовых функций. Конструкторы deffunction предоставляют возможность добавления в CLIPS новых функ­ций без использования концепции перегрузки. Родовая функция, имеющая только один метод, по своему поведению идентична функции, созданной с помощью конструктора deffunction.

В большинстве случаев методы родовых функций не вызываются напрямую, несмотря на то, что CLIPS предоставляет такую возможность с помощью функции call-specific-method (см. гл. 15). CLIPS самостоятельно распозна­ет вызов родовой функции и использует аргументы для поиска и запуска соответствующего метода. Этот процесс называется родовым связыванием.

10.1. Замечание относительно термина "метод"

Большинство объектно-ориентированных систем поддерживают процедур­ное поведение объектов через обработку сообщений (например, Smalltalk) или с помощью родовых функций (например, CLOS). Можно утверждать, что CLIPS поддерживает оба этих механизма, несмотря на то, что родовые функции и не являются составной часть языка COOL (объектно-ориентированный язык, поддерживаемый CLIPS) и могут использоваться без него. Родовые функции могут использовать классы в качестве аргументов своих методов, но они должны обеспечивать выдачу сообщений для мани­пуляции с объектами таких классов. (Изучением языка COOL мы займемся в следующей главе.)

Поддержка системой CLIPS обоих механизмов приводит к путанице в тер­минологии. В объектно-ориентированных системах, которые поддерживают только обработку сообщений, термин "метод" применяется для определения сообщения, реализованного в другом классе, по отношению к рассматри­ваемому. В системах, где поддерживаются только родовые функции, термин "метод" служит для определения различных реализаций поведения родовой функции.

Во избежание подобной путаницы в дальнейшем для указания на реализа­цию обработки сообщения в некотором классе будем использовать термин "обработчик сообщений". Термин "метод" станет употребляться только в кон­тексте родовых функций.



Дата добавления: 2021-12-14; просмотров: 235;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.