
- •8. Массивы переменного размера
- •11. Элементарные операции
- •12. Операции для структур данных: создание/удаление структур
- •15. Управление последовательностью выполнения инструкций
- •16. Подпрограммы. Правила копирования
- •17. Рекурсивные подпрог.
- •21. Передача параметров в подпрог.
- •24.Базовое управление памятью
- •25.Инкапсуляция. Структурные типы данных и их реалызация
- •27. Абстрактные типы данных
- •28. Наследование
- •29. Связь языков программирования окружающей средой
27. Абстрактные типы данных
Абстра́ктный тип да́нных (АТД) — это тип данных, который предоставляет для работы с элементами этого типа определённый набор функций, а также возможность создавать элементы этого типа при помощи специальных функций. Вся внутренняя структура такого типа спрятана от разработчика — в этом и заключается суть абстракции. Абстрактный тип данных определяет набор независимых от конкретной реализации типа функций для оперирования его значениями. Конкретные реализации АТД называются структурами данных. В программировании абстрактные типы данных обычно представляются в виде интерфейсов, которые скрывают соответствующие реализации типов. Программисты работают с абстрактными типами данных исключительно через их интерфейсы, поскольку реализация может в будущем измениться. Такой подход соответствует принципу инкапсуляции в объектно-ориентированном программировании. Раз вовне опубликован только интерфейс, то пока структура данных поддерживает этот интерфейс, все программы, работающие с заданной структурой абстрактным типом данных, будут продолжать работать. Разработчики не меняя внешнего интерфейса и семантики функций, постепенно дорабатывают реализации, улучшая алгоритмы по скорости, надежности и используемой памяти. Различие между абстрактными типами данных и структурами данных, которые реализуют абстрактные типы, можно пояснить на следующем примере. Абстрактный тип данных список может быть реализован при помощи массива или линейного списка, с использованием различных техник динамического выделения памяти. Однако каждая реализация определяет один и тот же набор функций, который должен работать одинаково для всех реализации. Абстрактные типы данных позволяют достичь модульности программных продуктов и иметь несколько альтернативных взаимозаменяемых реализаций отдельного модуля.
28. Наследование
Наследование - получение каким-либо компонентом подпрограммы свойств или характеристик некоторого другого компонента в соответствии сo специальными отношениями, существующими между этими компонентами. Концепция наследования часто применяется при разработке языков программирования.
Раннюю форму наследования можно обнаружить в правилах определения области видимости для структурированных блоков данных. Имена, используемые во внутреннем блоке, могут быть унаследованы из внешнего блока.
Хотя правила определения области видимости являются разновидностью наследования, этот термин чаще используется для ссылки на передачу данных и функций между независимыми модулями программы. Примером этого является конструкция class в языке C++. Если между классами А и В установлено отношение, которые можно записать как А => В, то некоторые объекты класса А будут неявным образом унаследованы и могут быть использованы в классе В. Если некоторый объект X объявлен в классе А и не переопределен в классе В, то любая ссылка на объект X внутри класса В в силу наследования фактически является ссылкой на объект X из класса А.
Если между классами А и В определено отношение А => В, то говорят, что класс А является родительским классом, или суперклассом, а класс В — зависимым, или дочерним, классом, или подклассом. Класс А является прямым предком, или родителем класса В. Если некоторый класс имеет только одного родителя, то такое наследование называется простым. Если же класс имеет нескольких родителей, то такая форма наследования называется множественной