Abstraction (tính trừu tượng) là một trong những khái niệm cốt lõi của Lập trình hướng đối tượng (OOP). Abstraction định nghĩa một mô hình để tạo ra một thành phần của ứng dụng. Việc triển khai Abstraction phụ thuộc vào các tính năng và quy trình dành riêng cho từng ngôn ngữ.

1. Tính trừu tượng là gì?
Tính trừu tượng là quá trình ẩn đi các chi tiết bên trong của một ứng dụng khỏi thế giới bên ngoài. Tính trừu tượng được sử dụng để mô tả các thứ theo những thuật ngữ đơn giản. Nó được sử dụng để tạo ra ranh giới giữa ứng dụng và các chương trình của khách hàng.
2. Tính trừu tượng trong đời thực
Tính trừu tượng có mặt trong hầu hết các máy móc trong đời thực.
- Xe hơi của bạn là một ví dụ tuyệt vời về tính trừu tượng. Bạn có thể khởi động một chiếc xe bằng cách vặn chìa khóa hoặc nhấn nút khởi động. Bạn không cần phải biết động cơ khởi động như thế nào, chiếc xe của bạn có những thành phần nào. Việc triển khai bên trong và logic phức tạp của chiếc xe hoàn toàn bị ẩn đi đối với người dùng.
- Chúng ta có thể làm nóng thức ăn bằng Lò vi sóng. Chúng ta nhấn một vài nút để đặt thời gian và loại thực phẩm. Cuối cùng, chúng ta có một bữa ăn nóng hổi và ngon miệng. Các chi tiết bên trong của lò vi sóng bị ẩn đi đối với chúng ta. Chúng ta được cung cấp quyền truy cập vào chức năng một cách rất đơn giản.
3. Tính trừu tượng trong OOP
Trong OOP, Object là những viên gạch cơ bản để xây nên cả hệ thống. Mỗi object chứa một số thuộc tính (properties) và phương thức (methods). Chúng ta có thể ẩn chúng khỏi thế giới bên ngoài thông qua các công cụ sửa đổi quyền truy cập.
Ta chỉ cung cấp quyền truy cập cho những thuộc tính và phương thức cần thiết đối với các chương trình khác. Đây là quy trình chung để triển khai tính trừu tượng trong OOP.
4. Các loại tính trừu tượng khác nhau là gì?
Có hai loại tính trừu tượng:
- Tính trừu tượng dữ liệu (Data Abstraction)
- Tính trừu tượng quy trình (Process Abstraction)
4.1) Tính trừu tượng dữ liệu
Khi dữ liệu đối tượng không hiển thị với thế giới bên ngoài, nó tạo ra tính trừu tượng dữ liệu. Nếu cần, quyền truy cập vào dữ liệu của các đối tượng được cung cấp thông qua một số phương thức.

4.2) Tính trừu tượng quy trình
Chúng ta không cần phải cung cấp chi tiết về tất cả các chức năng của một đối tượng. Khi chúng ta ẩn việc triển khai bên trong của các chức năng khác nhau liên quan đến một hoạt động của người dùng, nó sẽ tạo ra tính trừu tượng quy trình.

5. Tính trừu tượng trong Java
Tính trừu tượng trong Java được triển khai thông qua các giao diện (interfaces) và các lớp trừu tượng (abstract classes). Chúng được sử dụng để tạo ra một việc triển khai cơ sở hoặc hợp đồng cho các lớp triển khai thực tế. Ví dụ:
Car.java: giao diện cơ sở hoặc lớp trừu tượng
package com.journaldev.oops.abstraction;
public interface Car {
void turnOnCar();
void turnOffCar();
String getCarType();
}
ManualCar.java,AutomaticCar.java: các lớp triển khai củaCar
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;
}
}
User Program: chương trình client chỉ biết vềCarvà các chức năng màCarcung cấp. Các chi tiết triển khai bên trong bị ẩn khỏi chương trình client.
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());
}
}
Chương trình client chỉ biết về chiếc xe hơi (car) và các chức năng mà nó cung cấp. Các chi tiết triển khai bên trong bị ẩn khỏi chương trình client. Tài liệu tham khảo: Wikipedia, Oracle Docs