Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Методы абстрагирования данных




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

Рассмотрим один из способов осуществления данного принципа в языке Prolog. Для этого снова вернемся к примеру с информацией о семье из предыдущего раздела. Информация о каждой семье представляет собой коллекцию различных фрагментов информации. Все эти фрагменты собраны в такие естественные информационные компоненты, как данные об отдельном лице или о семье, чтобы их можно было рас­сматривать как целостные объекты. Снова предположим, что информация о семье структурирована, как показано на рис. 4.1. В предыдущем разделе сведения о каж­дой семье были представлены в виде предложения Prolog. А в этом разделе данные о семье будут представлены в виде структурированного объекта, как показано ниже. FoxFaxily = family { person) ton, fox, _,_>,_,_>

Определим некоторые отношения, с помощью которых пользователь сможет об­ращаться к отдельным компонентам информации о семье без учета сведений, пред­ставленных на рис. 4,1. Подобные отношения можно назвать селективными, по­скольку они позволяют извлекать из базы данных определенные компоненты. В ка­честве имени такого селективного отношения (или просто селектора) применяется имя выбираемого с его помощью компонента. Каждое отношение будет иметь два па­раметра: объект, содержащий компонент, и сам компонент:

selector_relation(Object, Component_selected)

Ниже приведены некоторые селекторы для структуры с описанием семьи.

children! family! _, _, ChiltiList), ChildList).

Кроме того, можно определить селекторы для первого и второго по счету ребенка следующим образом:

firstchildt Family, First):-

children) Family, [First |. _] >. secondchildt Family, Second):-

children) Family, [ _, Second _]),

Это определение можно уточнить, чтобы иметь возможность выбирать п-го ребен­ка, таким образом: nthchildl Ы, Family, Child):-

nth_membe^XChildList, Child). % n-й элемент списка

Еще одним интересным объектом является отдельное лицо. Ниже приведены не­которые селекторы, которые соответствуют структуре, приведенной на рис. 4.1.

firstnamef person (Hame, _,_,_), Наше). surname (реиоп Г_, Surname,, I, Surname].

borni person(_,_,Date, J, Date).

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

102 Часть I. Язык Prolog


формацией достаточно знать имена селективных отношений и использовать их в ос­тальной части программы. В случае более сложных вариантов представления их ис­пользовать проще, чем всегда явно ссылаться на сами представления. В частности, в рассматриваемом примере семьи пользователю не требуется знать, что информация о детях представлена в виде списка. Предположим, например, что необходимо сфор­мировать утверждение о том, что Том Фокс и Джим Фокс принадлежат к одной и той же семье и что Джим — второй ребенок Тома. С использованием приведенных выше селективных отношений можно определить два лица, скажем, Fersonl и Person2, и саму семью. Такую задачу позволяет выполнить следующий список целей:

firstnamef Fersonl, torn), surname (Personl, fox), % Fersonl - Том Фокс firstname< Person2, j im), surname (Person2, fox), % Person2 - Джим Фокс husband{ Family, Personl), secandchild; Family, Person2)

В результате конкретизация переменных Personl, Person2 и Family будет вы­полнена следующим образом:

Personl - person; torn, fox, _, _) Person2 = person; jirn, fox, _, _! Family = familyf person [torn, fox, _,_), _, [ _, person (jim, fox) | _ ]>

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





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 932 | Нарушение авторских прав


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

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2236 - | 2194 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.