(Bài 9): Lập trình hướng đối tượng

(Bài 9): Lập trình hướng đối tượng

Trong 8 bài học trước, chúng ta đã làm quen với biến, vòng lặp, hàm và các cấu trúc quan trọng trong Python. Tuy nhiên, nếu muốn phát triển các dự án lớn hơn – như phần mềm quản lý, game, ứng dụng web, bot, hay API – bạn cần một tư duy lập trình mạnh mẽ hơn: Lập trình hướng đối tượng (OOP – Object Oriented Programming).

OOP giúp:

  • tổ chức code gọn gàng hơn

  • tái sử dụng code hiệu quả

  • dễ mở rộng và bảo trì dự án

  • mô phỏng thế giới thực (xe, người, sản phẩm, đơn hàng…) thành các đối tượng


Tổng quan về OOP trong Python

OOP là cách tổ chức code xoay quanh đối tượng (object).
Đối tượng là thực thể có:

  • thuộc tính (property, attribute) → dữ liệu của đối tượng

  • hành vi (method) → chức năng của đối tượng

Ví dụ thực tế:

  • Đối tượng “Xe”

    • thuộc tính: màu, biển số, tốc độ

    • phương thức: chạy(), phanh()

  • Đối tượng “Học sinh”

    • thuộc tính: họ tên, tuổi, điểm số

    • phương thức: học(), thi(), nghỉ()

Python hỗ trợ lập trình hướng đối tượng một cách rất tự nhiên và dễ học.


Class và Object trong Python

Class = bản thiết kế
Object = sản phẩm tạo ra từ bản thiết kế đó

Ví dụ bản thiết kế “Con người”:

class Person:
pass

nguoi_a = Person()
nguoi_b = Person()

Ở đây:

  • Person = Class

  • nguoi_a, nguoi_b = Object được tạo ra từ class


Thuộc tính & Phương thức

Thuộc tính: dữ liệu của object
Phương thức: hàm nằm bên trong class, dùng để xử lý logic của object

Ví dụ:

class Person:
def __init__(self, name, age):
self.name = name # thuộc tính
self.age = age

def introduce(self): # phương thức
print(f"Xin chào, tôi là {self.name}, {self.age} tuổi.")

Tạo đối tượng:

p = Person("Hùng", 25)
p.introduce()

Kết quả:

Xin chào, tôi là Hùng, 25 tuổi.

Hàm khởi tạo (Constructor) – __init__

Khi bạn tạo object, Python tự động gọi phương thức đặc biệt __init__().

Công dụng: gán giá trị khởi tạo cho object.

Ví dụ:

class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color

Tạo xe:

xe1 = Car("Toyota", "Đỏ")
print(xe1.brand)
print(xe1.color)

Phương thức trong class

Phương thức là hàm nhưng phải có tham số đầu tiên là self, đại diện cho chính object đó.

class Dog:
def __init__(self, name):
self.name = name

def bark(self):
print(f"{self.name} đang sủa gâu gâu!")


Ví dụ lớn: Quản lý sản phẩm (Product)

class Product:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock

def info(self):
print(f"SP: {self.name}, Giá: {self.price}, Tồn kho: {self.stock}")

def sell(self, amount):
if amount <= self.stock:
self.stock -= amount
print(f"Đã bán {amount} {self.name}")
else:
print("Không đủ hàng!")


Kế thừa (Inheritance)

Cho phép class con thừa hưởng thuộc tính và phương thức của class cha.

Ví dụ:

class Animal:
def speak(self):
print("Con vật phát ra âm thanh")

class Cat(Animal):
pass

c = Cat()
c.speak()

Kết quả:

Con vật phát ra âm thanh

Ghi đè phương thức (Override)

Class con có thể thay đổi hành vi của class cha.

class Animal:
def speak(self):
print("Con vật kêu...")

class Dog(Animal):
def speak(self):
print("Gâu gâu!")

d = Dog()
d.speak()


Đa hình (Polymorphism)

Nhiều object, cùng tên phương thức, nhưng hành vi khác nhau.

animals = [Dog(), Cat(), Animal()]

for a in animals:
a.speak()


Đóng gói (Encapsulation)

Ẩn thông tin nội bộ, tránh để người dùng can thiệp trực tiếp.

Trong Python:

  • _bien → protected

  • __bien → private

Ví dụ:

class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # private

def deposit(self, amount):
self.__balance += amount

def get_balance(self):
return self.__balance


Ví dụ lớn: Hệ thống quản lý học sinh

class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade

def show(self):
print(f"{self.name} học lớp {self.grade}")

class HighSchoolStudent(Student):
def __init__(self, name, grade, major):
super().__init__(name, grade)
self.major = major

def show(self):
print(f"{self.name}, lớp {self.grade}, chuyên ngành: {self.major}")


Tính trừu tượng (Abstraction) – giải thích đơn giản

Chỉ bộc lộ phần cần thiết, che giấu phần thừa.

Bạn dùng TV → chỉ cần biết:

  • bật

  • tắt

  • tăng âm lượng

Không cần biết bên trong nó có mạch gì.

Trong Python, trừu tượng thường dùng ABC (Abstract Base Class), nhưng người mới chỉ cần hiểu khái niệm đã đủ.


Mini Project: Quản lý cửa hàng nhỏ

Yêu cầu:

  • Có class Product

  • Có class Order

  • Có class Customer

  • Khả năng:

    • thêm sản phẩm

    • mua hàng

    • trừ kho

    • tính tổng tiền

Code mẫu:

class Product:
def __init__(self, name, price, stock):
self.name = name
self.price = price
self.stock = stock

def sell(self, amount):
if amount > self.stock:
print("Không đủ hàng!")
return False
self.stock -= amount
return True

class Customer:
def __init__(self, name):
self.name = name

def info(self):
print(f"Khách hàng: {self.name}")

class Order:
def __init__(self, customer):
self.customer = customer
self.items = []

def add(self, product, amount):
if product.sell(amount):
self.items.append((product, amount))
print(f"Thêm {amount} {product.name} vào đơn hàng")

def total(self):
total = sum(p.price * qty for p, qty in self.items)
print(f"Tổng hóa đơn: {total}")

# Demo
iphone = Product("iPhone 15", 23000000, 5)
samsung = Product("Samsung S24", 18000000, 10)

cus = Customer("Hùng")
order = Order(cus)

order.add(iphone, 2)
order.add(samsung, 1)
order.total()


Bài tập luyện OOP

Bài 1: Tạo class “Book” có:

  • tên sách

  • tác giả

  • giá

  • phương thức show_info

Bài 2: Tạo class Vehicle → class Car kế thừa từ Vehicle

  • Vehicle có speed

  • Car có thêm số chỗ ngồi

  • ghi đè phương thức move()

Bài 3: Tạo class BankAccount

  • private balance

  • các phương thức: deposit(), withdraw(), get_balance()


Lời giải gợi ý

Bài 1

class Book:
def __init__(self, title, author, price):
self.title = title
self.author = author
self.price = price

def show_info(self):
print(f"{self.title} - {self.author} - {self.price}đ")


Bài 2

class Vehicle:
def move(self):
print("Phương tiện đang di chuyển")

class Car(Vehicle):
def __init__(self, seats):
self.seats = seats

def move(self):
print(f"Ô tô {self.seats} chỗ đang chạy")


Bài 3

class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance

def deposit(self, amount):
self.__balance += amount

def withdraw(self, amount):
if amount <= self.__balance:
self.__balance -= amount
else:
print("Không đủ tiền!")

def get_balance(self):
return self.__balance


Kết bài

OOP là nền tảng cực kỳ quan trọng nếu bạn muốn trở thành lập trình viên Python chuyên nghiệp. Từ web backend (Django, Flask), AI, Data Science, Game Development đến Automation — tất cả đều dùng OOP.

Trong bài 9, bạn đã nắm được:

  • class & object

  • thuộc tính và phương thức

  • constructor

  • kế thừa

  • đa hình

  • đóng gói

  • ghi đè

  • abstraction

  • project quản lý cửa hàng

1 Trackback / Pingback

  1. (BÀI 8): Deployment & CI/CD với GitHub Actions - aidanang.com

Leave a Reply

Your email address will not be published.


*