Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Лекции.doc
Скачиваний:
44
Добавлен:
23.03.2015
Размер:
741.89 Кб
Скачать

Виды абстракций

Абстракции через параметризацию и через спецификацию являются мощными средствами создания программ. Они позво­ляют нам определить три различных вида абстракций: процедур­ную абстракцию, абстракцию данных и абстракцию через итера­цию. В общем случае каждая процедурная абстракция, абстрак­ция через данные и абстракция через итерацию используют оба способа.

Например, абстракцию sqrtможно сравнить о операцией: она абстрагирует отдельное событие или задачу. Мы будем ссы­латься к абстракциям такого рода как кпроцедурным абстрак­циям.Отметим, что абстракция sqrtвключает в себя как абстрак­цию через параметризацию, так и абстракцию через специфика­цию.

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

Поведение объектов данных наиболее естественно представлятьвтерминах набора операций, применимых к данным объектам. Такой набор включает в себя операции по созданию объектов, получению информации от них и, возможно, их модификации. Например, операцииpushиpopпринадлежат к классу операций, имеющих смысл при работе со стеками, в то время как для работы с целыми числами используются обычные арифметические опера­ции. Таким образом,абстракция данных(илитип. данных)со­стоит из набора объектов и набора операций, характеризующих поведение этих объектов.

В качестве примера рассмотрим мультинаборы (multisets). Мультинаборы сходны с обычными наборами, за исключением того, что элемент может входить в мультинабор несколько раз. Опера­ции для работы с подобными мультинаборами включают в себя операцииempty,insert,delete,number_ofиsize. Эти операции создают пустой мультинабор, удаляют и добавляют в него эле­менты, вычисляют, сколько раз данный элемент входит в мульти­набор и сколько всего элементов содержится в мультинаборе. Данные операции могут быть реализованы в языке программиро­вания через соответствующие процедуры. Программисты, работаю­щие с мультинаборами, не должны беспокоиться о том, каким об­разом эти процедуры реализованы. Для них операцииempty,insert,delete,number_ofиsizeявляются абстракциями, определя­емыми операторами типа

The size of the multi.set insert (s, e) is equal to size (s) + 1

(Размер мультинабораinsert(s,e) равен размеруsize(s) + 1)

For all e, the number, of timese occurs in the multi_ set empty ( ) is 0.

(Для всехeчисло вхожденийeв пустой мультинаборempty ( ) равно 0.)

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

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

Далее мы покажем, как осуществлять декомпозицию про­граммы на базе абстракции через итерацию. Акцент будет делаться на абстракции данных. Мы считаем, что, хотя процедурные аб­стракции и абстракции через итерацию и играют существенную роль, организация процесса программирования начинается, как правило, с абстракции данных.

Последующие несколько лекций посвящены трем перечисленным видам абстракций - что они из себя представляют, как описыва­ется их поведение и как происходит их реализация. Мы начнем с описания языка программированияCLU, специально созданного для работы по методике, описанной в данной книге, поддерживаю­щего каждый из описываемых видов абстракций. Абстракции на языке CLUреализуются сравнительно просто, поэтому в главах с 3по 6используется именно этот язык. В седьмой главе мы об­судим, как реализовать абстракции на языке Паскаль.

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

Соседние файлы в папке AlgStr