Давайте вспомним основные принципы ООП:
Если с первыми тремя более менее все понятно, то Абстракцию всегда, либо забывают назвать, либо не понимают что она означает.
Давайте сперва просто определимся с понятием, что такое абстракция.
Абстракция — это способ представления объекта в программе. Придание объекту характеристик которые отличают его от остальных(То что делает телефон телефоном а не чем-то другим). То есть выделение основных характеристик объекта.
Основная цель абстракции заключается в представлении объекта с минимальным набором тех полей и методов, которые необходимы для решения конкретных задач. Например, мы воспринимаем телефон не как совокупность электронных компонентов, а как устройство для связи, с его основной функцией — возможностью совершать звонки и отправлять сообщения.
Представим, что мы разрабатываем приложение, в котором нам нужно описать сущность "Автомобиль". Плохая абстракция могла бы выглядеть так:
class Car {
var numberOfWheels: Int
var color: String
var engineCapacity: Double
var numberOfDoors: Int
var brand: String
var model: String
var seatMaterial: String
var trunkCapacity: Double
var hasSpoiler: Bool
var sunroof: Bool
var serialNumber: String
var fuelInjectorModel: String
var engineSerialNumber: String
func drive() {
// Реализация движения
}
func openTrunk() {
// Открытие багажника
}
func checkFuelInjector() {
// Проверка инжектора топлива
}
}
Здесь класс Car включает в себя слишком много деталей, многие из которых либо избыточны, либо не имеют отношения к основным задачам, которые должен решать объект типа "Автомобиль". Например, такие свойства, как engineSerialNumber или fuelInjectorModel, скорее всего, не нужны для повседневного использования автомобиля, и их можно скрыть. Наличие множества полей делает абстракцию тяжелой и усложняет работу с объектом, так как каждое свойство и метод должны быть учтены, даже если они не нужны для текущей задачи.
Вот как могла бы выглядеть более удачная абстракция для класса Car:
class Car {
var brand: String
var model: String
var color: String
func drive() {
// Реализация движения
}
func openTrunk() {
// Открытие багажника
}
}
В данном примере мы выделяем только основные характеристики автомобиля: его бренд, модель и цвет. Методы drive() и openTrunk() представляют основные действия, которые выполняет автомобиль. Детали вроде серийного номера двигателя или модели инжектора были исключены, так как они не имеют большого значения для пользователя в большинстве случаев. Такое упрощение делает абстракцию легкой и удобной для работы, особенно если наша задача — просто описать автомобиль как средство передвижения, а не разбираться в его внутреннем устройстве.
Абстракция, таким образом, помогает сфокусироваться на основных свойствах объекта, которые важны в контексте решаемой задачи, и скрыть ненужные детали, чтобы избежать усложнения кода.