Trước khi tiếp cận Lập trình hướng đối tượng (OOP), chúng ta thường viết chương trình theo phong cách hướng thủ tục (procedural programming) – tổ chức code xung quanh các hàm và tập lệnh xử lý tuần tự. Tuy nhiên, khi ứng dụng mở rộng, việc quản lý dữ liệu và logic riêng lẻ trở nên phức tạp. Lập trình hướng đối tượng ra đời nhằm giúp giải quyết bài toán này bằng cách mô hình hóa các đối tượng trong thực tế vào trong mã nguồn.
1. Lập Trình Hướng Đối Tượng (OOP) Là Gì?
Lập trình hướng đối tượng (Object-Oriented Programming - OOP) là một phương pháp luận lập trình dựa trên khái niệm các "đối tượng". Mỗi đối tượng chứa dữ liệu dưới dạng các thuộc tính (attributes) và mã nguồn dưới dạng các phương thức (methods).
OOP mang lại nhiều lợi ích quan trọng:
- Tái sử dụng mã nguồn: Giảm thiểu việc lặp lại code theo nguyên lý DRY (Don't Repeat Yourself).
- Dễ bảo trì và mở rộng: Quản lý chương trình theo các khối độc lập giúp dễ dàng tìm lỗi và nâng cấp.
- Trừu tượng hóa thực tế: Giúp mô phỏng các đối tượng thực tế (như người dùng, tài khoản ngân hàng, sản phẩm) vào lập trình một cách tự nhiên.
2. Khái Niệm Lớp (Class) Và Đối Tượng (Object)
Để làm việc với OOP, bạn cần hiểu rõ sự khác biệt giữa Class và Object:
- Lớp (Class): Là một bản thiết kế hoặc khuôn mẫu (blueprint) định nghĩa các đặc tính và hành vi chung. Bản thân Class chưa tồn tại như một dữ liệu cụ thể trong bộ nhớ khi chương trình chạy.
- Đối tượng (Object): Là một thực thể (instance) cụ thể được tạo ra từ Class. Mỗi Object sở hữu dữ liệu riêng biệt nhưng tuân theo cấu trúc mà Class định nghĩa.
Ví dụ thực tế: Class giống như bản vẽ thiết kế của một ngôi nhà, còn Object chính là ngôi nhà thực sự được xây dựng từ bản vẽ đó.
3. Cú Pháp Khai Báo Class Và Khởi Tạo Object Trong Python
Trong Python, bạn sử dụng từ khóa class để định nghĩa một lớp. Theo quy ước, tên class thường viết theo kiểu CamelCase (chữ cái đầu mỗi từ viết hoa).
class Dog: # Định nghĩa một lớp có tên là Dog pass # Tạo đối tượng (instance) từ lớp Dog my_dog = Dog() print(my_dog) Hàm khởi tạo __init__ và tham số self
Hàm __init__() là một phương thức đặc biệt (gọi là constructor) tự động chạy khi một đối tượng mới được tạo ra. Nó thường dùng để gán giá trị cho các thuộc tính của đối tượng.
Tham số self đại diện cho chính đối tượng hiện tại đang được thao tác. Python dùng self để liên kết các thuộc tính và phương thức với đối tượng đó.
class Student: # Hàm khởi tạo định nghĩa các thuộc tính def __init__(self, name, age): self.name = name # Thuộc tính tên self.age = age # Thuộc tính tuổi # Khởi tạo các đối tượng sinh viên student1 = Student("Nguyen Van A", 20) student2 = Student("Tran Thi B", 21) # Truy cập thuộc tính của từng đối tượng print(student1.name) # Output: Nguyen Van A print(student2.age) # Output: 21 4. Khai Báo Phương Thức (Methods) Trong Class
Phương thức là các hàm được định nghĩa bên trong một Class để thực hiện hành động liên quan đến đối tượng đó. Mọi phương thức thông thường của một đối tượng đều cần nhận self làm tham số đầu tiên.
class Car: def __init__(self, brand, model): self.brand = brand self.model = model # Phương thức hiển thị thông tin def display_info(self): return f"Xe: {self.brand} - Dòng xe: {self.model}" # Phương thức mô phỏng hành động def drive(self): print(f"{self.brand} {self.model} đang chạy...") # Khởi tạo đối tượng và gọi phương thức my_car = Car("Toyota", "Camry") print(my_car.display_info()) # Output: Xe: Toyota - Dòng xe: Camry my_car.drive() # Output: Toyota Camry đang chạy... 5. Phân Biệt Instance Variable Và Class Variable
Trong Python, thuộc tính của lớp có thể chia làm hai loại chính:
- Instance Variable (Biến đối tượng): Được định nghĩa bên trong phương thức (thường là
__init__) với tiền tốself.. Giá trị của nó là riêng biệt cho từng đối tượng. - Class Variable (Biến lớp): Được định nghĩa trực tiếp bên trong Class nhưng nằm ngoài các phương thức. Giá trị này được chia sẻ chung cho tất cả các đối tượng được tạo ra từ Class đó.
class Circle: pi = 3.14159 # Class Variable (dùng chung cho mọi hình tròn) def __init__(self, radius): self.radius = radius # Instance Variable (bán kính riêng của từng hình tròn) def area(self): return Circle.pi * (self.radius ** 2) c1 = Circle(5) c2 = Circle(10) print(c1.area()) # Output: 78.53975 print(c2.area()) # Output: 314.159 Kết Luận
Lập trình hướng đối tượng (OOP) giúp cấu trúc mã nguồn trở nên gọn gàng, dễ quản lý và mở rộng hơn. Việc nắm vững khái niệm Lớp (Class), Đối tượng (Object), thuộc tính và phương thức là nền tảng cốt lõi để bạn tiếp cận các kỹ thuật nâng cao hơn trong lập trình Python.
Nguồn tham khảo
- Lập trình Hướng Đối Tượng - Python (OOP) - Tổng Quan & ...
- Bài tập Lập trình hướng đối tượng dùng Python ...
- Lập trình hướng đối tượng là gì? | Object Oriented Programming - OOP
- Python OOP (Object-Oriented Programming)
- Lập Trình Hướng Đối Tượng Bằng PYTHON Trong 10 Phút
Nhận xét
Đăng nhận xét