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

27. Абстрактные типы данных

Абстра́ктный тип да́нных (АТД) — это тип данных, который предоставляет для работы с элементами этого типа определённый набор функций, а также возможность создавать элементы этого типа при помощи специальных функций. Вся внутренняя структура такого типа спрятана от разработчика — в этом и заключается суть абстракции. Абстрактный тип данных определяет набор независимых от конкретной реализации типа функций для оперирования его значениями. Конкретные реализации АТД называются структурами данных. В программировании абстрактные типы данных обычно представляются в виде интерфейсов, которые скрывают соответствующие реализации типов. Программисты работают с абстрактными типами данных исключительно через их интерфейсы, поскольку реализация может в будущем измениться. Такой подход соответствует принципу инкапсуляции в объектно-ориентированном программировании. Раз вовне опубликован только интерфейс, то пока структура данных поддерживает этот интерфейс, все программы, работающие с заданной структурой абстрактным типом данных, будут продолжать работать. Разработчики не меняя внешнего интерфейса и семантики функций, постепенно дорабатывают реализации, улучшая алгоритмы по скорости, надежности и используемой памяти. Различие между абстрактными типами данных и структурами данных, которые реализуют абстрактные типы, можно пояснить на следующем примере. Абстрактный тип данных список может быть реализован при помощи массива или линейного списка, с использованием различных техник динамического выделения памяти. Однако каждая реализация определяет один и тот же набор функций, который должен работать одинаково для всех реализации. Абстрактные типы данных позволяют достичь модульности программных продуктов и иметь несколько альтернативных взаимозаменяемых реализаций отдельного модуля.

28. Наследование

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

Раннюю форму наследования можно обнаружить в правилах определения об­ласти видимости для структурированных блоков данных. Имена, используемые во внутреннем блоке, могут быть унаследованы из внешнего блока.

Хотя правила определения области видимости явля­ются разновидностью наследования, этот термин чаще используется для ссылки на передачу данных и функций между независимыми модулями программы. При­мером этого является конструкция class в языке C++. Если между классами А и В установлено отношение, которые можно записать как А => В, то некоторые объек­ты класса А будут неявным образом унаследованы и могут быть использованы в классе В. Если некоторый объект X объявлен в классе А и не переопределен в клас­се В, то любая ссылка на объект X внутри класса В в силу наследования фактически является ссылкой на объект X из класса А.

Если между классами А и В определено отношение А => В, то говорят, что класс А является родительским классом, или суперклассом, а класс В — зависимым, или до­черним, классом, или подклассом. Класс А является прямым предком, или родите­лем класса В. Если некоторый класс имеет только одного роди­теля, то такое наследование называется простым. Если же класс имеет нескольких родителей, то такая форма наследования называется множественной