КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА - Объектно-ориентированное расширение пролога

Индекс материала
Объектно-ориентированное расширение пролога
Стр. 2
Все страницы
         
                   ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ РАСШИРЕНИЕ ПРОЛОГА
                           
                                          
            Из  множества  промышленных  объектно-ориентированных расширений
       языков (object oriented extensions to languages), которых сейчас соз-
       дается все больше  и  больше,  одним  из  самых  интересных  является
       Prolog++,   объектно-ориентированная  версия Пролога, созданная Logic
       Programming Associates (LPA). LPA давно находится  в  числе  основных
       поставщиков  Пролога  и  имеет  версии  языка  как  для PC, так и для
       Macintosh.
            В данной статье рассматривается MacObject,  версия Prolog ++ для
       Macintosh.  MacObject используется вместе с MacProlog 3.1.  Итак, что
       же предлагает Prolog ++ такого, чего не могут предложить другие  объ-
       ектно-ориентированные среды, и как  объектно-ориентированное расшире-
       ние вписывается в язык, основанный на правилах?


                                Prolog и Prolog ++

            Пролог - это язык,  предназначенный для поиска решений. Это дек-
       ларативный язык, то есть формальное определение  (постановка)  задачи
       может  быть использовано для ее решения. Пролог определяет логические
       отношения в задаче, как отличные от пошагового решения этой задачи.
            Центральной частью Пролога являются средства логического вывода,
       которые решают запросы, используя заданное множество фактов и правил,
       к которым обращаются как к утверждениям. Пролог также не имеет  деле-
       ния  переменных на типы и может динамически добавлять правила и факты
       к средствам вывода. Таким образом, это гибкий язык, и он более приго-
       ден для  объектно-ориентированного расширения, чем язык со строго за-
       данными типами, например, Паскаль.
            Пролог ++ представляет собой дополнение к  стандартному Прологу.
       Все свойства языка по-прежнему доступны программистам. Следовательно,
       Пролог ++ можно отнести к группе  гибридных  языков,  представителями
       которой считаются Object Pascal и C++.
            Расширение Пролог ++ поддерживает все свойства,  присущие обычно
       объектно-ориентированным языкам:  концепции объектов и классов, еди-
       ничное и многократное наследование, разбиение на подклассы и передачу
       сообщений.  Поддерживаются также некоторые усовершенствованные свойс-
       тва,  существующие в таких языках, как C++ и Smalltalk, включая общие
       и частные методы.
            Интересным свойством является поддержка в языке программирования
       с  управлением данными.  Эта техника,  которая может быть еще названа
       программированием,  "управляемым событиями", используется в большинс-
       тве  языков   объектно-ориентированного программирования,  особенно в
       тех,  которые  разработаны  для  машин  с  интерфейсом,   управляемым
       "мышью".
            Объектно-ориентированная программа реагирует на события, которые
       определяют поток управления. В Прологе ++ программирование с управле-
       нием  данными  достигается при помощи концепции демонов. Демон предс-
       тавляет собой объект, методы которого вызываются в случае  определен-
       ных  событий  и  могут  быть таким образом использованы для поддержки
       программирования с управлением данными.
            Сам язык  основан на концепции передачи сообщений.  Программа на
       Прологе ++ строится вокруг множества объектов Пролога ++, которые об-
       мениваются сообщениями. В этом смысле Пролог ++ ближе к чистому  объ-
       ектно-ориентированному языку,  такому,  как Smalltalk,  чем  C++  или
       Object Pascal. Определения объектов строятся исходя из вызовов
            
            Open_Object [имя_объекта]
       и
            Close_Object [имя_объекта] ,
            
       а методы определяются практически так же, как в других  объектно-ори-
       ентированных языках.  Для  задания  наследования  можно явным образом
       указать, какой метод какого объекта должен наследоваться, что являет-
       ся необходимым для многократного наследования.
                                       
            
                              Использование MacProlog

            Установить MacObject просто: нужно только переписать все файлы в
       каталог  на жестком диске и запустить MacObject или один из его доку-
       ментов.  При этом загружается файл запуска MacObject, и к списку меню
       добавляется еще одно меню под названием "объекты".
            Меню объектов  содержит расширения среды MacProlog,  в том числе
       команды открытия и закрытия иерархий объектов и  пересылки  сообщений
       между объектами.  Продукт  поставляется  с набором программ-примеров,
       среди которых задача составления школьного  расписания,  классический
       банковский пример и программа управления складом.
            Все примеры имеют отдельные иерархии объектов, которые обеспечи-
       вают графический способ исследования программ.
            Одним из лучших свойств MacProlog является то,  что он полностью
       вписался в интерфейс Macintosh и,  в частности,  прекрасно использует
       графические возможности машины. MacObject добавил естественное расши-
       рение к этой среде и значительно облегчил управление системой.
            В среде   объектно-ориентированного  программирования   особенно
       важно ориентироваться в иерархии наследования, знать, какие сообщения
       каким объектам посылаются и следить за атрибутами объектов.  Ориенти-
       роваться в  программах  MacObject можно при помощи иерархии объектов:
       диаграмм, представленных в виде деревьев, которые показывают иерархии
       наследования и  могут  также  служить средством управления системой в
       целом.

                                 Иерархии объектов

            Интерфейс диаграмм иерархий объектов подобен тому,  который воз-

       никает при использовании графов вызовов, и использует графическое ок-
       но MacProlog с дополнительными возможностями палитры.
            Эти возможности включают средства для  создания  новых  объектов
       или редактирования существующих (object tool),  средства установления
       связи между объектами (link tool),  которое используется в основном в
       случае  множественного  наследования,  а также средства для атрибутов
       (attribute tool) и информационные (information tool). Двойное нажатие
       в момент выбора средства для объекта выдаст вместо самого объекта ок-
       но метода объекта.
            При выборе информационного средства для объекта будет выдано ок-
       но информационного диалога об объекте,  и вы сможете получить из него
       информацию об экземплярах объекта,  его методах и атрибутах.  Имеется
       также список сообщений - и тех, которые объект получает, и тех, кото-
       рые он посылает другим объектам.
            Существует также  возможность  передвигаться вверх и вниз по ие-
       рархии объектов,  используя информационное окно объекта,  посредством
       выбора подклассов или вышестоящих классов объекта.
            Иерархии  объектов особенно полезны для макетирования - область,
       в которой Пролог вообще чрезвычайно силен. Помимо возможности опреде-
       ления иерархии можно также задать методы, определить сообщения и про-
       извести проверку на любые коллизии, например, проверить, не  повторя-
       ется ли имя метода.
            Единственным неудобством является то,  что иерархия объектов  не
       имеет связи с текущей программой, и изменения в одной из них не пере-
       носятся автоматически на другую.
            Тем не менее,  поскольку иерархии объектов используются в основ-
       ном при разработке и макетировании, это не играет роли. Иерархии объ-
       ектов полезны и в плане графического отображения идей, особенно когда
       речь идет о сложных концепциях, таких как многократное наследование.
            Пролог ++ имеет ясную систему записи,  которая даже  может  быть
       использована  в качестве основы для техники построения диаграмм в C++
       или Object Pascal.  Особенно впечатляют средства установления  связи,
       которые  демонстрируют порядок вызова методов в случае,  когда объект
       имеет более чем один вышестоящий класс.
            Программам MacObject  также   доступны   средства   стандартного
       MacProlog, из которых наиболее полезны графы вызова и средства отлад-
       ки. Граф вызова показывает связь с другим объектом,  методы  которого
       он вызывает.
            Мощные средства  отладки содержат полный набор команд трассиров-
       ки,  включая установку точек просмотра для различных методов или  от-
       дельных объектов, так что отладчик подключается всякий раз, когда вы-
       зывается данный метод или любой из методов данного объекта.
            MacObject может   использовать   и    графические    возможности
       MacProlog, в том числе графическое окно - прекрасное средство быстро-
       го макетирования прикладных задач графического  типа.  Имеется  также
       доступ ко  всем возможностям Macintosh,  и внешним базовым средствам,
       написанным на Паскале или C.  MacProlog действительно прекрасно прис-
       пособлен к Macintosh,  так что его интерфейс обеспечивает эффективную
       среду разработки.

                                Передача сообщений

            В MacObject способ выполнения  программ  совершенно  отличен  от
       стандартного Пролога.  В  стандартном  Прологе  программы выполняются
       посредством задания простого запроса.  В MacObject механизм  запросов
       модифицирован таким образом, чтобы объектам можно было посылать сооб-
       щения.
            Например, в качестве одного из примеров к  продукту  прилагается
       задача составления школьного расписания:  имея информацию об учителях
       и предметах,  необходимо сотавить расписание.  Чтобы  запустить  этот
       пример,  введите запрос:
            
                                  timetable <- make
            
            При  этом  будет  передано  сообщение 'make' ('создать') объекту
       'расписание', и будет рассчитано новое расписание. Если бы нельзя бы-
       ло передать объекту сообщение, невозможно было бы запустить  ни  одну
       программу  Пролога  ++.  Объекты могут обмениваться сообщениями между
       собой посредством команды 'send' ('послать') из меню объектов.  Сооб-
       щение также может быть отправлено вверх по иерархии.
            
            
                              Использование MacObject

            MacObject представляет собой солидный продукт с большим количес-
       твом хорошо продуманных возможностей. Объектно-ориентированные расши-
       рения Пролога по своей концепции сходны с идеями  экспертной  системы
       Flex, которая также может использоваться совместно с продуктом.
            Диаграммы иерархий  объектов похожи на диаграммы иерархий объек-
       тов в традиционных средах   объектно-ориентированного  программирова-
       ния  типа Smalltalk, и современных средствах макетирования, таких как
       Prograph.
            Графическое представление  идей  помогает  ясно представить себе
       задачу и найти решение. Таким образом возможно, что  MacProlog  будет
       использоваться  в качестве испытательного стенда или средства макети-
       рования прикладных задач, что в результате приведет к созданию друго-
       го языка.
            Однако, не следует считать MacProlog только лишь средством маке-
       тирования. Продукт  предлагает полную среду для разработки прикладных
       задач.
            Вы можете   создавать   законченные  прикладные  разработки  для
       Macintosh,  осуществлять доступ ко всем его средствам,  и даже созда-
       вать  операционно-независимые   прикладные   системы   (stand   alone
       applications)  при  помощи генератора независимых прикладных разрабо-
       ток. Пролог всегда был идеальной средой для решения задач  вследствие
       близости  определения задачи и решения ее на Прологе. Объектно-ориен-
       тированное программирование еще усиливает это качество, поскольку мо-
       гут быть созданы объекты и методы, которые еще точнее моделируют  за-
       дачу.  Объектно-ориентированные  расширения  делают LPA MacProlog еще
       более мощным продуктом, а комбинация программирования  с  управлением
       данными  и объектно-ориентированного программирования непременно пос-
       лужит тому, что продуктом заинтересуются.