Lập trình hướng đối tượng là gì? Giải thích, nguyên lý và ưu điểm>

Lập trình hướng đối tượng được hỗ trợ hầu hết bởi các ngôn ngữ lập trình như PHP, Java, .NET, Python, Ruby… Bởi vậy nó là một trong những kỹ thuật lập trình rất quan trọng và được sử dụng phổ biến. Vậy lập trình hướng đối tượng là gì, các nguyên lý cơ bản và ưu điểm của nó như thế nào? Đọc tiếp ngay để tìm câu trả lời nhé!
Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng là một mẫu hình lập trình dựa trên khái niệm “công nghệ đối tượng”, mà trong đó, đối tượng chứa đựng các dữ liệu, trên các trường, thường được gọi là các thuộc tính; và mã nguồn, được tổ chức thành các phương thức.
Wikipedia
Lập trình hướng đối tượng hay còn được gọi là Object Oriented Programming – OOP.
Đối tượng trong OOP là gì?
Đối tượng là những sự vật, sự việc có những tính chất, hành động giống nhau được gom góp lại thành đối tượng giống trong cuộc sống thực tế. Lập trình OOP là kỹ thuật cho phép lập trình viên định nghĩa các lớp (class) để gom (mô hình) các đối tượng thực tế.
Mỗi đối tượng bao gồm 2 thông tin cấu tạo thành: thuộc tính và phương thức.
- Thuộc tính: là những thông tin, đặc điểm nhận biết đối tượng. Ví dụ: động vật bao gồm mắt, mũi, chân, tay…
- Phương thức: là những thao tác, hành động có thể được thực hiện bởi đối tượng đó. Ví dụ: động vật có thể thực hiện các hành động ăn, uống, đi lại…
Lớp trong OOP là gì?
Lớp là kiểu dữ liệu bao gồm các phương thức và đối tượng được định nghĩa từ trước. Khác với kiểu dữ liệu thông thường, nó là sự trừu tượng hóa của đối tượng. Nói một cách dễ hiểu hơn, một lớp đối tượng được gom lại từ các đối tượng có đặc tính tương tự nhau.
Đối tượng và lớp khác nhau như thế nào?
Tiêu chí | Lớp | Đối tượng |
---|---|---|
Bản chất | Là khuôn mẫu | Là thực thể thể hiện dựa trên khuôn mẫu |
Ví dụ | Loài chó – Lớp chó: – Thông tin, đặc điểm: 2 mắt, 4 chân, có đuôi, lông màu gì, chiều cao, cân nặng… – Hành động: ăn, ngủ, sủa, đi, chạy… | Chó Phú Quốc – Đối tượng: Con chó Phú Quốc nuôi trong nhà cũng mang đặc tính của lớp chó. |
Các nguyên lý cơ bản của lập trình hướng đối tượng
Trong OOP, có 4 nguyên lý cơ bản cần phải nắm rõ. Cụ thể là:
Tính đóng gói – Encapsulation
- Khái niệm:
Tính đóng gói là quy tắc bảo vệ trạng thái bên trong của một đối tượng và tránh truy cập từ code bên ngoài. Tức là, trạng thái của đối tượng đó sẽ không thể được nhìn thấy trực tiếp và thay đổi bởi code bên ngoài. Các truy cập tới trạng thái bên trong này bắt buộc phải thông qua một public API. Các public API chịu trách nhiệm thực hiện kiểm tra tính hợp lệ và trình tự cập nhật trạng thái của đối tượng đó. Do đó, nó đảm bảo trạng thái của đối tượng luôn là hợp lệ.
- Nguyên nhân của trạng thái đối tượng không hợp lệ: tính hợp lệ chưa được kiểm tra. Thực hiện không đúng trình tự hoặc bỏ qua các bước.
Vì vậy, có một quy tắc cần nhớ trong lập trình hướng đối tượng là luôn phải khai báo các trạng thái bên trong của đối tượng là private. Đồng thời chỉ cho truy cập qua các public/ protected method/ property. Khi sử dụng các đối tượng, bạn không biết nó làm việc như thế nào bên trong mà chỉ cần biết các public API là gì. Và điều này đảm bảo các quy tắc logic bên trong sẽ kiểm tra được những gì thay đổi đối tượng, tránh việc sử dụng không chính xác đối tượng.
- Ví dụ trường hợp xảy ra nguyên lý đóng gói:
Khi thiết kế viên thuốc, chúng ta chỉ biết một số thành phần chính và nó chữa bệnh gì. Nhưng không thể biết được cụ thể bên trong nó chứa những gì.

Tính kế thừa – Inheritance
- Khái niệm:
Tính kế thừa dựa trên các định nghĩa của lớp đã có để cho phép xây dựng một lớp mới. Tức là, lớp cha có thể chia sẻ dữ liệu cũng như phương thức cho các lớp con. Do đó, các lớp con không cần phải định nghĩa lại. Bên cạnh đó, nó có thể mở rộng các thành phần kế thừa, đồng thời bổ sung thêm các thành phần mới. Nhờ đó, tính kế thừa giúp tái sử dụng mã nguồn một cách tối ưu.
- Các loại kế thừa phổ biến: kế thừa thứ bậc, kế thừa đa cấp, đơn kế thừa, đa kế thừa.
- Ví dụ: 3 lớp AndroidPhone, IPhone, WindowsPhone.
Mỗi class sẽ đại diện cho một loại smartphone khác nhau, nhưng chúng sở hữu những thuộc tính giống nhau. Việc đặt những thuộc tính này ở một nơi có thể dùng bởi nhiều lớp khác sẽ hay hơn là phải sao chép chúng. Đó là chức năng của tính kế thừa trong OOP. Nó tạo ra mối quan hệ cha – con bằng cách định nghĩa lớp cha – base class (Smartphone) và có những lớp con kế thừa (derived class).
Bây giờ các lớp con có thể kế thừa từ lớp cha 3 thuộc tính. Từ đó, lập trình viên không phải làm bất cứ việc gì ở lớp con nếu các chức năng của lớp cha đã được định nghĩa đầy đủ. Còn nếu bạn muốn chức năng khác của lớp con so với định nghĩa ở lớp cha thì nó có thể ghi đè (override) chức năng trên lớp cha đó.
Tính đa hình – Polymorphism
- Khái niệm:
Tính đa hình sẽ khó hiểu hơn khi mới tiếp cận so với tính kế thừa và đóng gói trong lập trình hướng đối tượng. Nhưng cũng vì vậy mà nó chứa đựng hầu hết sức mạnh của OPP. Đa hình hiểu một cách đơn giản là hai hoặc nhiều lớp giống nhau về phương thức nhưng có những cách khác nhau để thực thi.
- Ví dụ như trên: mỗi Smartphone kế thừa từ lớp Smartphone. Nhưng có thể lưu trữ theo những cách khác nhau dữ liệu trên cloud:
+ Androidphone lưu trữ bằng Google Drive
+ Iphone lưu trữ bằng Icloud
+ Windowsphone sử dụng SkyDrive
Tính đa hình mang lại cho code khả năng tổng quát hóa cao, vì vậy nó được đánh giá là một tính chất rất mạnh mẽ. Chúng ta chỉ cần nhận một biến kiểu Smartphone và có thể làm việc với bất cứ lớp nào kế thừa từ nó, mà không cần tạo ra phương thức cho mỗi kiểu kế thừa từ lớp cha Smartphone.
Tính trừu tượng – Abstraction
- Khái niệm:
Trừu tượng có nghĩa là tổng quát hóa mà không cần chú ý chi tiết bên trong. Và đương nhiên người ta vẫn hiểu khi nghe về nó. Trong lập trình hướng đối tượng, tính trừu tượng có nghĩa là chọn ra các thuộc tính và phương thức của đối tượng phục vụ giải quyết bài toán đang lập trình. Vì mỗi đối tượng có nhiều thuộc tính và phương thức, trong khi ta không nhất thiết phải chọn tất cả với bài toán cụ thê.r
- Ví dụ:
Trong bài toán quản lý sinh viên, chúng ta chỉ cần quản lý các thông tin sau: Họ tên, Ngày sinh, Giới tính, Điểm thi,… Và không cần quản lý những thông tin như Màu tóc, Sở thích, Chiều cao…
Ưu điểm của OPP

- Có thể loại bỏ những chương trình bị trùng lặp hay dư thừa trong quá trình mô tả các lớp, dựa trên nguyên lý kế thừa.
- Mở rộng khả năng sử dụng các lớp mà không cần thực hiện lại.
- Tối ưu code và tái sử dụng hiệu quả.
- Rút ngắn được thời gian xây dựng hệ thống, từ đó năng suất thực hiện tăng.
- Lớp và đối tượng là 2 khái niệm mới trong OOP, giải quyết được các khuyết điểm của phương pháp lập trình hướng cấu trúc. Đồng thời, nó cũng giúp biển diễn tốt hơn thế giới thực trên máy tính.
Hy vọng các bạn đã hiểu hơn về lập trình hướng đối tượng cũng như nguyên lý cơ bản và ưu điểm của nó. Chúc các bạn học tập và ứng dụng vào lập trình thành công!