Абстракция является одним из основных концепций объектно-ориентированного программирования. Абстракция определяет модель создания компонента приложения. Реализация абстракции зависит от языка и его особенностей и процессов.
1. Что такое абстракция?
Абстракция – это процесс скрытия внутренних деталей приложения от внешнего мира. Абстракция используется для описания вещей в простых терминах. Она создает границу между приложением и клиентскими программами.
2. Абстракция в реальной жизни
Абстракция присутствует в почти всех механизмах реальной жизни.
- Ваш автомобиль – отличный пример абстракции. Вы можете запустить автомобиль, повернув ключ или нажав кнопку запуска. Вам не нужно знать, как запускается двигатель, какие компоненты есть в вашем автомобиле. Внутренняя реализация и сложная логика автомобиля полностью скрыты от пользователя.
- Мы можем разогреть пищу в микроволновой печи. Мы нажимаем кнопки, чтобы установить таймер и тип пищи. В конечном итоге мы получаем горячую и вкусную еду. Внутренние детали микроволновой печи скрыты от нас. Нам предоставлен доступ к функциональности в очень простой форме.
3. Абстракция в ООП
Объекты являются строительными блоками объектно-ориентированного программирования. Объект содержит некоторые свойства и методы. Мы можем скрыть их от внешнего мира с помощью модификаторов доступа. Мы можем предоставить доступ только к необходимым функциям и свойствам другим программам. Это общая процедура реализации абстракции в ООП.
4. Каковы различные типы абстракции?
Существует два типа абстракции.
- Абстракция данных
- Абстракция процесса
4.1) Абстракция данных
Когда данные объекта не видны внешнему миру, это создает абстракцию данных. При необходимости доступ к данным объектов предоставляется через некоторые методы.

4.2) Абстракция процесса
Мы не обязаны предоставлять детали по всем функциям объекта. Когда мы скрываем внутреннюю реализацию различных функций, участвующих в пользовательской операции, это создает абстракцию процесса.

5. Абстракция в Java
Абстракция в Java реализуется с использованием интерфейсов и абстрактных классов. Они используются для создания базовой реализации или контракта для фактических классов реализации. Car.java: Базовый интерфейс или абстрактный класс
package com.journaldev.oops.abstraction;
public interface Car {
void turnOnCar();
void turnOffCar();
String getCarType();
}
ManualCar.java, AutomaticCar.java: Классы реализации для Car.
package com.journaldev.oops.abstraction;
public class ManualCar implements Car {
private String carType = "Manual";
@Override
public void turnOnCar() {
System.out.println("turn on the manual car");
}
@Override
public void turnOffCar() {
System.out.println("turn off the manual car");
}
@Override
public String getCarType() {
return this.carType;
}
}
package com.journaldev.oops.abstraction;
public class AutomaticCar implements Car {
private String carType = "Automatic";
@Override
public void turnOnCar() {
System.out.println("turn on the automatic car");
}
@Override
public void turnOffCar() {
System.out.println("turn off the automatic car");
}
@Override
public String getCarType() {
return this.carType;
}
}
Программа пользователя: Давайте рассмотрим тестовую программу, в которой будут использоваться функции Car.
package com.journaldev.oops.abstraction;
public class CarTest {
public static void main(String[] args) {
Car car1 = new ManualCar();
Car car2 = new AutomaticCar();
car1.turnOnCar();
car1.turnOffCar();
System.out.println(car1.getCarType());
car2.turnOnCar();
car2.turnOffCar();
System.out.println(car2.getCarType());
}
}
Программа-клиент знает только о Car и функциях, которые предоставляет Car. Внутренние детали реализации скрыты от программы-клиента. Ссылки: Wikipedia, Oracle Docs
Source:
https://www.digitalocean.com/community/tutorials/what-is-abstraction-in-oops