Амангельдина М.А.

Восточно-Казахстанский государственный технический университет, Казахстан

 

Абстрактные типы данных и объектно-ориентированное программирование

 

В языках высокого уровня можно выделить следующие  категории средств определения данных:

  - встроенные типы данных (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++ введены производные классы и виртуальные функции.