17.3.2.
Объектно-ориентированные языки
В главе 12
мы уже обращали ваше внимание на то, что формат правил хорошо согласуется с
представлением знаний в форме "при выполнении условий Сь ...,
С„ выполнить действие А", но менее подходит для описания сложных
объектов и отношений между ними. Языки объектно-ориентированного программирования
предоставляют в распоряжение программиста альтернативную программную среду для
организации знаний в терминах декларативного представления объектов предметной
области. Все, связанное с процедурной стороной решения проблем, распределяется
между этими объектами, которые в таком случае располагают собственными процедурами
и могут общаться друг с другом посредством протоколов передачи сообщений.
Другим приятным
аспектом объектно-ориентированного программирования является возможность использования
таких стилей представления знаний, которые не встречаются в исчислении предикатов
и в порождающих правилах. Вместо "размывания" знаний об объекте предметной
области между множеством правил или аксиом, на которые они ссылаются, эти знания
концентрируются в едином месте — в программном описании объекта. Эта концентрация
является виртуальной в том смысле, что нет необходимости, чтобы вся информация
об объекте предметной области хранилась в соответствующем ему программном объекте,
но любая команда или запрос к этому объекту может быть реализована только через
посылку сообщения этому объекту.
В реальном
мире вещей существует множество систем, в которых обмен энергией или информацией
может быть представлен через обмен сообщениями между их компьютерными представлениями,
и такая связь с технологией моделирования является очень важным достоинством
данного подхода (см., например, [McArthur et al, 1986]). Не вызывает
сомнений, что моделирование является одним из мощнейших средств решения проблем
и что, рассматривая процесс логических рассуждений в контексте сложной системы,
его иногда понять значительно легче, чем в контексте применения правил. Объектно-ориентированное
программирование интегрирует символические вычисления в операционную среду,
базирующуюся на средствах графического интерфейса, — меню, пиктограммы и т.п.
Хотя само по себе оснащение экспертной системы этими средствами и не решает
проблему ее прозрачности для пользователя, в руках умелого программиста они
позволяют лучше представить пользователю процессы, происходящие в системе (см.,
например, [Richer andClancey, 1985]).
Основная сложность
в использовании средств объектно-ориентированного программирования — уяснить
для себя, что именно должен представлять программный объект по отношению к предметной
области. В ранних версиях объектно-ориентированных языков, которые были предназначены
в основном для разработки программ моделирования, такая проблема не возникала
— программные объекты представляли объекты моделируемой системы. Например, при
моделировании производственной линии отдельные программные объекты представляли
те или иные механизмы этой линии, а сообщения между программными объектами —
информационные, энергетические и материальные потоки. Задача программиста серьезно
облегчалась тем, что существовало достаточно очевидное соответствие между программными
и реальными объектами.
Но для того
чтобы внедрить объектно-ориентированный стиль в проектирование экспертных систем,
нужно задуматься над тем, как соотнести программные объекты с абстрактными понятиями
и категориями предметной области. Объекты должны представлять факты и цели,
наборы правил или отдельные гипотезы. Поэтому далеко не очевидно, какими сообщениями
должны обмениваться такие объекты и какой смысл должен вкладываться в эти сообщения.
Многое зависит от того, на каком уровне абстракции будет использоваться объектно-ориентированный механизм. Если объекты представляют собой низкоуровневую реализацию определенной схемы формирования суждений, то отпадает необходимость в использовании каких бы то ни было эпистемологических последовательностей. Если же объекты будут видимы и для эксперта в процессе разработки и совершенствования системы, и для пользователя во время эксплуатации системы, то схема отображения понятий и категорий на программные объекты должна быть тщательно продумана.