Лекция №23Интерфейсы и типы данных: системы типов данных

Основное применение систем типов данных в языках программирования — минимизация появления ошибок, связанных с неправильной интерпретацией данных. В «идеальном» языке с точки зрения типобезопасности результат любой операции — корректное значение типа данных, который может быть определен заранее (например, во время компиляции).

На практике каждый язык программирования устанавливает свои рамки безопасности типов:

К сожалению, обеспечение абсолютного отсутствия ошибок типов — чрезвычайно трудоемкая задача (фактически, частный случай верификации исходного кода программы), поэтому в современных языках программирования роль системы типов состоит в устранении наиболее тривиальных ошибок; их дальнейший поиск — задача, решаемая в процессе тестирования. В этом плане видна тенденция к увеличению роли человеческого фактора: большинство современных языков программирования (Python, Ruby, JavaScript) обладают динамической типизацией, то есть проверка ошибок типов происходит во время выполнения программы.

Каждая система типов по-своему определяет совместимость типов, то есть соответствие фактического типа данных ожидаемому:

Важный аспект совместимости типов в объектно-ориентированном программировании — это отношение «тип — подтип», означающий наследование интерфейса объектов. Согласно принципу подстановки Барбары Лисков, любой подтип может использоваться в произвольном контексте, если там может использоваться родительский тип данных. Определение подтипов и наследование (то есть копирование реализации) — различные по своему смыслу операции, взаимоотношение между которыми зависит от языка программирования:

Скачать презентацию