Абстракция — это когда мы сосредотачиваемся только на существенных для задачи деталях и игнорируем всё остальное. Для каждого объекта мы задаём минимальное количество методов, полей и описаний, которые позволят нам решить задачу. Чем меньше характеристик, тем лучше абстракция, но ключевые характеристики убирать нельзя.
Абстракция — это использование только определения характеристик объекта, без описания их конкретных/детальных реализаций. Основная идея состоит в том, чтобы представить объект обладающим набором методов и при этом не предоставлять конкретную логику этих методов. Простыми словами, абстракция отвечает на вопрос «Что?», без ответа на вопрос «Как?».
Особенность абстрактных классов в том, что их можно наследовать, но нельзя реализовать (создать объект), так как эти классы – базовые. Такие свойства используют для объединения нескольких классов, похожих между собой.
Чтобы работать с абстракциями, используют как правило интерфейсы.
Пример абстракции на языке PHP:
interface Filesystem
{
public function createFile();
public function deleteFile();
}
// Каждый класс реализует методы интерфейса
class LocalStorage implements Filesystem
{
public function createFile()
{
// ...
}
public function deleteFile()
{
// ...
}
}
class AmazonStorage implements Filesystem
{
public function createFile()
{
// ...
}
public function deleteFile()
{
// ...
}
}