Trong lập trình hướng đối tượng, tính trừu tượng (abstraction) là một khái niệm quan trọng. Nó cho phép bạn tập trung vào các chi tiết quan trọng của một đối tượng và ẩn đi các chi tiết không quan trọng.
Tính trừu tượng cho phép bạn xác định giao diện của một đối tượng mà không cần biết chi tiết cụ thể về cách nó được triển khai. Trong lập trình hướng đối tượng, một cách tiếp cận trừu tượng thường được thực hiện thông qua hai cơ chế: lớp trừu tượng và giao diện.
Tính trừu tượng (abstraction) trong lập trình hướng đối tượng mang lại nhiều lợi ích quan trọng:
// Raw Model
abstract class BaseRaw<out BM : BaseModel> {
abstract fun raw2Model(): BaseModel
}
class UserRaw(private val firstName: String, private val lastName: String) : BaseRaw<UserModel>() {
override fun raw2Model(): UserModel {
return UserModel(fullName = "$firstName $lastName")
}
}
// Domain Model
abstract class BaseModel
class UserModel(val fullName: String) : BaseModel()
fun main() {
val userRaw = UserRaw(firstName = "Doan", lastName = "Tuan")
val userModel = userRaw.raw2Model()
println("Full name = ${userModel.fullName}")
}
Trong đoạn mã trên, tính trừu tượng được thể hiện qua việc sử dụng lớp trừu tượng BaseRaw và phương thức trừu tượng raw2Model().
BaseRaw:
BaseRaw là một lớp trừu tượng, được định nghĩa bởi từ khóa abstract. Điều này có nghĩa là bạn không thể tạo ra một đối tượng BaseRaw cụ thể, mà chỉ có thể sử dụng nó như là một bản thiết kế cho các lớp con.BM của lớp BaseRaw được khai báo với giới hạn out BaseModel. Điều này có nghĩa là BM phải là một kiểu dữ liệu kế thừa từ BaseModel, và kiểu dữ liệu BM chỉ được sử dụng trong vị trí output của lớp BaseRaw.raw2Model():
raw2Model() là một phương thức trừu tượng được khai báo trong lớp BaseRaw. Điều này có nghĩa là các lớp con của BaseRaw phải triển khai (override) phương thức này để cung cấp triển khai cụ thể.raw2Model() được khai báo trả về một đối tượng kiểu BaseModel. Điều này đảm bảo rằng các lớp con của BaseRaw sẽ triển khai phương thức này để trả về một đối tượng kiểu BaseModel hoặc một lớp con của nó.UserRaw:
UserRaw là một lớp con của BaseRaw, và nó triển khai phương thức raw2Model() để chuyển đổi dữ liệu từ định dạng "raw" của người dùng sang một đối tượng UserModel, là một lớp con của BaseModel.