Почнемо з нуля. Перш за все, що насправді є абстракцією?
Проблема / мотив
Програмуючи, вам часто доводиться вирішувати дуже конкретні проблеми.
Основним мотивом абстракції є те, коли ви можете опинитися в ситуації, коли ваша програма вирішує всю проблему як єдине ціле, з безліччю дискретних маленьких особливостей, які потребують уваги та розуміння. Проблема тут полягає в тому, що людині важко обробляти такі величезні обсяги даних одночасно.
Рішення: Абстракція
Для того, щоб ви змогли зрозуміти, що саме вам потрібно, щоб реалізувати свою ідею , ви витягуєте детальні рішення в спрощені абстракції .
Наприклад, давайте подивимось на ORM (Object-Relational Mapping), де SQL абстрагується на об'єкти.
Для того, щоб вставити новий елемент у базу даних без абстракцій, програміст повинен знати SQL. Отже, щоб вставити новий елемент, програмісту потрібно запам’ятати синтаксис SQL для вставки нового елемента в таблицю:
INSERT INTO Items (field1, field2) VALUES (value1, value2)
Але з абстракціями програмісту потрібно лише усвідомлювати ідею того, що він хоче зробити. Об'єктно-орієнтована абстракція може виглядати так:
Item item = new Item(value1, value2)
Можна навіть зайти трохи далі і подумати про те, що сам SQL - це величезна абстракція для тонн складних структур та алгоритмів зберігання даних, які цілком у вас під рукою за ціну вивчення простої мови декларацій.
Протилежне абстракції
Виходячи з того, що ми зараз визначили, що абстракція насправді полягає в тому, щоб зробити її достатньою лише для того, щоб знати наявну в даний час концепцію, ми можемо легко зробити висновок, що протилежність абстракції насправді є езотерикою , де використання або розуміння тягне за собою певні спеціалізовані знання про особливості предмета.