Bốn Trụ Cột Cơ Bản Của OOP Trong Python: Đóng Gói, Kế Thừa, Đa Hình Và Trừu Tượng Hóa

Trong bài viết trước, chúng ta đã làm quen với khái niệm Class và Object cơ bản. Để vận dụng tối đa sức mạnh của Lập trình hướng đối tượng (OOP) nhằm viết code linh hoạt, dễ mở rộng và quản lý, lập trình viên cần nắm vững 4 trụ cột cốt lõi: Đóng gói (Encapsulation), Kế thừa (Inheritance), Đa hình (Polymorphism) và Trừu tượng hóa (Abstraction).

Minh họa 4 trụ cột của lập trình hướng đối tượng OOP trong Python bao gồm Đóng gói, Kế thừa, Đa hình và Trừu tượng hóa
Ảnh minh họa: [Phần 3] OOP: Tìm hiểu về Kế Thừa và Đa Hình trong Lập Trình Hướng Đối Tượng | ProPTIT's Blog

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

Tính đóng gói là việc gom nhóm các thuộc tính và phương thức liên quan vào trong cùng một lớp, đồng thời hạn chế quyền truy cập trực tiếp vào một số thành phần dữ liệu bên trong nhằm bảo vệ dữ liệu khỏi sự thay đổi không mong muốn từ bên ngoài.

Trong Python, tính đóng gói được thể hiện thông qua các quy ước đặt tên thuộc tính:

  • Public: Truy cập tự do từ bên ngoài (tên biến thông thường).
  • Protected: Bắt đầu bằng một dấu gạch dưới (_attribute), báo hiệu chỉ nên dùng nội bộ hoặc trong lớp con.
  • Private: Bắt đầu bằng hai dấu gạch dưới (__attribute), áp dụng kỹ thuật Name Mangling để hạn chế truy cập trực tiếp.
class BankAccount:    def __init__(self, owner, balance):        self.owner = owner        self.__balance = balance  # Thuộc tính private    def deposit(self, amount):        if amount > 0:            self.__balance += amount            print(f"Đã nạp {amount}. Số dư mới: {self.__balance}")    def get_balance(self):        return self.__balanceaccount = BankAccount("Nguyen Van A", 1000)account.deposit(500)print(account.get_balance()) # Đúng cách# print(account.__balance)  # Sẽ gây lỗi AttributeError

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

Tính kế thừa cho phép xây dựng một lớp mới (class con) dựa trên một lớp đã tồn tại (class cha). Class con sẽ thừa hưởng các thuộc tính và phương thức của class cha, đồng thời có thể bổ sung hoặc sửa đổi chức năng riêng mà không cần viết lại code từ đầu.

class Employee:    def __init__(self, name, salary):        self.name = name        self.salary = salary    def show_info(self):        print(f"Nhân viên: {self.name}, Lương: {self.salary}")# Class Manager kế thừa từ Employeeclass Manager(Employee):    def __init__(self, name, salary, department):        super().__init__(name, salary)        self.department = department    def manage(self):        print(f"{self.name} đang quản lý phòng {self.department}")mgr = Manager("Tran Van B", 2000, "IT")mgr.show_info()mgr.manage()

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

Tính đa hình cho phép các lớp khác nhau triển khai cùng một phương thức theo các cách riêng biệt. Điều này giúp chương trình xử lý các đối tượng thuộc các lớp khác nhau thông qua một giao tiếp chung duy nhất.

Tính đa hình thường đi kèm với cơ chế Ghi đè phương thức (Method Overriding) trong lớp con:

class Animal:    def make_sound(self):        passclass Dog(Animal):    def make_sound(self):        return "Gâu gâu!"class Cat(Animal):    def make_sound(self):        return "Meo meo!"animals = [Dog(), Cat()]for animal in animals:    print(animal.make_sound())

4. Tính Trừu Tượng Hóa (Abstraction)

Tính trừu tượng hóa giúp ẩn đi các chi tiết cài đặt phức tạp bên trong và chỉ hiển thị các tính năng thiết yếu cho người dùng. Trong Python, chúng ta sử dụng module abc (Abstract Base Class) để định nghĩa các lớp trừu tượng và phương thức trừu tượng.

from abc import ABC, abstractmethodclass PaymentMethod(ABC):    @abstractmethod    def pay(self, amount):        passclass CreditCardPayment(PaymentMethod):    def pay(self, amount):        print(f"Thanh toán {amount} qua thẻ tín dụng.")class EWalletPayment(PaymentMethod):    def pay(self, amount):        print(f"Thanh toán {amount} qua ví điện tử.")payment1 = CreditCardPayment()payment1.pay(500000)

Tóm lược

Nhờ việc kết hợp 4 trụ cột OOP — Đóng gói để bảo vệ dữ liệu, Kế thừa để tái sử dụng mã nguồn, Đa hình để linh hoạt xử lý đối tượng, và Trừu tượng hóa để tối giản thiết kế — bạn có thể xây dựng các ứng dụng Python lớn, dễ bảo trì và mở rộng trong thực tế.


Nguồn tham khảo


📚 Chuỗi bài: Lộ Trình Học Python Toàn Diện: Từ Con Số 0 Đến Ứng Dụng Thực Tế

Chuỗi 20 bài viết hướng dẫn lập trình Python theo lộ trình bài bản, giúp người mới bắt đầu nắm vững cú pháp nền tảng, tư duy lập trình hướng đối tượng, làm việc với dữ liệu và xây dựng ứng dụng thực tế.

  1. 1. Lộ Trình Python #1: Cài Đặt Môi Trường Và Viết Chương Trình Đầu Tiên
  2. 2. Lộ Trình Python #2: Biến Và Kiểu Dữ Liệu Cơ Bản Trong Python
  3. 3. Các Toán Tử Trong Python Và Cách Sử Dụng Chi Tiết
  4. 4. Cấu Trúc Điều Kiện If-Else Và Tư Duy Cấu Trúc Rẽ Nhánh Trong Python
  5. 5. Vòng Lặp For Và While Trong Python: Tối Ưu Hóa Việc Lặp Lại Công Việc
  6. 6. Xử Lý Chuỗi (String) Tối Ưu Trong Python
  7. 7. Làm Chủ Cấu Trúc Dữ Liệu List Và Tuple Trong Python
  8. 8. Quản Lý Dữ Liệu Với Dictionary Và Set Trong Python
  9. 9. Xây Dựng Hàm (Function) Và Quản Lý Phạm Vi Biến Trong Python
  10. 10. Xử Lý Lỗi Và Ngoại Lệ Với Try-Except Trong Python
  11. 11. Thao Tác Đọc Và Ghi File Trong Python: Hướng Dẫn Chi Tiết Từ A Đến Z
  12. 12. Quản Lý Module Và Package Trong Python: Từ Chia Nhỏ Mã Nguồn Đến Sử Dụng Pip
  13. 13. Lập Trình Hướng Đối Tượng (OOP): Class Và Object Cơ Bản Trong Python
  14. 14. Bốn Trụ Cột Cơ Bản Của OOP Trong Python: Đóng Gói, Kế Thừa, Đa Hình Và Trừu Tượng Hóa ← Bạn đang đọc
  15. 15. Xử Lý Ngày Tháng Và Thời Gian Với Module Datetime Trong Python
  16. 16. Làm Việc Với Dữ Liệu Định Dạng JSON Vượt Trội Trong Python
  17. 17. Cơ Bản Về Crawl Dữ Liệu Web Với BeautifulSoup
  18. 18. Xử Lý Dữ Liệu Bảng Cơ Bản Với Pandas
  19. 19. Xây Dựng RESTful API Đơn Giản Với Flask
  20. 20. Dự Án Cuối Khóa: Tự Động Hóa Công Việc Hàng Ngày Với Python

← Bài trước: Lập Trình Hướng Đối Tượng (OOP): Class Và Object Cơ Bản Trong Python Bài tiếp theo: Xử Lý Ngày Tháng Và Thời Gian Với Module Datetime Trong Python →

Nhận xét