Восточно-Казахстанский
государственный технический университет, Казахстан
Абстрактные типы данных и
объектно-ориентированное программирование
В языках
высокого уровня можно выделить следующие
категории средств определения данных:
- встроенные типы данных (integer, real, character, boolean);
- средства структурирования составных объектов (array, record, union);
- средства определения новых типов данных – это абстракция данных;
- средства отображения иерархии типов данных.
Понятие
абстрактного типа ([1]) пришло в программирование из математики. Абстрактный объект - это то, что
является предметом математического
рассуждения, состоящего из определений, допущений (или постулатов) и
утверждений, выводимых из
определений и допущений по
общепонятным правилам логического вывода (например, хорошо знакомые
математикам: прямые произведения,
размеченные объединения, множества, функции, последовательности и рекурсивные
структуры).
Организация
данных в языках программирования базируется
на понятии ТИПА. К особенностям понятия типа (по Хоару)
следует отнести следующие:
1) тип
определяет класс значений, которые
могут принимать переменная или
выражение;
2) каждое
значение принадлежит одному и только одному типу;
3)
тип значения константы, переменной или
выражения можно вывести либо из контекста,
либо из вида
самого операнда, не обращаясь к значениям, вычисляемым во
время работы программы;
4) каждой
операции соответствует некоторый фиксированный тип ее операндов и некоторый
фиксированный тип результата;
5) для
каждого типа свойства значений и элементарных операций над значениями задаются
с помощью аксиом;
6) при
работе с языком высокого уровня знание типа позволяет обнаруживать в программе
бессмысленные конструкции и решать
вопрос о методе представления данных и преобразования их в
вычислительной машине.
Понятие
типа в программировании отражает две
стороны: человек и машина.
Человек - это его способ образования понятий и работы с ними; машина- это сложившиеся к
данному моменту шаблоны вычислений и использование вычислительных ресурсов.
Абстракция - это инструмент
познавательной деятельности
человека, позволяющий лучше отразить
суть дела и приводящий к абстрактным понятиям. Поэтому
имеет смысл говорить о средствах абстракции в языках программирования, которые сами являются средством понимания и
построения алгоритмов и обмена мыслями
и результатами между программистами.
Абстрактный
тип данных в языках программирования - это определение некоторого понятия в виде класса объектов с некоторыми
свойствами и операциями. Такое определение оформляется как специальная синтаксическая конструкция, которая называется классом в языках Simula 67,
C++, кластером - в языке CLU, формой - в языке Alphard,
модулем - в языке Modula, пакетом - в языке Ada, капсулой - в языке Russel ,
объектом - в языке
Pascal.
Эти
конструкции являются средством абстракции
в перечисленных языках программирования.
В
определение абстрактного типа данных
входят следующие четыре части.
1)
Внешность, содержащая имя определяемого
типа (понятия), имена операций с
указанием типов их аргументов и значений.
2)
Абстрактное описание операций и объектов,
с которыми они работают, средствами некоторого языка спецификаций.
3)
Конкретное описание операций и объектов средствами языка программирования.
4)
Описание связи между (2) и (3), объясняющее, в каком смысле часть (3) корректно
представляет часть (2).
Внешность
- это видимая часть
определения, его интерфейс. В большинстве из перечисленных языков есть
только части (1) и (3). Для целей спецификации достаточно первых двух частей.
Отметим, что спецификация определяет
то, что важно для пользователя. А для пользователя существенным является "поведение", то есть
"то, что делается", а несущественным - то, как это делается ([1]).
Главное
достоинство абстракции через спецификацию состоит в несущественности
способа реализации, что
позволяет изменять реализацию без внесения изменений в программу.
Основные
особенности средства абстракции данных:
1)
инкапсуляция описания и
представления объектов
определяемого типа и описания операций над объектами;
2)
защита инкапсулированной информации,
так что детали представления не доступны вне
определения абстрактного типа.
Средства
абстракции данных в языке C++ включают
классы, механизм управления доступом, конструкторы и деструкторы, совместное
использование операций (перегрузка операций), преобразование типов,
полиморфизм, обработку исключительных ситуаций и параметризованные типы.
Средства отображения иерархии классов непосредственно
связаны с объектно-ориентированным программированием, для поддержки которого в языке C++ введены производные классы и виртуальные функции.