Давайте разберемся, что такое абстракция в ООП

Что такое Абстракция?

Абстракция может быть просто сформулирована как представление только того, что требуется для контекста.

Это означает предоставление доступа только к тем функциям или содержимому, которые необходимы в данный момент.

Клиенту или запрашивающему компоненту не нужно знать все детали компонента, который он запрашивает, ему просто нужно информировать только о том, что ему требуется для выполнения задач.

Например…

Абстракция — это реальный принцип, который применяется ко всем конечным машинам и приложениям, которые мы используем в нашей повседневной жизни.

Например, обычно мы можем использовать музыкальный проигрыватель для доступа и воспроизведения музыки из какого-либо музыкального источника (локальное хранилище, Spotify или какой-либо другой потоковый сервис).

Музыкальный проигрыватель обычно предоставляет опции для поиска, воспроизведения, приостановки или прекращения воспроизведения. Мы используем эти параметры, чтобы применить желаемую операцию.

Но никто не знает, что происходит, когда кто-то нажимает кнопку воспроизведения или кнопку паузы. Это не имеет значения для цели его использования музыкального проигрывателя. Знание того, что происходит внутри, совершенно не соответствует контексту для обычного пользователя.

Как создаются абстракции в ООП?

С точки зрения языка программирования абстракция относится к логике, которая должна быть представлена ​​запрашивающему компоненту.

Мы предоставляем доступ к данным или функциям обработки запрашивающему компоненту через абстракции, т.е. которые просто раскрывают то, что требуется, но не все.

Мы называем их абстрактными классами. В любом языке программирования у нас есть абстрактные классы и интерфейсы для предоставления абстракций другим компонентам.

Интерфейс служит схемой или карточкой меню для компонента на стороне запрашивающего компонента, так что внешние компоненты никогда не узнают, к какой производной они обращаются от имени этого лица.

Например, интерфейс MusicPlayer может выглядеть следующим образом:

using System.Collections.Generic;

namespace MyMusicPlayer.Contracts.Abstractions
{
    public interface IMusicPlayer
    {
        void play(string songName);
        void pause();
        void stop();
        IEnumerable<string> search(string keyword);
        string resume();
    }
}

Типы абстракций

Мы можем применить абстракцию на уровне функций или на уровне данных, чтобы ограничить доступ.

Абстракция данных. Список песен в MusicPlayer недоступен извне, другие компоненты даже не знают, что существует список под названием playQueue, который используется для добавления или удаления песен. Они могут получить доступ только через функциональные возможности.

Функция абстракции. Коллекция songLibrary в LibraryService извлекается из неописательного источника, что является функциональностью, неизвестной на этом уровне класса.