Лекция №22Интерфейсы и типы данных: общие положения
Одно из базовых средств при определении интерфейсов в программировании — типы данных. Тип позволяет понять, каким образом следует интерпретировать данные в памяти компьютера и какие операции к этим данным применимы. Роль типов в определении интерфейсов различается в зависимости от выбранной парадигмы программирования.
- В функциональных языках программирования типы определяют допустимые аргументы функций и возвращаемые функциями результаты.
- В процедурных ЯП типы используются не только для спецификации функций, но и для задания глобального состояния программы.
- В объектно-ориентированном программировании типы (классы) задают методы для работы с данными, которые, как правило, скрыты от пользователя. В зависимости от модели данных языка программирования, обычные методы могут дополняться свойствами, событиями, операторами и так далее.
В процессе развития программной инженерии стала важна возможность описания типов данных, независимых от языка программирования. В частности, такое описание необходимо для решения проблемы взаимодействия компонентов, реализованных в разных средах. Международными организациями ISO и IEC был разработан соответствующий стандарт 11404 «Типы данных общего назначения». В нем содержатся:
- общие характеристики типов данных (примитивные / генерируемые, атомарные / сложные, точные / приблизительные, …);
- описание базовых типов (целые числа, числа с плавающей запятой, символы, …) и коллекций (массивы, последовательности, множества, …);
- интуитивно понятный синтаксис для определения новых типов.
Различные языки программирования по-разному реализуют систему типов,
описанную в ISO 11404. В процедурных языках (например, C) система типов
«плоская» — взаимоотношения между типами не определены.
В объектно-ориентированных ЯП типы данных формируют иерархию — все типы или,
по крайней мере, большинство, являются потомками базового типа (java.lang.Object
в Java, object
в Python).
Различается в языках программирования и объем реализованных типов из стандарта 11404. В этом смысле самым характерным является процедурный тип данных, описывающий функции. Первоначально появившись в функциональных ЯП, процедурный тип затем распространился на другие категории языков. Полноценная поддержка функций как типа данных присутствует, например, в объектно-ориентированных Python и JavaScript; в некоторой степени процедурный тип поддерживается в C# (делегаты) и Java 8 (функциональные интерфейсы).