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).
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 AttributeError2. 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
- Lập Trình OOP Python: Kế Thừa và Đa Hình (MH
- [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
- Đa hình (Polymorphism) trong Python là gì? Giải thích với một ...
- OOP - Tính Kế thừa và Đa hình (Inheritance & Polymorphism ...
- Tính đa hình (Polymorphism) trong lập trình hướng đối tượng MarketEnterprise Vietnam
Nhận xét
Đăng nhận xét