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