|
||||
|
Назад | Содержание| Вперёд 4. 2. Абстракция данных Абстракцию ...Назад | Содержание| Вперёд 4. 2. Абстракция данных Абстракцию данных можно рассматривать какпроцесс организации различных фрагментовинформации в единые логические единицы(возможно, иерархически), придавая ей при этомнекоторую концептуально осмысленную форму.Каждая информационная единица должна быть легкодоступна в программе. В идеальном случае вседетали реализации такой структуры должны бытьневидимы пользователю этой структуры. Самоеглавное в этом процессе - дать программистувозможность использовать информацию, не думая одеталях ее действительного представления. Обсудим один из способов реализации этогопринципа на Прологе. Рассмотрим снова пример ссемьей из предыдущего раздела. Каждая семья - этонабор некоторых фрагментов информации. Все этифрагменты объединены в естественныеинформационные единицы, такие, как "членсемьи" или "семья", и с ними можнообращаться как с едиными объектами. Предположимопять, что информация о семье структурированатак же, как на рис. 4.1. Определим теперь некоторыеотношения, с помощью которых пользователь можетполучать доступ к конкретнымкомпонентам семьи, не зная деталей рис. 4.1.Такие отношения можно назвать селекторами ,поскольку они позволяют выбирать конкретныекомпоненты. Имя такого отношения-селектора будетсовпадать с именем компоненты, которую нужновыбрать. Отношение будет иметь два аргумента:первый - объект, который содержит компоненту, ивторой - саму компоненту: отношение_селектор(Объект,Выбранная_компонента) Вот несколько селекторов для структуры семья: муж( семья( Муж, _, _ ),Муж). жена( семья( _, Жена, _), Жена). дети( семья( _, _,СписокДетей ), СписокДетей). Можно также создать селекторы для отдельныхдетей семьи: первыйребенок(Семья, Первый) :- дети(Семья, [Первый | _ ]). второйребенок(Семья, Второй) :- дети(Семья, [ _, Второй | _ ]). . . . Можно обобщить этот селектор для выбора N-горебенка: nребенок( N,Семья, Ребенок) :- дети(Семья, СписокДетей), n_элемент(N, СписокДетей, Ребенок) % N-й элемент списка Другим интересным объектом является "членсемьи". Вот некоторые связанные с нимселекторы, соответствующие рис. 4.1: имя( членсемьи( Имя,_, _, _ ), Имя). фамилия( членсемьи( _,Фамилия, _, _ ), Фамилия). датарождения( членсемьи(_, _, Дата), Дата). Какие преимущества мы можем получить отиспользования отношений-селекторов? Определивих, мы можем теперь забыть о конкретном видеструктуры представления информации. Дляпополнения и обработки этой информации нужнознать только имена отношений-селекторов и воставшейся части программы пользоваться толькоими. В случае, если информация представленасложной структурой, это легче, чем каждый разобращаться к ней в явном виде. В частности, внашем примере с семьей пользователь не обязанзнать, что дети представлены в виде списка.Например, предположим, мы хотим сказать, что ТомФокс и Джим Фокс принадлежат к одной семье и чтоДжим - второй ребенок Тома. Используя приведенныевыше отношения-селекторы, мы можем определитьдвух человек, назовем их Человек1 и Человек2,и семью. Следующий список целей приводит кжелаемому результату: имя( Человек1, том),фамилия( Человек1, фокс), % Человек1 - Том Фокс имя( Человек2, джим),фамилия( Человек1, фокс), % Человек2 - Джим Фокс муж( Семья, Человек1), второйребенок( Семья,Человек2) Использование отношений-селекторов облегчаеттакже и последующую модификацию программ.Представьте себе, что мы захотели повыситьэффективность программы, изменив представлениеинформации. Все, что нужно сделать для этого, -изменить определения отношений-селекторов, и всяостальная программа без изменений будетработать с этим новым представлением. Упражнение 4. 3. Завершите определениеотношения nребенок, определивотношение n_элемент( N,Список, X) которое выполняется, если Х является N-мэлементом списка Список. Посмотреть ответ Назад | Содержание| Вперёд |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|