Нет, программирование на основе интерфейсов не имеет ничего общего с тем, используете ли вы заголовочные файлы.
Явное определение интерфейса позволит независимо развивать программу с обеих сторон.«Интерфейс» тела кода обозначает контракт, которому он подчиняется.
Языки программирования никогда не полностью поддерживают определения интерфейса, они просто имеют некоторый синтаксический сахар для обработки аспекта правильности типа.С одной стороны, аспекты производительности в большинстве случаев неопределенны, как и правила сложности и т. Д. (Стандарт C ++ определяет некоторые требования к сложности для контейнеров и алгоритмов).
Эта ограниченная поддержка оставила Java с ключевым словомinterface
: поскольку объектная ориентация связана с группированием функциональности по классам, имело смысл соединить концепцию «интерфейса» с чем-то, что группирует определения функций-членов.Несколько классов могут реализовать данный интерфейс, и класс может также реализовать много интерфейсов.
В C ++ они даже не удосужились явно добавить «интерфейс» в язык.То, что ближе всего подходит к «интерфейсу классов» Java, - это чистый абстрагирующий класс: класс, имеющий только чисто виртуальные функции-члены.Поскольку C ++ поддерживает множественное наследование, классы могут реализовывать несколько таких «интерфейсов».
Когда дело доходит до разделения вашего кода на заголовки и исходные файлы, это совершенно не имеет отношения к концепции интерфейса.Но на самом деле: в C ++ «вызывающий контракт» в основном указывается в заголовочном файле.И действительно, это сокращает время компиляции (меньше операций ввода-вывода).Но это технический аспект компилятора.