Абстрактный тип данных-тема2.ppt
- Количество слайдов: 28
Абстрактный тип данных Общие положения о данных Абстрактный тип данных общие положения спецификация, представление, реализация 1
Что такое данные? • Набор различных информационных объектов, над которыми выполняются те или иные действия операторами программы, называются данными. • Данные - непременный атрибут любой программы. Ими могут быть: • - отдельные биты; • - последовательность независимых битов; • -числа в разных формах представления; • -байты и группы независимых байтов; • -массивы чисел; • -связные списки; • -отдельные файлы и системы файлов. 2
• Универсальное представление этого многообразия данных сложно и нецелесообразно • Целесообразно разделить их на типы 3
Что такое тип данных? • Тип данных определяется: – Форматом представления в памяти компьютера по определенным соглашениям алгоритмического языка, но без необходимости вычислений; – Множеством допустимых значений, которые может принимать принадлежащая к выбранному типу переменная или константа; – Множеством допустимых операций, применимых к этому типу. 4
Примеры типов данных • • Целочисленные типы Вещественный тип Логический тип Символьный тип Перечисляемый тип Интервальный тип Указатели 5
Целочисленные типы • имеется пять предопределенных целочисленных типов: Shortint, Integer, Longint, Byte и Word. • Каждый тип обозначает определенное подмножество целых чисел. Значение одного целочисленного типа может быть явным образом преобразовано к другому целочисленному типу с помощью приведения типов. 6
Вещественный тип • К вещественному типу относится подмножество чисел, представляемых в формате с плавающей точкой и с фиксированным числом цифр. Запись значения в формате с плавающей запятой обычно включает три значения - m, b и e - таким образом, что m * b ^ e = n, где b всегда равен 2, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон представления и точность вещественного типа. • Пример: 0. 143 E+22, где m - 0. 143; b=2(подразумевается), e=22. • Имеется пять видов вещественных типов: вещественное (Real), с одинарной точностью (Single), с двойной точностью (Double), с повышенной точностью (Extended) и сложное (Comp). 7
Логический тип • Существует 4 предопределенных логических (булевских) типа: Boolean, Byte. Bool, Word. Bool и Long. Bool. • Значения булевского типа обозначаются встроенными идентификаторами констант False и True. • Логические переменные могут использоваться для хранения результатов каких - либо логических вычислений. Для булевых переменных разрешены только 2 операции сравнения "="(равно) и "<>"(неравно). 8
Символьный тип • Множеством значений этого типа являются символы, упорядоченные в соответствии с расширенным набором символов кода ASCII. Это буквы ['A'. . . 'Z', 'a'. . . 'z'], цифры ['0'. . . '9'], знаки препинания и специальные символы. Переменная этого типа в памяти занимает один байт. 9
Перечисляемый тип • Перечислимые типы определяют упорядоченные множества значений через перечисление идентификаторов, которые обозначают эти значения. Упорядочение множеств выполняется в соответствии с последовательностью, в которой перечисляются идентификаторы. • Type Week = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); 10
Интервальный тип • Интервальный тип представляет собой диапазон значений из порядкового типа. Определение интервального типа включает наименьшее и наибольшее значение в поддиапазоне. • Type Interval = 0. . . 1000; • Такая декларация типа указывает компилятору, что для переменных этого типа допустимы только числа из указанного диапазона. Тем самым в программе могут быть автоматически организованы проверки корректности операций присвоения для этих переменных. 11
Общее для типов данных • Каждому из типов данных соответствует множество простых операций. • INTEGER-операции +, -, *, div, mod • REAL - операции + , -, *, / • BOOLEAN- операции - конъюнкция (и), дизъюнкция V (или), отрицание (не) • CHAR-операции ORD (с) -N: (С в ASCII), CHR (I) I -тый символ в ASCII • По мере возрастания объемов и сложности представления информации возникает необходимость в удобных формах ее представления, хранения и обработки. 12
Определение • абстрактный тип данных (АТД или abstract data type, или ADT), - это множество абстрактных объектов, представляющих элементы данных, и определенные на нем наборы операций, которые могут быть выполнены над элементами этого множества. 13
АТД – обобщение типов данных • Абстрактные типы данных (АТД) можно рассматривать как средство расширения языков программирования. • Сравним абстрактный тип данных с таким знакомым понятием, как процедура. Процедуру можно рассматривать как обобщённое понятие оператора. Две характерные особенности процедур – обобщение и инкапсуляция, отлично характеризуют абстрактные типы данных. • АТД можно рассматривать как обобщение простых типов данных (целых, действительных и т. д. ), точно также как процедура является обобщением простых операторов (+, - и т. д. ) 14
Преимущества АТД • Абстрактные структуры данных предназначены для удобного хранения и доступа к информации. Они предоставляют удобный интерфейс для типичных операций с хранимыми объектами, скрывая детали реализации от пользователя. Конечно, это весьма удобно и позволяет добиться большей модульности программы. 15
Пример • Для автоматизированного управления температурой в различных комнатах большого здания полезным АТД был бы ТЕРМОСТАТ. В программе может быть много переменных типа ТЕРМОСТАТ, соответствующих реальным термостатам в различных помещениях здания. • АТД может быть описан своим именем, множеством значений и допустимыми операциями так же, как и любой другой тип данных. • Описание для типа ТЕРМОСТАТ: – Тип данных: ТЕРМОСТАТ – Область значений: температура может изменяться в диапазоне от 0 до 50 градусов (по Цельсию). – Операции: Выше, Ниже, Установить, Проверить, Тревога. (Можно придумать много полезных операций, но слишком большое их количество ухудшает абстракцию) 16
Уровни абстракции • Уровни абстракции напоминают слои программного обеспечения. • Высшие уровни абстракции отражают представление пользователя о решении задачи. • Нижние уровни абстракции – возможности языка программирования. 17
Пример абстракции на уровне пользователя • Архитектор представляет дом в виде стен, полов, окон, дверей и т. д. В этом случае тип данных Рисунок. Двери мог бы стать хорошим абстрактным типом. • Тип данных: Рисунок. Двери • Операции: Рисовать. Дверь • Стереть. Дверь • Рисовать. Двойную. Дверь • ……. • Рисунок. Двери являются абстракцией высокого уровня, отражающего взгляд пользователя на проблему 18
Пример абстракции на уровне программиста • Программист может предложить другой уровень абстракции для этих объектов, например, прямоугольник. • Тип данных: Прямоугольник • Операции: Рисовать. Прямоугольник • Стереть. Прямоугольник • Разделить. Прямоугольник. На. Части • ……. • Прямоугольник – абстракция более низкого уровня, поскольку она ближе к реализации. 19
Конструкторы АТД • Каждый АТД должен содержать операции построения значений своего типа. Такие операции называются конструкторами. • Конструкторов должно быть достаточно для порождения всего множества значений данного типа. • АТД, удовлетворяющий этому свойству, называется полным. • Неполный АТД – ошибка проектирования. 20
Рекомендации к выбору операций абстрактного типа данных Целесообразно включение следующих операций: – операции-конструкторы, – операции проверки, – операции преобразования типов, – операции ввода-вывода, – операции копирования, – операции-селекторы. Постарайтесь свести к минимуму число операций. Простой АТД легче понять. Поддерживайте связь операций с выбранной абстракцией типа. 21
Первичный конструктор • Операции, создающие новые значения АТД вне зависимости от его предшествующего значения, называются первичными конструкторами. • Каждый АТД включает по меньшей мере один первичный конструктор: без него невозможно сформировать начальное значение. 22
Использование скрытых типов • Абстрактные типы данных лучше объявлять в виде скрытых типов. Это позволяет переместить описание структуры данных в модуль реализации, где оно преимущественно используется. Они также обеспечивают возможность предотвращения прямого доступа к компонентам типа со стороны импортера. • Поскольку скрытый тип всегда реализуется с помощью указателя, то в АТД должны быть включены три операции. – Создать - операция, создающая узел соответствующей структуры. – Уничтожить - операция по освобождению памяти узла скрытого типа. – Присвоить - операция копирования полей динамической структуры узла скрытого типа. 23
Что такое спецификация и реализация у абстрактного типа данных • Абстрактный тип данных — это способ определения некоторого понятия в виде класса объектов с некоторыми свойствами и операциями. В языке программирования такое определение оформляется как специальная синтаксическая конструкция, называемая в разных языках капсулой, модулем, кластером, классом, пакетом, формой и т. д. Эта конструкция в самой развитой форме содержит: • спецификацию типа данных, включающую описание интерфейса (имя определяемого типа, имена операций с указанием их профилей) и абстрактное описание операций и объектов, с которыми они работают, некоторыми средствами спецификации; • реализацию типа данных, включающую конкретное описание тех же операций и объектов. 24
Классификация типов данных по способу описания и защиты • пакетированный, если описание типа данных собрано в одном месте (в одном пакете), т. е. его объекты и операции объединены в одно понятие; он имеет определение, которое может содержать, однако, лишь его реализацию; • инкапсулированный, если тип данных пакетированный, его определение содержит описание интерфейса и реализацию, а также предусмотрена инкапсуляция реализации; • абстрактный, если тип данных инкапсулированный и его спецификация включает абстрактное описание. 25
Составляющие спецификации • Программирование, как процесс, начинается с постановки задачи (ее определения), или спецификации задачи. Далее повсеместно в тексте используются спецификации, состоящие из шести составляющих: – Название - название решаемой задачи; – Описание - несколько предложений, описывающих суть задачи; – Вход - детальное описание предполагаемой формы входных данных; – Выход - детальное описание предполагаемой формы выходных данных; – Ошибки - подробный список ситуаций, возникающих при неправильных входных данных; – Пример - пример выполнения в терминах вход-выход. 26
П р и м е р спецификации • Абстрактный тип данных СТЕК, реализующий широко известную структуру данных, которая характеризуется тем, что в нее можно "поместить" некоторый элемент и "выбрать" из нее элемент, помещенный туда самым последним. Синтаксическая часть спецификации типа данных СТЕК имеет вид • type СТЕК specification is • СОЗДАТЬ: function () return (@); • ВСТАВИТЬ: function (integer; @) return (@); • УДАЛИТЬ: function (@) return (@); • ВЕРШИНА: function (@) return (integer); • ПУСТ: function (@) return (boolean); • end specification; • Здесь операция СОЗДАТЬ выдает в качестве результата пустой стек, ВСТАВИТЬ — стек с добавленным на "верх" его элементом, УДАЛИТЬ — стек с удаленным "верхним" элементом, ВЕРШИНА — значение "верхнего" элемента стека, ПУСТ — признак пустоты стека. Элементами стека здесь могут быть только целые числа. 27
РЕАЛИЗАЦИЯ АБСТРАКТНОГО ТИПА ДАННЫХ • Реализацию удобнее делать с помощью объектноориентированных языков программирования, таких как C++ или Java, в которых абстрактные типы данных поддерживаются с помощью классов • Реализация АТД включает конкретное описание объектов определяемого типа и реализацию операций этого типа. Это означает, что объекты описываются либо как данные простых типов, либо как массивы, записи или объединения. Причем используются предопределенные типы данных или АТД, определенные ранее. • Реализация операций состоит в описании подпрограмм, выполняющих необходимые действия с указанными объектами. Например операции +, *, =. . и т. п, но при этом скрывается сама реализация этих операций. 28
Абстрактный тип данных-тема2.ppt