Tính đóng gói trong OOP và những điều bạn cần biết

Tính đóng gói trong OOP là một khái niệm cơ bản, quan trọng, nhưng nhiều lập trình viên lại bỏ qua. Bài viết này sẽ trình bày một số thông tin mà bạn cần biết về Tính đóng gói trong OOP.

Tính đóng gói trong OOP là gì?

Tính đóng gói (Encapsulation) là một trong bốn tính chất cơ bản của Lập trình hướng đối tượng (Object-oriented programming – viết tắt là OOP). Các tính chất còn lại bao gồm: Tính đa hình (Polymorphism), Tính kế thừa (Inheritance) và Tính trừu tượng (Abstraction).

Hiểu một cách đơn giản, “đóng gói” là việc đưa tất cả thông tin, dữ liệu quan trọng vào bên trong một đối tượng (object). Sau đó, khi một đối tượng được khởi tạo từ lớp (class), thì dữ liệu và phương thức (method) đã được đóng gói trong đối tượng đó. Khi sử dụng, ta chỉ cần gọi tên phương thức chứ không cần truy cập đến dữ liệu bên trong.

Mục đích của Tính đóng gói trong OOP

Trong tư duy lập trình, việc lấy thông tin từ bên trong đối tượng để phục vụ cho một hành động bên ngoài không được được xem là cách viết mã hay. Do đó, Tính đóng gói được dùng để che giấu dữ liệu bên trong của một đối tượng. Bên cạnh đó, nó chặn quyền truy cập trực tiếp đến các phần tử bên trong của đối tượng.

Lập trình viên có thể tận dụng Tính đóng gói khi muốn bảo vệ dữ liệu bên trong của đối tượng. Dữ liệu đó hoàn toàn không thể bị sửa đổi một cách bất ngờ bởi những mã lệnh bên ngoài từ những phần khác của chương trình. 

Có thể hiểu “đóng gói” là đưa dữ liệu và phương thức vào trong một lớp.

Vì sao nên tận dụng Tính đóng gói?

Nhìn chung, Tính đóng gói có một số ưu điểm như sau:

  • Tính linh hoạt: Mã được đóng gói sẽ linh hoạt, dễ sửa đổi hơn là những đoạn mã độc lập.
  • Khả năng tái sử dụng: Mã đã đóng gói có thể được tái sử dụng trong một ứng dụng hoặc nhiều ứng dụng. Từ một đối tượng, người dùng có thể chuyển sang dùng một đối tượng khác mà không phải đổi mã. Bởi vì cả hai đối tượng đều có giao diện như nhau.
  • Khả năng bảo trì: Mã được đóng gói trong những phần riêng biệt, như là lớp, phương thức, giao diện,… Do đó, việc thay đổi, cập nhật một phần của ứng dụng không ảnh hưởng đến những phần còn lại. Điều này giúp giảm công sức và tiết kiệm thời gian cho các nhà phát triển.
  • Khả năng kiểm thử: Đối với một lớp được đóng gói, Tester sẽ diễn viết những bài kiểm thử hơn. Các biến thành viên sẽ tập trung ở một nơi chứ không nằm rải rác. Do đó, kiểm thử viên cũng tiết kiệm được thời gian và công sức hơn.
  • Che giấu dữ liệu: Khi sử dụng phương thức, người dùng chỉ cần biết nó tạo ra kết quả gì. Họ không cần quan tâm đến những chi tiết bên trong của đối tượng để sử dụng nó.

Minh họa về Tính đóng gói trong OOP

Sau đây là một ví dụ về Tính đóng gói trong OOP được viết theo ngôn ngữ lập trình Python.

Minh họa về Tính đóng gói trong OOP bằng ngôn ngữ lập trình Python.

Đoạn mã trên sẽ có Output như sau:

Selling Price: 900
Selling Price: 900
Selling Price: 1000

Theo cách viết trên, ta chỉ cần gọi hàm setMaxPrice để thiết lập mức giá tối đa. Công việc này sẽ không hề ảnh hưởng đến nội dung bên trong hàm.

Một số thuật ngữ liên quan

Private, public, protected và default là những thuật ngữ gắn liền với Tính đóng gói. Chúng được gọi chung là Access modifier (bổ từ truy cập). Chúng dùng để giới hạn hoặc quy định phạm vi truy cập của một phương thức trong lớp. Cụ thể:

  • Private (riêng tư): phương thức có khai báo private chỉ có thể được truy cập trong chính lớp được khai báo đó.
  • Public (công cộng): phương thức có khai báo public có thể được truy cập ở bất cứ lớp nào khác.
  • Protected (được bảo vệ): phương thức có khai báo protected chỉ có thể được truy cập thông qua Tính kế thừa.
  • Default (Mặc định): là khi phương thức không được khái báo rõ ràng. Thông thường thì nếu không được khai báo, phương thức sẽ được hiểu là public theo mặc định.

Thực tế, nhiều người vẫn thường xuyên nhầm lẫn giữa việc che giấu dữ liệu và Tính đóng gói, dù đây là hai khái niệm hoàn toàn khác nhau. Hy vọng qua bài viết này, các bạn có thể hiểu rõ hơn về Tính đóng gói trong OOP.


Tham khảo: Medium.com

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
February 06, 2021
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
4 khóa học lập trình hướng đối tượng miễn phí cho người mới

4 khóa học lập trình hướng đối tượng miễn phí cho người mới

Nếu bạn muốn theo nghề IT thì sớm muộn cũng phải học lập trình hướng đối tượng. Đây là một kiến thức cơ bản, bắt buộc phải biết. Bài viết sẽ chia sẻ với bạn 4 khóa học miễn phí, phù hợp với người mới bắt đầu. Tìm hiểu thêm: Bài tập ôn luyện Lập […]
Phương pháp lập trình hướng đối tượng và các ưu, nhược điểm

Phương pháp lập trình hướng đối tượng và các ưu, nhược điểm

Từ lâu phương pháp lập trình hướng đối tượng đã không còn xa lạ với các lập trình viên. Bài viết sẽ chia sẻ với các bạn một số ưu điểm và nhược điểm của phương pháp này. Tìm hiểu thêm: Bài tập ôn luyện Lập trình hướng đối tượng từ cơ bản đến nâng […]
4 khái niệm bạn phải biết khi lập trình hướng đối tượng

4 khái niệm bạn phải biết khi lập trình hướng đối tượng

Lập trình hướng đối tượng (Object-oriented programming) là một phương pháp quen thuộc đối với các chuyên gia phát triển phần mềm. Sau đây là 4 khái niệm bạn bắt buộc phải biết để hiểu về lập trình hướng đối tượng. Mục lục1. Class (Lớp)2. Objects (Đối tượng)3. Attributes (Thuộc tính)4. Methods (Phương thức) 1. […]
Bài tập lập trình hướng đối tượng cơ bản, nâng cao

Bài tập lập trình hướng đối tượng cơ bản, nâng cao

Để nâng cao kỹ năng Lập trình hướng đối tượng – Object-Oriented Programming (OOP), bạn cần liên tục rèn luyện, thực hành. Trong bài viết hôm nay, Got It sẽ chia sẻ tới bạn các bài tập lập trình hướng đối tượng. Các bài tập này sẽ giúp bạn ôn lập trình hướng đối tượng […]
Inversion of control là gì? Tìm hiểu Dependency Inversion

Inversion of control là gì? Tìm hiểu Dependency Inversion

Các khái niệm như Dependency Injection, Dependency Inversion hay Inversion of Control là gì đều là những câu hỏi khó kể cả với những kỹ sư kỳ cựu. Nhiều bạn dù đã đi làm vài năm nhưng vẫn chưa thực sự hiểu rõ về các khái niệm này mà chỉ biết sử dụng chúng trong […]
Bộ 7 câu hỏi phỏng vấn lập trình hướng đối tượng

Bộ 7 câu hỏi phỏng vấn lập trình hướng đối tượng

Với nền kinh tế hiện đại ngày nay, lập trình viên đang là một nghề được nhiều doanh nghiệp săn đón. Bộ câu hỏi phỏng vấn lập trình hướng đối tượng được chia sẻ sau đây sẽ hỗ trợ bạn nắm bắt cơ hội nghề nghiệp. Cùng Got It tìm hiểu nhé. Mục lục1. Lập […]