16 февраля 2024 г. (изменено: 6 апреля 2024 г.)
Канал: @cherkashindev
🔮 Абстракция
Когда говорят про ООП, часто забывают о двух вещах:
- Это не только инкапсуляция, наследование и полиморфизм, но ещё и абстракция
- Инкапсуляция, наследование и полиморфизм не прибиты гвоздями к ООП, особенно инкапсуляция и полиморфизм. Но об этом не сегодня.
Сегодня советую к просмотру видео: Абстракция, уровни абстракции.
ℹ️ Основные моменты:
- Абстракция — отвлечение от несущественных сторон, свойств, связей объекта с целью выделения их существенных, закономерных признаков. Иными словами, мы выделяем существенные свойства для нашей конкретной задачи, и не обращаем на несущественные.
- Абстрация = Интерфейс + Инкапсуляция
- Интерфейс — выделяет существенное
- Инкапсуляция — скрывает несущественное
- Абстрагирование нужно для управления сложностью кода, чтобы всё было надёжно, эффективно, расширяемо и поддерживаемо.
💡 Например, у нас есть квадрат, и для разных задач, нам важны его различные свойства.
- Если нам важно вычислять его площадь и периметр, то мы говорим, что квадрат — это геометрическая фигура (абстрагируемся). Иначе говоря квадрат реализует интерфейс
IGeometricShape. - Если нам важно, чтобы квадрат мог быть сохранён в файл, то мы говорим, что квадрат — сериализуемый, например, в JSON объект, который затем можно записать в файл. Иначе говоря квадрат реализует интерфейс
ISerializable. - Аналогично, если нам важно уметь рисовать квадрат на экране, он должен реализовывать интерфейс
IDrawable. - Ну и где-то у нас есть методы, которые работают с абстракциями
IGeometricShape,ISerializableиIDrawable. Таким образом методы абстрагированы от конкретных реализаций, что увеличивает переиспользуемость кода.
Ну и немного от себя, абстракция — фундаментальное понятие.
- Без абстракции не будет полиморфизма
- Без полиморфизма не будет Dependency Injection (Внедрение зависимостей)
👍 9 🔥 2