Понятие «абстракция» и понятие «объявление»

1,00
р.
Диалог: [Преподаватель]: Абстракцию данных изучали? [Я]: А подробнее, что именно? [Преподаватель]: Абстракция - это отделение кода от заголовков. С оставлением прототипов заголовков в файле .h и вынесением всей реализации в .cpp. [Я]: Вряд ли можно назвать это абстракцией. Это мы проходили. [Одна из студенток]: А как это назвать тогда? [Я]: Отделение объявления от определения (реализации). [Преподаватель]: Ну так это и есть абстракция. [Я]: Абстракция применяется в ООП в другом ключе... [Преподаватель]: И то, и другое - это абстракция, просто разной направленности.
У меня есть сомнения насчет применения этих двух понятий в одном ключе. Что вы думаете?

Ответ
Если зайти на Википедию, то можно обнаружить статью Абстракция данных, где оно определяется как
Абстра́кция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи.
В разделе ссылок в статье приводится статья Бьерн Страуструп — Абстракция данных в языке С++, где понятие более детально рассматривается в контексте C++ и определяется как
Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик существенных для для корректного ее использования.
Хотя разделение кода между заголовочными файлами и файлами реализации может быть необходимо при создании абстракций данных, само по себе такое разделение не является средством создания абстракций. Такое разделение существует так как по историческим причинам в С/С++ используется раздельная компиляция с текстовым препроцессором, который на первом этапе собирает из множества текстовых файлов один длинный текст единицы трансляции.