- •Информационная модель предметной области
- •Моделирование задач на эвм
- •Преобразование информации при решении задачи на эвм
- •Понятие о данных
- •Абстрактные структуры данных
- •Классификация структур данных
- •14101954
- •Абстракция
- •Лекция 6. Види та методи абстракції в програмуванні. Абстракция через параметризацию
- •Абстракция через спецификацию
- •Виды абстракций
- •Лекция 7. Процедурна абстракція. Специфікація процедурної абстракції. Процедурная абстракция
- •Спецификации
- •Спецификации процедурных абстракций
- •Реализация процедур
- •Более обобщенные процедуры
- •Создание процедурных абстракций
- •Заключение
- •Лекция 8. Абстракція даних Абстракции данных
- •Спецификации для абстракций данных
- •Реализация на языке clu
- •Замечания по поводу операций up и down
- •Использование абстракций данных
- •Лекция 9. Реалізація абстракції даних. Функція абстракції. Функція інваріант подання.
- •Функция абстракции
- •Инвариант представления
- •Сохранение инварианта представления
- •Изменяемые представления
- •Параметризованные абстракции данных
- •Будем искать решение нашей задачи в виде цикла, имеющего следующий вид:
Заключение
В этой лекции мы имели дело главным образом с процедурами: что они из себя представляют, как описывается их поведение и как осуществляется их реализация. Мы также рассмотрели два важных преимущества абстракции и необходимость в спецификации.
Абстракция дает два основных преимущества, заключающихся в локальности и модифицируемости. Оба этих преимущества базируются на различии между абстракцией и ее реализациями. Локальность предполагает, что каждая реализация может быть рассмотрена независимо от остальных. Абстракция может быть. использована без уяснения для себя способа ее реализации и реализована без понимания того, как она будет использована. Модифицируемость означает, что одна реализация может быть заменена другой без изменения других программ.
Для достижения этих преимуществ мы должны иметь описание абстракции, которое отлично .от любой ее реализации. До сих пор мы рассматривали спецификацию, которая описывает поведение абстракции на специальном языке спецификаций. Этот язык может быть формальным или неформальным. Пользователи должны опираться на описываемое в спецификации поведение данной процедуры, а создатели процедуры должны обеспечить это поведение. Следовательно, спецификация является соглашением между пользователями процедуры и ее составителями.
Процедуру можно рассматривать как некоторое отображение входных значений в выходные с возможной модификацией некоторых входных значений. Поведение процедуры, подобно другим видам абстракций, описывается в ее спецификации, и здесь мы даем форму неформальных спецификаций процедур. Процедура в языкеCLUвводится предложениемproc. В других языках она может быть реализована при помощи аналогичного механизма.
Поскольку мы заинтересованы в разработке и реализации хороших абстракций, то заканчиваем главу рассмотрением того, как должны выглядеть процедуры. Желательно наличие таких свойств, как минимальность, простота и обобщенность. Требование минимальности часто ведет к недоопределенным абстракциям. Мы продолжим обсуждение этих свойств в последующих главах по мере рассмотрения других видов абстракций.
Лекция 8. Абстракція даних Абстракции данных
Ранее мы обсуждали один из основных видов используемых в программировании абстракций —абстракций процедур. Процедуры дают нам возможность добавлять в базовый язык новые операции. Кроме операций, однако, базовый уровень предусматривает различные типы данных, например целые, вещественные, логические, строки и массивы. Как отмечалось в гл. 1,нам необходимо иметь возможность добавлять в базовый уровень не только новые процедуры, но и новые операции. Эта необходимость удовлетворяетсяабстракцией данных.
Какие новые типы данных необходимы, зависит от области применения программы. Например, при реализации компилятора или интерпретатора полезны стеки и символьные таблицы, в то время как в банковской системе естественной абстракцией являются счета. В символической системе вычислений возникают полиномы, а при определении пакета численных функций — матрицы. В каждом конкретном случае абстракция данных состоит из набора объектов, например стеков или полиномов, и набора операций. Например, матричные операции включают в себя сложение, умножение и т.д., а операции над счетами - снятия и вклады.
Новые типы данных должны включать в себя абстракции как через параметризацию, так и через спецификацию. Абстракции через параметризацию могут быть осуществлены точно так же, как и для процедур, —использованием параметров там, где это имеет смысл. Абстракции через спецификацию достигаются за счет того, что мы представляем операции как часть типа. Чтобы понять, почему операции необходимы, посмотрим, что получится, если будем рассматривать тип просто как набор объектов. В этом случае все, что необходимо сделать для реализации типа, —это выбрать представление памяти для объектов. Тогда все программы могут быть реализованы в терминах этого представления. Однако, если представление изменяется (или даже если изменяется интерпретация этого представления), все программы, которые используют этот тип, должны быть изменены. (Пример различных интерпретаций одного и того же представления дан в разд. 4.5.1.)
С другой стороны, предположим, что мы включаем операции в тип следующим образом:
абстракция данных =<объекты, операции>
При этом мы требуем, чтобы пользователи употребляли эти операции непосредственно, не обращаясь к представлению. Затем для реализации типа мы реализуем операции в терминах выбранного представления. При изменении же представления мы должны заново реализовать операции. Однако переделывать программы уже нет необходимости, так как они не зависят от представления, а зависят только от операций. Следовательно, мы получаем абстракцию через спецификацию.
Если обеспечено большое количество операций, отсутствие доступа к представлению не будет создавать для пользователей никаких трудностей —все, что они хотят сделать с объектами, может быть сделано (и при том сделано эффективно) при помощи использования операций. Обычно имеются операции для создания и модификации объектов, а также для получения информации об их значениях. Конечно, пользователи могут увеличивать набор операций определением процедур, но такие процедуры не должны использовать представление.
Абстракции данных - наиболее важный метод в проектировании программ, и об этом мы подробно поговорим на следующих лекциях. Выбор правильных структур данных играет решающую роль для создания эффективной программы. При отсутствии абстракций данных структуры данных должны быть определены до начала реализации модулей. Но в этот момент, однако, структуры Данных обычно еще не вполне ясны. Следовательно, в выбранных структурах может отсутствовать какая-либо необходимая информация или же эти структуры могут быть организованы неэффективно.
Абстракции данных позволяют отложить окончательный выбор структур данных до момента, когда эти структуры станут нам вполне ясны. Вместо того чтобы определять структуру непосредственно, мы вводим абстрактный тип со своими объектами и операциями. Затем можно осуществлять реализацию модулей в терминах этого абстрактного типа. Решение же относительно реализации типа может быть принято позже, когда использование данных станет для нас вполне понятным.
Абстракции данных также полезны при модификации и эксплуатации программ. Чаще предпочтительнее изменить структуры данных, чем улучшать производительность или приспосабливаться к изменяющимся требованиям. Абстракции данных сводят все изменения к изменениям в реализации типа —модули же нет необходимости изменять.
В этой лекции мы рассмотрим задание и реализацию абстракций данных. Кроме того, мы поговорим о том, как можно судить о корректности программ, которые используют реализованные типы, а также рассмотрим некоторые вопросы, которые возникают при проектировании новых типов.