7.1.
Язык KRL
В
языке KRL впервые была сделана попытка собрать воедино результаты выполненных
ранее исследований о структурировании элементов знаний и реализовать их в виде
единой системы [Bobrow and Winograd, 1977]. Создание системы преследовало
не только теоретические цели, но и имело достаточно четкую практическую направленность.
В качестве "строительных блоков" системы использованы так называемые
"концептуальные объекты", которые были сходны с фреймами, предложенными
Минским, в том, что представляют прототипы и связанные с ними свойства. Основную
идею авторы так изложили в опубликованной в 1977 году статье:
"...анализ
последствий объектно-центрической факторизации знаний в противовес более общей
факторизации, предполагающей структурирование знаний в виде набора фактов, каждый
из которых ссылается на один или несколько объектов".
Такая
ориентация повлекла за собой создание декларативного языка, основанного на описаниях,
в которых концептуальные объекты рассматриваются не изолированно, а в совокупности
с другими объектами-прототипами. Фундаментальное предположение состояло в том,
что то, какие свойства некоторого объекта знаний оказываются существенными, представляющими
интерес и т.д., зависит от точки зрения на объект и цели решаемой задачи. Например,
если вам нужно сыграть музыкальную пьесу на пианино, то вас интересуют такие свойства
этого объекта, как качество звучания, настройки и т.п. А вот грузчику более интересны
такие свойства этого музыкального инструмента, как вес и габариты.
В этом свете описание новой
сущности можно рассматривать как процесс сравнения ее с ранее описанными: нужно
указать, на какие из известных объектов похож новый и чем именно, а в чем от них
отличается. Так, мини-фургон очень похож на легковой автомобиль, но отличается
от последнего отсутствием сидений для пассажиров и окон в задней части. Другими
словами, полный набор понятий можно определить в терминах друг друга, а не в терминах
более компактного множества примитивных идей. Сложность с использованием примитивов
в представлении семантики состоит в том, что вряд ли когда-нибудь удастся прийти
к единому мнению о том, что же представляют собой такие примитивные понятия и
как их следует комбинировать при формировании более сложной идеи (с некоторыми
соображениями на сей счет читатель может ознакомиться в работах [Schank, 1975]
и [Schank andAbelson, 1977]).
В
основе процедурных свойств языка KRL также лежат наиболее распространенные программные
методы, предполагающие подключение процедур общего вида к классам объектов данных.
Бобров и Виноград объединили этот вид подключения процедур со структурой фрейма
и позволили подклассам наследовать как процедуры, так и данные своего суперкласса.
Разработчики
языка предположили, что наследование процедур позволит программировать в терминах
родовых операций, детали реализации которых конкретизируются по-разному
для объектов разных классов. Так же, как абстрактные типы данных позволяют программисту
забыть о деталях хранения конкретных данных в машине, так и родовые операции позволяют
на определенной стадии не принимать во внимание детали реализации однотипных операций
в каждом конкретном случае. Пример поможет вам четче представить смысл этой идеи.
Предположим,
вас назначили Верховным главнокомандующим при проведении военной операции, в которой
принимают участие различные рода войск. Отданные в ваше распоряжение танки, корабли
и самолеты ждут приказа атаковать. Получив такой приказ, каждый из родов войск
будет действовать по-своему: самолеты начнут бомбить, корабли — выпускать ракеты
и т.д. Но поведение каждого из родов войск — это частная реализация общей концепции
наступательных военных действий. Как главнокомандующего, вас мало интересуют детали
выполнения приказа: на какие рычаги нажимать, какие переключатели включать, —
все это должно быть определено на более низких уровнях.
Возвращаясь вновь к KRL, отметим,
что идея, которая стоит за объектно-центрической организацией процедур, состоит
в том, чтобы попытаться программно воспроизвести тот естественный стиль выработки
суждений, который реализуется в мозге человека. В частности, предполагается, что
управление логическим выводом реализуется на локальном уровне, в отличие от глобальных
задач, ассоциирующихся, например, с автоматическим доказательством теорем. Другими
словами, зная, как реализовать родовые операции, классы объектов будут обладать
знаниями и о том, когда активизировать те многочисленные процедуры, к которым
они имеют доступ.
Мы
не затрагивали многих других аспектов языка KRL, например средств управления процессом
или составления расписаний работ. Читателям, интересующимся этим языком, рекомендуем
познакомиться с критическим анализом этого языка, который выполнили Ленерт и Уилкс
[Lehnert and Wilks, 1979], и ответом разработчиков на эти критические замечания
[Bobrow and Winograd, 1979]. Нельзя не отметить, что язык KRL явился тем
локомотивом, который существенно подтолкнул исследования в области теории представления
знаний и, в частности, способствовал появлению практических систем, о которых
речь пойдет в следующем разделе.
7.1.
Процедуры и объекты
На рис. 7,1
мы попытались схематически представить, в чем основная разница между процедурно-
и объектно-ориентированным подходами в программировании.
Серые!
эллипсы на схеме в левой части рисунка представляют процедуры, некоторые из которых
напрямую обращаются к данным, хранящимся в файле или в базе данных. Зачерненный
эллипс представляет процедуру самого верхнего уровня (в языке С — это процедура
main). Эта функция вызывает другие функции, которые в конце концов вызывают функции
самого нижнего уровня, выполняющие операции ввода/вывода.
На правой
схеме объекты объединяют данные и процедуры работы с ними. Объекты организованы
в виде одной или нескольких иерархических структур — деревьев или решеток. Утолщенный
прямоугольник на схеме представляет базовый абстрактный класс. Экземпляры этих
объектов взаимодействуют друг с другом, обмениваясь сообщениями, и таким образом
образуются связи, ортогональные иерархии наследования.
Рис. 7.1. Процедурно- и объектно-ориентированные парадигмы программирования. Незаполненные фигуры представляют данные, а фигуры с заливкой—процедуры
| Maya 3D графика в кино и телевидении Воздействие испытаний ядерного оружия на здоровье населения Объектно-ориентированный язык программирования Java Объектно-ориентированное программирование Delphi Библиотека визуальных компонентов VCL и ее базовые классы Кроссплатформенное программирование для Linux Элементы управления Win32 Элементы управления Windows XP Файлы и устройства ввода/вывода Что такое экспертная система? Объектно-ориентированное программирование Инструментальные средства разработки экспертных систем Программирование на языке CLIPS Критерии и количественные характеристики надежности Расчет характеристик надежности невостанавливаемых резервированных изделий Расчет надежности системы с постоянным резервированием Интегрирование тригонометрических функций ; |