Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ќбъектно-ориентированное программирование




¬ системе Prolog можно легко реализовать объектно-ориентированный стиль про≠граммировани€. ¬ данном разделе применение такого стил€ демонстрируетс€ на примере простого интерпретатора дл€ объектно-ориентированных программ. ѕри ис≠пользовании объектно-ориентированного подхода программа рассматриваетс€ как со≠сто€ща€ из объектов, которые передают друг другу сообщени€. ¬ычисление происхо≠дит в результате формировани€ объектом ответа на полученное сообщение.  аждый объект имеет собственную область пам€ти и некоторые процедуры, называемые ме≠тодами.  роме того, объекты могут наследовать методы от других объектов. ѕриме≠н€емый при этом механизм аналогичен механизму наследовани€ в методе представ≠лени€ данных на основе фреймов (см. главу 15). ќбъект отвечает на сообщение, вы≠зыва€ на выполнение один из своих методов, а сообщение определ€ет, какой метод должен быть выполнен. ƒействие по передаче сообщени€ объекту фактически пред≠ставл€ет собой своего рода вызов процедуры. –еализаци€ объектно-ориентированной программы по сути €вл€етс€ моделированием процессов передачи сообщений между объектами и формировани€ объектами ответов на сообщени€.

„тобы ознакомитьс€ с тем, как этот принцип практически осуществл€етс€ в сис≠теме Prolog, рассмотрим в качестве первого примера объектно-ориентированную про≠грамму, касающуюс€ геометрических фигур. ќдним из объектов этой программы €в≠л€етс€ пр€моугольник, а в состав данного объекта могут входить процедуры дл€ описани€ пр€моугольника и вычислени€ его площади. ≈сли объекту пр€моугольника передаетс€ сообщение area (ј), он отвечает, вычисл€€ площадь пр€моугольника, и переменна€ ј становитс€ конкретизированной значением этой площади. ¬ рассмат≠риваемой реализации объект будет представлен как отношение object[ Object, Methods)

где Object Ч терм, который именует объект (и, возможно, задает его параметры), а Methods Ч список термов Prolog, определ€ющих методы. “ермы в этом списке име≠ют форму предложений Prolog, т.е. обычных фактов и правил Prolog (если не счи≠тать того, что они не оканчиваютс€ точкой). Ѕ рассматриваемой реализации Prolog определение любого объекта может задавать целый класс объектов, таких как класс всех пр€моугольников, определ€емых с помощью предиката rectangle [ Length, Width). ¬ таком случае конкретный пр€моугольник со сторонами 4 и 3 определ€етс€



„асть II. ѕрименение €зыка Prolog в области искусственного интеллекта


с помощью терма rectanglet 4, 3). Ёто означает, что в общем объект rectang≠le { Length, Width] с двум€ методами, area и describe, может быть определен следующим образом:

object! rectangle! Length, Width),

[(area(A):-A is Length * Width),

(describe:-write('Rectangle of size '), write(Length * Width)> ]).

¬ данной реализации процесс передачи сообщени€ объекту может быть промоде≠лирован с помощью такой процедуры: send(Object, Message)

ƒл€ того чтобы объект пр€моугольника со сторонами 4 и 3 описал себ€ и вычис≠лил свою площадь, ему достаточно передать соответствующие сообщени€:

?- Reel = rectangle; 4, 3}, send! Reel, describe), send! Reel, area(Area)). Rectangle of size 4*3 Area = 12

—оставить программу дл€ процедуры send{ Object, Message) можно достаточ≠но просто. ¬начале необходимо обеспечить выборку методов объекта Object. Ёти ме≠тоды фактически определ€ют программу Prolog, котора€ €вл€етс€ локальной по от≠ношению к Object. «атем нужно вызвать на выполнение эту программу, задав ей в качестве цели сообщение Message. ѕрограмма, представленна€ в виде списка, состо≠ит из компонентов в форме Head: - Body или просто Head в случае, если тело €вл€≠етс€ пустым. „тобы выполнить программу с целью Message, требуетс€ найти голову предложени€, котора€ согласуетс€ с целью Message, а затем выполнить соответст≠вующее тело предложени€ с помощью собственного интерпретатора Prolog.

ѕрежде чем реализовать этот замысел в программе, необходимо рассмотреть еще один существенно важный механизм объектно-ориентированного программирова≠ни€ Ч наследование методов в соответствии с отношением "isa" (€вл€етс€) между объектами. Ќапример, квадрат "isa" пр€моугольником. ƒл€ вычислени€ его площа≠ди в объекте квадрата может использоватьс€ така€ же формула, как и в объектах, пр€моугольников. ѕоэтому дл€ квадрата не требуетс€ его собственный метод area; он может унаследовать этот метод от класса пр€моугольников. ƒл€ того чтобы полу≠чить такую возможность, необходимо определить объект square и дополнительно указать, что он также €вл€етс€ пр€моугольником.

object! sguare(Side), [ (describe:-

write! 'Square with, side '),

write(Side)) ]). isa(square(Side), rectangle[ Side, Side)).

Ёто дает возможность успешно выполнить следующий запрос:

?- send! square(5), area(Area)!. ƒгег - 25

—ообщение area{ Area) обрабатываетс€ таким образом: вначале выполн€етс€ поиск метода area (Area) среди методов объекта square (5), но найти его не уда≠етс€. «атем с помощью отношени€ isa успешно выполн€етс€ поиск этого метода в суперобъекте квадрата - в пр€моугольнике rectangle (5, 5). —уперобъект имеет соответствующий метод area, который вызываетс€ на выполнение.

»нтерпретатор дл€ объектно-ориентированных программ, разработанный в соот≠ветствии с замыслом, описанным в данном разделе, приведен в листинге 23.5, а в листинге 23,& приведена законченна€ объектно-ориентированна€ программа, отно≠с€ща€с€ к геометрическим фигурам.


√лава 23. ћетапрограммирование



Ћистинг 23.5. ѕростой интерпретатор дл€ объектно-ориентированных программ

' 1 »нтерпретатор дл€ объе к тно-оркентированных программ

4 send; Message, Object) если

требуетс€ найти методы объекта Object и вызвать на выполнение метод,

i который соответствует сообщению Message

send; Object, Message):-

get_methods(Object, Methods), \ Ќайти методы объекта Object

process! Message, Methods). % ¬ызвать на выполнение соответствующий метод

get_methods(Object, Methods!:-

object! Object, Methods!. % —обственные методы

get_methods(Object, Methods):-
isa(Object, SuperObject),
getjmethads! SuperObject, Methods). % ”наследованные методы

process! Message, [Message I _]). % »спользовать факт

process [ Message, [ (Message:- Body) I _]):- % »спользовать правило call(Body),

process! Message, [_ I Methods]}:-process! Message, Methods).





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 375 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

¬аше врем€ ограничено, не тратьте его, жив€ чужой жизнью © —тив ƒжобс
==> читать все изречени€...

1441 - | 1405 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.038 с.