Lập trình hướng đối tượng (OOP) là một phương pháp lập trình mạnh mẽ và phổ biến, đặc biệt trong ngữ cảnh của Python. Hai nguyên tắc cơ bản mà chúng ta sẽ khám phá trong bài viết này là kế thừa (inheritance) và đa hình (polymorphism).
Kế thừa
Kế thừa là một cơ chế cho phép một lớp (class) mới được tạo ra dựa trên một lớp đã tồn tại. Lớp mới, gọi là lớp con (subclass), có thể kế thừa mọi thuộc tính và phương thức của lớp cha (parent class). Trong Python, kế thừa giúp tạo ra các hệ thống phân cấp lớp một cách dễ dàng.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
dog = Dog("Buddy")
cat = Cat("Whiskers")
print(dog.speak()) # Buddy says Woof!
print(cat.speak()) # Whiskers says Meow!
Trong ví dụ trên, Animal
là lớp cha, trong khi Dog
và Cat
là các lớp con kế thừa từ Animal
. Các lớp con này không chỉ thừa hưởng thuộc tính name
mà còn có thể triển khai phương thức speak
.
Đa hình
Đa hình là khả năng của một phương thức trong lớp có thể hành xử khác nhau dựa trên đối tượng cụ thể đang gọi nó. Nó cho phép các đối tượng thuộc các lớp khác nhau đáp ứng cùng một giao diện, do đó, phương thức tương ứng có thể được gọi một cách thống nhất.
Cùng xem ví dụ kế thừa trước và bổ sung thêm một hàm để hiểu rõ về khái niệm này:
def make_animal_speak(animal):
print(animal.speak())
make_animal_speak(dog) # Buddy says Woof!
make_animal_speak(cat) # Whiskers says Meow!
Ở đây, hàm make_animal_speak
chấp nhận một đối tượng animal
và gọi phương thức speak
của nó. Dù animal
là đối tượng Dog
hay Cat
, đúng phương thức speak
sẽ được gọi vì cả hai lớp đều triển khai phương thức này.
Lợi ích của kế thừa và đa hình
- Tái sử dụng mã: Kế thừa cho phép tái sử dụng mã từ các lớp cha, giảm thiểu việc viết lại mã và đảm bảo tính nhất quán.
- Trừu tượng: Đa hình giúp đơn giản hóa thiết kế và làm tăng tính trừu tượng, làm cho mã dễ hiểu hơn.
- Dễ dàng mở rộng: Các lớp có thể được mở rộng một cách dễ dàng thông qua kế thừa và đa hình, giúp duy trì và nâng cấp hệ thống dễ dàng.
Kết luận
Hiểu và sử dụng tốt tính kế thừa và đa hình trong lập trình hướng đối tượng với Python sẽ giúp bạn viết mã sạch hơn, dễ bảo trì hơn và hiệu quả hơn. Hai nguyên tắc này không chỉ mạnh mẽ trong việc xây dựng các hệ thống phức tạp mà còn giúp lập trình viên tạo ra các giải pháp linh hoạt và mở rộng.
Comments