В объектно-ориентированном программировании абстракция является одним из трех основных принципов (наряду с инкапсуляцией и наследованием). В процессе абстракции программист скрывает все данные об объекте, кроме важных, чтобы уменьшить сложность и повысить эффективность. - Google

Но что на самом деле означает абстракция?

Представьте, у вас есть стиральная машина. Вы на самом деле не знаете, как это работает, вы просто знаете вход и выход.

Процесс, если машина сначала получает воду, а затем мыло или мыло, а затем воду, вы не знаете.

Абстракция заключается именно в том, что вы просто знаете ввод и вывод. Но вы не знаете процесса.

Абстракция в программировании

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

Преимущества использования абстракции

Позволяет реализовать более сложную логику поверх предоставленной абстракции, не понимая и даже не задумываясь обо всей скрытой сложности. Одним из больших вариантов использования является внедрение зависимостей.

статья о внедрении зависимостей -›https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1

Представьте себе, у вас есть Метод для сохранения объекта в базе данных. Но вы просто знаете метод. Вам не нужно беспокоиться о том, как метод сохраняет его. Если сначала проверяется, не является ли какое-либо свойство нулевым или сохраняется ли оно в базе данных SQL или базе данных NoSQL. Одежда

public class Wash
{
//more code
public void WashHard(Water water,Soap soap, Clothes clothes)
{
     if(water.capacity<50){
       Console.WriteLine("Need more water");
       return;
     }
     if(soap.capacity<50){
       Console.WriteLine("Need more soap");
       return;
     }
     Wash.start()
     Console.WriteLine("Wash ended");
}
//more code

}

Как видите, у метода есть три входа: вода, мыло и одежда. И сделайте некоторую проверку этих трех параметров. Затем у класса Wash есть метод start.

Если вы используете WashHard, вы не знаете, есть ли у вас запуск метода или нет. На самом деле вам не нужно знать.

Когда абстракции слишком много?

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