What’s abstraction

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.

  1. Lớp trừu tượng (Abstract class):
  2. Giao diện (Interface):

Ưu điểm của tính trừu tượng

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:

  1. Giấu đi chi tiết cài đặt:
  2. Tăng tính linh hoạt và tái sử dụng:
  3. Tính đồng nhất (Uniformity):
  4. Tăng tính mở rộng:
  5. Tách biệt công việc:

Ứng dụng trong Android

// 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().

  1. Lớp trừu tượng BaseRaw:
  2. Phương thức trừu tượng raw2Model():
  3. Lớp con UserRaw: