- •Информационная модель предметной области
- •Моделирование задач на эвм
- •Преобразование информации при решении задачи на эвм
- •Понятие о данных
- •Абстрактные структуры данных
- •Классификация структур данных
- •14101954
- •Абстракция
- •Лекция 6. Види та методи абстракції в програмуванні. Абстракция через параметризацию
- •Абстракция через спецификацию
- •Виды абстракций
- •Лекция 7. Процедурна абстракція. Специфікація процедурної абстракції. Процедурная абстракция
- •Спецификации
- •Спецификации процедурных абстракций
- •Реализация процедур
- •Более обобщенные процедуры
- •Создание процедурных абстракций
- •Заключение
- •Лекция 8. Абстракція даних Абстракции данных
- •Спецификации для абстракций данных
- •Реализация на языке clu
- •Замечания по поводу операций up и down
- •Использование абстракций данных
- •Лекция 9. Реалізація абстракції даних. Функція абстракції. Функція інваріант подання.
- •Функция абстракции
- •Инвариант представления
- •Сохранение инварианта представления
- •Изменяемые представления
- •Параметризованные абстракции данных
- •Будем искать решение нашей задачи в виде цикла, имеющего следующий вид:
Виды абстракций
Абстракции через параметризацию и через спецификацию являются мощными средствами создания программ. Они позволяют нам определить три различных вида абстракций: процедурную абстракцию, абстракцию данных и абстракцию через итерацию. В общем случае каждая процедурная абстракция, абстракция через данные и абстракция через итерацию используют оба способа.
Например, абстракцию 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используется именно этот язык. В седьмой главе мы обсудим, как реализовать абстракции на языке Паскаль.
В последней части курса рассматривается использование абстракций при составлении программ. Обсуждаются этапы составления программ, их проектирование и реализация. Книга включает в себя ряд практических советов, помогающих решить проблемы, возникающие при составлении реальных программ.