Saturday, February 14, 2026

Lập trình hướng đối tượng (OOP): 4 "Trụ cột" mà mọi Developer cần nắm vững

Trong hành trình từ một sinh viên Học viện Kỹ thuật quân sự cho đến khi chiến đấu với các dự án thực tế với Python, dù ngôn ngữ có thay đổi thì tư duy về giải quyết vấn đề cụ thể hơn là tư duy về OOP vẫn là "xương sống" giúp code của chúng ta sạch sẽ, dễ bảo trì và mở rộng.

Hôm nay, hãy cùng mình giải mã 4 tính chất cốt lõi của OOP thông qua các ví dụ đời thường nhất nhé.

Basic OOP Concepts Explained with Code 

1. Tính Đóng gói (Encapsulation)

Khái niệm: Là việc che giấu thông tin và những tính chất xử lý bên trong của đối tượng. Người ngoài chỉ có thể tương tác với đối tượng thông qua các interface công khai.

  • Ví dụ: Hãy tưởng tượng chiếc Thẻ ngân hàng bạn đang dùng. Bạn biết cách quẹt thẻ, nhập mã PIN để rút tiền (interface), nhưng bạn không hề biết hệ thống bên trong xử lý trừ tiền hay kiểm tra số dư như thế nào (encapsulation).

  • Lợi ích: Bảo vệ dữ liệu không bị thay đổi tùy tiện từ bên ngoài.

    Sử dụng các tiền tố _ hoặc __ để bảo vệ thuộc tính khỏi việc truy cập trái phép.

    Python code:
    class BankAccount:
    def __init__(self, balance):
    self.__balance = balance # Thuộc tính ẩn (private)

    def deposit(self, amount):
    if amount > 0:
    self.__balance += amount
    print(f"Nạp thành công {amount}")

    def get_balance(self):
    return f"Số dư hiện tại: {self.__balance}"

    # Sử dụng
    account = BankAccount(1000)
    account.deposit(500)
    print(account.get_balance())
    # print(account.__balance) # Sẽ báo lỗi vì không thể truy cập trực tiếp

     

2. Tính Kế thừa (Inheritance)

Khái niệm: Cho phép một đối tượng sở hữu lại các thuộc tính và phương thức từ một đối tượng khác đã tồn tại.

  • Ví dụ: Trong dự án Football Player Detection mình từng làm, chúng ta có một lớp cha là Person (có tên, tuổi). Lớp Player sẽ kế thừa từ Person và có thêm các thuộc tính riêng như club, position.

  • Lợi ích: Tái sử dụng mã nguồn, tránh viết lại những thứ đã có.

    Lớp Player kế thừa toàn bộ thuộc tính của lớp Person.

    Python code:
    class Person:
    def __init__(self, name, age):
    self.name = name
    self.age = age

    class Player(Person):
    def __init__(self, name, age, club):
    super().__init__(name, age) # Gọi hàm khởi tạo của lớp cha
    self.club = club

    def info(self):
    print(f"Cầu thủ: {self.name}, Tuổi: {self.age}, Câu lạc bộ: {self.club}")

    # Sử dụng
    messi = Player("Lionel Messi", 37, "Inter Miami")
    messi.info()

3. Tính Đa hình (Polymorphism)

Khái niệm: Cùng một hành động nhưng các đối tượng khác nhau sẽ thực hiện theo các cách khác nhau.

  • Ví dụ: Giả sử mình có hàm make_sound(). Nếu đối tượng là Dog, nó sẽ kêu "Gâu gâu", nhưng nếu là Cat, nó sẽ kêu "Meo meo". Cùng một tên hàm, nhưng kết quả thực thi lại khác biệt tùy vào đối tượng gọi nó.

  • Lợi ích: Giúp hệ thống linh hoạt, dễ dàng mở rộng thêm các loại đối tượng mới mà không cần sửa code cũ.

    Cùng một phương thức make_sound() nhưng mỗi lớp con lại có cách phản hồi khác nhau.

    Python code:
    class Animal:
    def make_sound(self):
    pass

    class Dog(Animal):
    def make_sound(self):
    return "Gâu gâu!"

    class Cat(Animal):
    def make_sound(self):
    return "Meo meo!"

    # Sử dụng
    animals = [Dog(), Cat()]
    for animal in animals:
    print(animal.make_sound())

     

4. Tính Trừu tượng (Abstraction)

Khái niệm: Tập trung vào những đặc điểm cốt lõi của đối tượng và loại bỏ những chi tiết rườm rà, không cần thiết.

  • Ví dụ: Trong hệ thống thanh toán, người dùng chỉ cần gọi pay(). còn việc xử lý qua thẻ, ví điện tử hay PayPal bên trong như thế nào thì không cần biết. Đó chính là sự trừu tượng hóa.

  • Lợi ích: Giảm sự phức tạp khi thiết kế hệ thống lớn.

    Sử dụng thư viện abc để tạo lớp cơ sở, bắt buộc các lớp con phải định nghĩa lại các hành động cụ thể.

    Python  code:
    from abc import ABC, abstractmethod

    class PaymentMethod(ABC):
    @abstractmethod
    def pay(self):
    pass

    class CreditCardPayment(PaymentMethod):
    def pay(self, amount):
    print(f"Thanh toán {amount} bằng thẻ tín dụng")

    class PaypalPayment(PaymentMethod):
    def pay(self, amount):
    print(f"Thanh toán {amount} bằng PayPal")


    class MomoPayment(PaymentMethod):
    def pay(self, amount):
    print(f"Thanh toán {amount} bằng ví MoMo")

     


Lời kết: Nắm vững 4 tính chất này không chỉ giúp bạn qua bài phỏng vấn mà còn là chìa khóa để viết code "sạch" hơn trong các dự án thực tế.

 

No comments:

Post a Comment