1. Nó là gì?
Lập trình hướng đối tượng (Object-Oriented Programming – OOP) là một phương pháp lập trình dựa trên khái niệm “đối tượng”. Thay vì tập trung vào các lệnh và logic, OOP tập trung vào việc mô hình hóa các đối tượng trong thế giới thực thành các đối tượng trong chương trình.
2. Khái niệm
2.1. Đối tượng
Một đối tượng (Object) bao gồm 2 thông tin là thuộc tính (Attribute) và phương thức (Method).
Thuộc tính là những thông tin, đặc điểm của đối tượng. Ví dụ: Chiếc xe hơi là một đối tượng có thuộc tính như màu sắc, số bánh, tốc độ đối đa, mã lực, hình dáng,…
Phương thức là những thao tác, hành động mà đối tượng có thể thực hiện. Ví dụ: chạy, dừng, rẽ phải, rẽ trái, lùi,…
2.2. Lớp
Lớp (Class) được hiểu như là một khuôn mẫu chung cho các đối tượng, nghĩa là tất cả các đối tượng đều sẽ có những thuộc tính và phương thức giống nhau.
Ví dụ: Lớp là chiếc xe hơi. Nó sở hữu các thuộc tính như màu sắc, kích thước, số lượng bánh xe,… và các phương thức như khởi động, dừng lại, rẽ, tăng tốc, giảm tốc, lùi,… Đây là các thuộc tính và phương thức chung cho tất cả các loại xe hơi. Tuy nhiên, mỗi đối tượng xe hơi cụ thể sẽ có những đặc điểm riêng biệt: chiếc Polo có màu xanh, chiếc Mini có màu xanh ngọc, và chiếc Beetle có màu đỏ.
3. Đặc điểm
3.1. Tính đóng gói (Encapsulation)
Hãy hình dung một chiếc hộp đóng kín. Bên trong nó chứa đựng nhiều vật dụng khác nhau. Bạn không thể quan sát trực tiếp các vật dụng này từ bên ngoài, mà chỉ có thể tương tác với chúng qua một số lỗ nhỏ trên hộp.
Trong lập trình hướng đối tượng, một đối tượng cũng tương tự như chiếc hộp đó. Đối tượng bao gồm các thuộc tính (như màu sắc, kích thước,…) và phương thức (như chạy, nhảy,…). Encapsulation, hay đóng gói, là quá trình ẩn đi các thuộc tính và phương thức bên trong đối tượng, chỉ hiển thị những phần mà ta muốn cho phép các đối tượng khác tương tác.
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, … (ẩn bên trong “hộp” của chiếc xe)
- Phương thức: Chạy, dừng, rẽ, … (các hành động có thể thực hiện với xe)
3.2. Tính kế thừa (Inheritance)
Bạn hãy tưởng tượng một gia đình. Cha mẹ có những đặc điểm chung như màu mắt, chiều cao, và con cái thường sẽ thừa hưởng những đặc điểm này. Trong lập trình, kế thừa cũng tương tự như vậy.
Lớp cha: Lớp cha chứa những đặc điểm chung (thuộc tính và phương thức) của một nhóm đối tượng.
Lớp con: Lớp con sẽ thừa hưởng những đặc điểm từ lớp cha và có thể có thêm những đặc điểm riêng của mình.
Ví dụ:
- Lớp cha: Động vật
- Thuộc tính: Tên, loài
- Phương thức: Ăn
- Lớp con: Chó
- Thuộc tính: Giống chó (thừa hưởng từ Động vật) + Màu lông (riêng)
- Phương thức: Sủa (riêng) + Ăn (thừa hưởng từ Động vật)
3.3. Tính đa hình (Polymorphism)
Tính đa hình là khả năng thực hiện một hành động theo nhiều cách khác nhau, đây là một trong những tính chất mạnh mẽ nhất của lập trình hướng đối tượng.
Một cách đơn giản để hiểu đa hình: đó là khi hai hoặc nhiều lớp có phương thức giống nhau nhưng lại thực hiện chúng theo cách thức riêng biệt.
Chẳng hạn, mỗi smartphone kế thừa từ lớp cha là Smartphone nhưng lại có cách lưu trữ dữ liệu trên cloud riêng: Android sử dụng Google Drive còn iPhone dùng iCloud.
Lấy ví dụ thực tế về đa hình, ta có hai loài động vật: chó và mèo. Cả hai đều thuộc lớp động vật, nhưng khi được yêu cầu phát ra tiếng kêu, chó sẽ kêu “gâu gâu” còn mèo sẽ kêu “meo meo”.
Trong trường hợp này, chó và mèo được coi là các đối tượng, cùng thực hiện hành động “kêu” nhưng theo những cách thức khác nhau.
3.4. Tính trừu tượng (Abstraction)
Trừu tượng là quá trình tổng quát hóa, không tập trung vào chi tiết nội dung. Nó cho phép người ta hiểu một khái niệm mà không cần biết đến các chi tiết cụ thể.
Ví dụ, khi lái xe hơi, việc tăng ga để tăng tốc độ là một hành động trừu tượng. Người lái chỉ cần biết rằng tăng ga sẽ làm xe chạy nhanh hơn mà không cần hiểu cơ chế bên trong.
Trong lập trình hướng đối tượng (OOP), tính trừu tượng có nghĩa là lựa chọn các thuộc tính và phương thức cần thiết của một đối tượng để giải quyết vấn đề cụ thể. Không phải tất cả thuộc tính hay phương thức đều cần thiết cho mọi bài toán.
Chẳng hạn, trong bài toán quản lý sinh viên, ta chỉ cần quản lý thông tin như:
- Họ và tên
- Ngày sinh
- Giới tính
- Điểm thi
và không cần quản lý thông tin không liên quan như:
- Màu tóc
- Sở thích
- Chiều cao
bởi vì những thông tin này không cần thiết cho bài toán.
4. Ưu điểm của OOP
Đặc điểm | Lập trình Hướng Cấu trúc (POP) | Lập trình Hướng Đối tượng (OOP) |
Tập trung vào | Dữ liệu và các hàm thao tác trên dữ liệu | Đối tượng và các tương tác giữa các đối tượng |
Mô hình hóa | Ít trực quan, khó mô hình hóa các thực thể trong thế giới thực | Trực quan, dễ mô hình hóa các thực thể trong thế giới thực |
Tái sử dụng | Hạn chế | Cao |
Bảo mật | Thấp | Cao |
Mở rộng | Khó | Dễ |
Quản lý dự án lớn | Khó | Dễ |