Скачиваний:
24
Добавлен:
01.05.2014
Размер:
356.35 Кб
Скачать

Запрет наследования

Проблема решается при помощи приводимой ниже программы, Предикат "сократить" в первом правиле "собрание_38" гарантирует то, что если у фрейма "собрание_38" будет иметься локальное значение слота, то этот фрейм не сможет унаследовать другое значение того же самого слота oт фрейма "собрание'".

разновидность (собрание, мере приятие).

разновидность (с_38, собрание).

% значения слотов фрейма "собрание":

собрание (время,'Среда 14.00').

собрание (место, 'Зал заседаний').

% локальное правило

собрание_38 (Атрибут, Значение) :

с_38 (Атрибут, Значение),!.

% правило наследования

собрание_38 (Атрибут, Значение) ,-

разновидность (с_38, Фрейм),

Подцель = . . [Фрейм, Атрибут, Значение],

Подцель.

% значения слотов, локальные по отношению к фрейму

% "собрание_38"

с_ 38 (присутствуют, [рональд, синди, фред]) .

с_38 (время. 'Четверг 9.00').

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

| ?- собрание_38 (время, X).

Х = 'Четверг 9.00'; % по "с_38"

нет

| ?- собрание-38 (место, X).

Х = 'Зал заседании' ; % по "собрание_38"

нет

6.4. Объектно-ориентированное программирование Объекты и сообщения

В языке объектно-ориентированного программирования, таком как Смолток-80, фундаментальной вычислительной сущностью является объект. Единственный способ выполнить вычисление заключается в том, чтобы послать объекту сообщение. Объекты организуются в классы,. Объект является конкретным экземпляром, принадлежащим к классу, В определении класса задается структура его объектов. Типичная программа организована в виде иерархии классов. Класс аналогичен структуре данных процедурного языка, а объект — конкретному экземпляру структуры данных (т.е. переменной).

Определение класса

В определение класса могут входить четыре вида компонент:

1) сообщения (команды для вычислений), воспринимаемые всеми конкретными экземплярами, принадлежащими к классу;

2) методы (присоединенные процедуры), общие для всех объектов определяемого класса;

3) переменные классов, значения которых являются общими для всех объектов заданного класса, и

4) переменные конкретных экземпляров (аналоги "слотов" в формализме фреймов), значения которых уникальны для каждого конкретного объекта.

Наследование

Множество сообщений, воспринимаемых объектом, определяет его интерфейс (т.е. вое возможные способы обращения к этому объекту). Для каждого сообщения имеется соответствующий метод (т.е. процедура), выполняющий вычисления, необходимые для ответа на сообщение. Сообщения и методы, используемые для выработки ответов на них, наследуются от класса к классу следующим образом. Если посылается сообщение конкретному экземпляру, принадлежащему к некоторому классу и оно не определено для этого класса, то сообщение передается суперклассу данного класса (т.е. классу, находящемуся в иерархии над данным). Тем самым класс наследует все сообщения, определенные в его суперклассе или выше. Если унаследованное сообщение переопределяется в классе, то локальное определение перекрывает унаследованное для этого класса определение.

На рис. 6.4 показана иерархия классов программы, несущей информацию о видах птиц.

Если объекту "ральф" посылается сообщение, в котором спрашивается о способе передвижения, то это сообщение обрабатывается мето-

дом класса ПИНГВИНЫ и выдается ответ «хождение вразвалочку». Но если послать то же самое сообщение объекту "твити", то мы увидим, что в классе КАНАРЕЙКИ отсутствует обработка этого сообщения. Поэтому данное сообщение пересыпается в класс ПТИЦЫ, являющийся суперклассом класса КАНАРЕЙКИ. Сообщение обрабатывается методом класса ПТИЦЫ и выдается ответ «полет».

Формализм объектно-ориентированного программирования можно одновременно трактовать и как обобщение понятия абстрактных типов данных, и как уточнение формализма фреймов. Стоит подробно рассмотреть обе точки зрения.

Соседние файлы в папке Гл.6,7,Прилож.,Допол