Справжнє призначення ООП — дати можливість маніпулювати структурно різними даними, використовуючи узагальнений зовнішній інтерфейс. Власне, прикладом елементів ООП в чистих процедурних мовах (таких як Сі чи Паскаль) є файли. З точки зору прикладної програми, яка працює з файлами, нема особливої різниці між файлом на жорсткому диску чи змінному носії, консоллю, інтерфейсом вводу-виводу іншої програми, приєднаної через пайп: будь-який «файл» підтримує одні й ті ж методи для читання і/або запису, внутрішня реалізація яких, проте, в кожному випадку відрізняється. Що це нам дає? Скажімо, програму, що виводить результат роботи на екран, можна легко переробити, щоб вона виводила цей результат у файл або на принтер — просто відкривши інший файл замість стандартного виводу. Без абстракції «файл», звичайно, можна обійтися — записувати дані в відеобуфер чи працювати з портами вводу-виводу дискового адаптера — але, крім того, що це для прикладного програміста складно, переписувати такий код, щоб змінити пристрій виводу, буде набагато довше.
Якщо для прораміста на процедурних мовах внутрішня реалізація файлів здебільшого лишається «чорною скринькою», то в ООП прийнято якраз і займатися розробкою подібних скриньок, для чого надається увесь необхідний інструментарій.