Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб 4 - 6(задания).doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
313.34 Кб
Скачать

Абстракция данных

Абстракцию данных можно рассматривать как процесс 1 организации различных фрагментов информации в единые логические единицы (возможно, иерархически), придавая ей при этом некоторую концептуально ос­мысленную форму. Каждая информационная единица должна быть легко доступна в программе. В идеальном случае все детали реализации такой структуры должны быть невидимы пользователю этой структуры. Самое главное в этом процессе — дать программисту возможность использовать информацию, не думая о деталях ее действительного представления.

Обсудим один из способов реализации этого прин­ципа на Прологе. Рассмотрим снова пример с семьей. Каждая семья — это набор некоторых фрагментов информации. Все эти фрагменты объединены в естественные информационные единицы, такие, как «член семьи» или «семья», и с ними мож­но обращаться как с едиными объектами. Предположим опять, что информация о семье структурирована так же, как на рис. 117. Определим теперь некоторые отношения, с помощью которых пользователь может получать доступ к конкретным компонентам семьи, не зная деталей рис. 117. Такие отношения можно на­звать селекторами, поскольку они позволяют выби­рать конкретные компоненты. Имя такого отношения-селектора будет совпадать с именем компоненты, которую нужно выбрать. Отношение будет иметь два аргумента: первый — объект, который содержит ком­поненту, и второй - саму компоненту:

отношение_селектор(Объект,Выбранная_компонента)

Вот несколько cелекторов для структуры семья:

муж( семья Муж, _, ), Муж).

жена( семья( ,Жена, ), Жена).

дети(семья(_,_, СписокДетей), СписокДетей).

Можно также создать селекторы для отдельных детей семьи:

первыйребенок( Семья, Первый) :-

дети( Семья, [Первый | ).

второйребенок( Семья, Второй) :-

дети( Семья, [_, Второй | ).

Можно обобщить этот селектор для выбора N-го ребенка:

nребенок( N,Семья, Ребенок) :-

дети( Семья, СписокДетей),

n_элемент( N, СписокДетей, Ребенок)

/* N-й элемент списка */

Другим интересным объектом является «член семьи». Вот некоторые связанные с ним селекторы, соответ­ствующие рис. 28:

имя(членсемьи( Имя, _,_,_), Имя).

фамилия(членсемьи( _, Фамилия, , _), Фамилия).

датарождения(членсемьи( __, _, Дата), Дата).

Какие преимущества мы можем получить от использования отношений-селекторов? Определив их, мы можем теперь забыть о конкретном виде структуры представления информации. Для пополнения и обра­ботки этой информации нужно знать только имена отношений-селекторов и в оставшейся части програм­мы пользоваться только ими. В случае, если инфор­мация представлена сложной структурой, это легче, чем каждый раз обращаться к ней в явном виде. В частности, в нашем примере с семьей пользователь не обязан знать, что дети представлены в виде списка. Например, предположим, мы хотим сказать, что, Том Фоке и Джим Фоке принадлежат к одной семье и что Джим - второй ребенок Тома Используя приве­денные выше отношения -селекторы, мы можем опреде­лить двух человек, назовем их Человек1 и Человек2 и семью. Следующий список целей приводит к желае­мому результату:

имя(Человек1, том), фамилия(Человек1, фокc),

/* Человек1 - Том Фокc */

имя(Человек2, джим), фамилия(Человек1, фокc),

/* Человек2 - Джим Фокс */

муж(Семья, Человек1),

второйребенок(Семья, Человек2)

Использование отношений-селекторов облегчает также и последующую модификацию программ.

Представьте себе, что мы захотели повысить эффектив­ность программы, изменив представление информации. Все, что нужно сделать для этого, — изменить опре­деления отношений-селекторов, и вся остальная про­грамма без изменений будет работать с этим новым представлением.

Задание.

Разработать базу данных с вложенной структурой, соответствующей заданной предметной области и глубины (таблица 6).

Таблица 6

Вариант

Предметная область

Глубина вложения

1

Семья

3

2

Структура предприятия

3

3

Компьютеры

2

4

Структура локальной сети

3

5

Студенты

3

6

Автомобили

2

7

Корабли

2

8

Самолеты

2

9

Телефонный справочник

4

10

Страны

2

11

Структура сайтов

3

12

Структура книг

3

13

Футбольная команда

2

14

Квартиры

2

15

Структура фирмы

3