Cập nhật gần đây: 22/02/2025
Mục lục
Lập trình hướng đối tượng là gì?
Lập trình hướng đối tượng (viết tắt là OOP) là cách lập trình đơn giản, dễ hiểu, giống như cách chúng ta nhìn thế giới xung quanh. Thay vì viết từng dòng lệnh phức tạp, OOP giúp chúng ta tạo ra các “đối tượng” trong chương trình giống như những vật thể ta thấy trong cuộc sống hàng ngày.
Khái niệm
Đối tượng
Một đối tượng trong lập trình giống như một vật thể trong đời thực. Nó có hai phần chính:
- Thuộc tính: Những đặc điểm mô tả đối tượng đó. Ví dụ đơn giản: một chiếc xe hơi có các đặc điểm như màu xe, số bánh xe, tốc độ tối đa.
- Phương thức: Những việc mà đối tượng có thể làm được. Lấy ví dụ chiếc xe hơi: nó có thể chạy, dừng lại, rẽ phải hoặc rẽ trái.

Lớp
Lớp (Class) là một bản thiết kế chung để tạo ra các đối tượng. Giống như một bản vẽ, nó mô tả những đặc điểm và hành động mà tất cả các đối tượng cùng loại sẽ có.
Ví dụ đơn giản: Hãy nghĩ về lớp “Xe hơi”. Mọi chiếc xe hơi đều có:
- Đặc điểm chung: màu sắc, kích thước, số bánh xe
- Khả năng chung: khởi động, dừng lại, rẽ, chạy nhanh hay chậm
Từ bản thiết kế này, ta có thể tạo ra nhiều xe hơi khác nhau. Ví dụ:
- Xe Polo màu xanh
- Xe Mini màu xanh ngọc
- Xe Beetle màu đỏ

Đặc điểm
Tính đóng gói (Encapsulation)
Tính đóng gói trong lập trình hướng đối tượng giống như một chiếc hộp kín. Bên trong chứa các thông tin và chức năng, nhưng bên ngoài chỉ có thể tương tác qua một số cách được cho phép.
Ví dụ, một đối tượng xe hơi sẽ ẩn các chi tiết bên trong (động cơ, hệ thống điện) và chỉ cho phép tương tác thông qua các nút điều khiển như vô lăng, chân ga, phanh.
Ví dụ:
- Đối tượng: Chiếc xe hơi
- Thuộc tính: Màu sắc, hãng, năm sản xuất (được bảo vệ, chỉ có thể xem qua các phương thức cho phép)
- Phương thức: Chạy, dừng, rẽ (các thao tác được phép thực hiện với xe)
Tính kế thừa (Inheritance)
Tính kế thừa trong lập trình rất dễ hiểu nếu so sánh với đời thực. Giống như con cái thừa hưởng đặc điểm từ cha mẹ (như màu mắt hay chiều cao), trong lập trình cũng vậy.
Có hai khái niệm đơn giản:
- Lớp cha: Giống như cha mẹ, chứa những đặc điểm cơ bản mà tất cả con cái sẽ có.
- Lớp con: Giống như con cái, nhận các đặc điểm từ cha mẹ và có thể có thêm đặc điểm riêng.
Ví dụ dễ hiểu:
- Lớp cha: Động vật
- Có tên và thuộc loài nào
- Biết ăn uống
- Lớp con: Chó
- Có tất cả đặc điểm của động vật (tên, loài, biết ăn)
- Thêm đặc điểm riêng: màu lông và biết sủa
Tính đa hình (Polymorphism)
Tính đa hình là một đặc điểm quan trọng cho phép thực hiện cùng một hành động theo nhiều cách khác nhau.
Ví dụ: Khi nhiều lớp có chung một phương thức nhưng mỗi lớp thực hiện phương thức đó theo cách riêng. Điển hình như smartphone Android và iPhone – cả hai đều lưu trữ dữ liệu trên cloud nhưng Android dùng Google Drive còn iPhone dùng iCloud.
Một ví dụ dễ hiểu khác là về động vật: chó và mèo đều là động vật và đều có khả năng kêu, nhưng chó thì sủa “gâu gâu” còn mèo kêu “meo meo”. Ở đây, chó và mèo là các đối tượng cùng thực hiện hành động “kêu” nhưng theo cách riêng của mình.
Tính trừu tượng (Abstraction)
Tính trừu tượng là việc chỉ tập trung vào những thông tin quan trọng và cần thiết, bỏ qua các chi tiết phức tạp. Giống như khi lái xe, ta chỉ cần biết đạp ga để tăng tốc mà không cần hiểu cơ chế bên trong động cơ hoạt động thế nào.
Trong lập trình hướng đối tượng, tính trừu tượng giúp ta chọn lọc những thuộc tính và phương thức thực sự cần thiết cho một đối tượng, phù hợp với mục đích sử dụng cụ thể.
Ví dụ trong quản lý sinh viên, ta chỉ cần:
- Họ và tên
- Ngày sinh
- Giới tính
- Điểm thi
mà không cần quan tâm đến:
- Màu tóc
- Sở thích
- Chiều cao
vì những thông tin này không liên quan đến việc quản lý học tập.
So sánh lập trình hướng đối tượng và hướng cấu trúc
Tiêu chí |
Lập trình hướng cấu trúc |
Lập trình hướng đối tượng |
|---|---|---|
Cách tiếp cận |
Tập trung vào từng bước thực hiện |
Tập trung vào đối tượng và cách chúng tương tác |
Dễ hiểu |
Phức tạp với dự án lớn |
Dễ hình dung, gần gũi thực tế |
Tái sử dụng code |
Khó |
Dễ dàng |
Bảo mật |
Thấp |
Cao |
Mở rộng |
Phức tạp |
Đơn giản |
Quản lý dự án |
Khó với dự án lớn |
Hiệu quả với mọi quy mô |
Mình tên là Sang, đam mê lĩnh vực phân tích dữ liệu, thương mại điện tử và công nghệ thông tin. Sang Blog là nơi mình chia sẻ những kiến thức thú vị.
