Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures_2.doc
Скачиваний:
28
Добавлен:
15.03.2015
Размер:
511.49 Кб
Скачать

Абстрактный тип данных

Несмотря на широкое использование этого понятия, его единая трактовка отсутствует. Некоторые авторы под абстрактным типом данных (АТД) понимают математическую модель абстракции. Несомненно, построение математической модели абстракции позволило бы построить ее описание. Наиболее последовательно этот подход представлен в книге Бертрана Мейера[21].

Спецификация АТД, которая предлагается Бертраном Мейером в несколько упрощенном виде состоит из четырех разделов:

  • наименование типа.

  • прототипы функций.

  • аксиомы.

  • предусловия.

Назначение первого раздела не требует пояснения. Второй раздел определяет интерфейс, предоставляемый АТД. Третий раздел предназначен для описания функциональности АТД. Последний раздел спецификаций определяет условия, которые должен обеспечить клиент АТД

Реализация абстракции сущности требует наличия аппарата, который позволял бы программисту разрабатывать собственные типы данных. Такой аппарат предоставляет объектно-ориентированное программирование. Попытаемся ответить на вопрос: можно ли оставаясь в рамках процедурного языка, например языка С, реализовать пользовательский тип данных.

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

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

Понятие абстрактного типа данных (АТД) широко применяется на практике. Однако различные авторы по-разному определяют это понятие. Некоторые из них под АТД понимают математическую модель абстракции [20]. Очень важным является то обстоятельство, что нет необходимости пересматривать модель при смене реализации и более того это не надо делать при переходе на другой язык программирования. Построив такую модель, можно познакомиться с интересующей вас сущностью. Такое определение АТД чрезвычайно полезно. Полезность его в полной независимости от реализации. Однако имеется и существенный недостаток. Оно не позволяет ответить на вопрос: можно ли реализовать рассматриваемую абстракцию на конкретном языке программирования.

/* Файл Stack.h */ struct Stack { double *ptemp; int size; int top; }; void allocate_memory(struct Stack* p, int size) { p -> size = size; p -> ptemp = (double*)malloc(sizeof(double) * size); p -> top = -1; } void free_memory(struct Stack* p) { free(p -> ptemp); }

Организация класса

В языке С++ классы предназначены для частичной или полной реализации пользовательского типа (абстрактного типа данных). Различают конкретные и абстрактные классы. Конкретные классы предназначены для создания объектов. С помощью конкретных классов создаются пользовательские типы данных. Абстрактные классы не позволяют создавать объекты. В настоящем разделе рассматриваются конкретные классы.

Класс языка С++ является развитием (обобщением) структур языка С. Класс отличается от структуры в следующих отношениях:

  • В классе объединяются не только данные (как это имеет место в структуре), но и функции.

  • Элементы класса наделяются правами доступа.

  • Класс наделяется отдельной областью видимости.

Соседние файлы в предмете Программирование