Cơ Sở Lập Trình Hướng Đối Tượng Trong Python

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ượng
  • register_course thao tác trên thuộc tính của đối tượng
  • self tham 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ự:

  1. Thuộc tính của đối tượng (instance attributes)
  2. 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"

Thẻ: python object-oriented Classes instances attributes

Đăng vào ngày 5 tháng 6 lúc 20:33