Lập trình hướng đối tượng (OOP) tập trung vào việc mô hình hóa các thực thể thực tế thông qua sự kết hợp giữa dữ liệu và hành vi. Khác với phương pháp hướng quy trình, OOP giúp quản lý hệ thống phức tạp nhờ tính đóng gói và khả năng tái sử dụng cao.
So sánh với hướng quy trình
Lập trình hướng quy trình giải quyết vấn đề qua các bước tuần tự. Ví dụ quy trình xử lý đơn hàng:
- Nhập thông tin khách hàng và sản phẩm
- Kiểm tra tính hợp lệ
- Lưu trữ dữ liệu vào file
Ưu điểm: đơn giản cho tác vụ nhỏ. Nhược điểm: khi hệ thống mở rộng, thay đổi một phần có thể ảnh hưởng toàn bộ, khó bảo trì.
Code ví dụ:
def get_order_details():
customer = input("Nhập tên khách hàng: ").strip()
item = input("Nhập sản phẩm: ").strip()
return {"customer": customer, "item": item}
def validate_order(data):
is_valid = True
if not data["customer"]:
print("Tên khách hàng không được trống")
is_valid = False
if not data["item"]:
print("Sản phẩm không được trống")
is_valid = False
return {"valid": is_valid, "data": data}
def process_order(data):
if data["valid"]:
with open("orders.log", "a", encoding="utf-8") as file:
import json
json.dump(data["data"], file)
file.write("\n")
def main():
order = get_order_details()
validation = validate_order(order)
process_order(validation)
if __name__ == "__main__":
main()Khái niệm lớp và đối tượng
Lớp (class) là bản thiết kế mô tả đặc điểm và hành vi chung của các đối tượng. Đối tượng (instance) là thể hiện cụ thể của lớp, chứa dữ liệu riêng.
Ví dụ, lớp Student định nghĩa thuộc tính và phương thức:
class Student:
def __init__(self, full_name, age, gender):
self.full_name = full_name
self.age = age
self.gender = gender
self.courses = []
def register_course(self, course_name):
self.courses.append(course_name)
print(f"{self.full_name} đã đăng ký thành công môn {course_name}")
student1 = Student("Trần Văn B", 18, "Nam")
student1.register_course("Toán học")Trong ví dụ trên:
__init__là phương thức khởi tạo tự động gọi khi tạo đối tượngregister_coursethao tác trên thuộc tính của đối tượngselftham chiếu đến chính đối tượng hiện tại
Cơ chế tìm kiếm thuộc tính
Khi truy cập thuộc tính, Python tìm theo thứ tự:
- Thuộc tính của đối tượng (instance attributes)
- Thuộc tính của lớp (class attributes)
Ví dụ:
class University:
country = "Việt Nam"
def __init__(self, name, city):
self.name = name
self.city = city
uni = University("Đại học Bách Khoa", "Hà Nội")
print(uni.country) # In ra "Việt Nam"
print(uni.name) # In ra "Đại học Bách Khoa"
University.country = "Việt Nam"
uni.country = "USA"
print(uni.country) # In "USA"
print(University.country) # In "Việt Nam"