Đóng gói dữ liệu trong Java là một cơ chế gộp các dữ liệu (biến) và đoạn mã thao tác với dữ liệu (phương thức) lại với nhau trong một đơn vị duy nhất. Trong bài viết này, ta sẽ cùng tìm hiểu về cách đóng gói và ẩn dữ liệu trong Java cùng với sự trợ giúp của các ví dụ dẫn chứng.
Đóng gói dữ liệu
Đóng gói là một trong những tính năng chính của lập trình hướng đối tượng. Đóng gói đề cập đến việc đóng gói các trường và phương thức bên trong một lớp. Nó ngăn các lớp bên ngoài truy cập và thay đổi các trường và phương thức của một lớp. Điều này cũng giúp cho việc ẩn dữ liệu.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class sinh_vien { int ID_sv; sinh_vien(int a) { this.ID_sv = a; } public void in_thong_tin() { System.out.println(ID_sv); } } class Main { public static void main(String[] args) { sinh_vien sv = new sinh_vien(14); sv.in_thong_tin(); } } |
Kết quả:
1 |
14 |
Trong ví dụ trên, chúng ta đã tạo một lớp có tên là sinh_vien. Mục đích chính của lớp này là để lưu trữ thông tin của sinh viên. Để lưu trữ thông tin bao gồm trường ID_sv là ID của sinh viên và phương thức in ra thông tin của sinh viên, chúng ta gộp các trường và phương thức này vào trong một lớp duy nhất.
Tại đây, các trường và phương thức cũng có thể được truy cập từ các lớp khác. Do đó, đây không phải là ẩn dữ liệu. Đây là đóng gói dữ liệu trong Java.
Chú ý: Mọi người thường coi đóng gói là ẩn dữ liệu, nhưng điều đó không hoàn toàn đúng. Đóng gói đề cập đến việc đóng gói các trường và phương thức liên quan lại với nhau. Điều này có thể được sử dụng để đạt được việc che giấu hay ẩn dữ liệu. Bản thân việc đóng gói không phải là ẩn dữ liệu.
Tại sao cần đóng gói?
- Trong Java, tính năng đóng gói giúp chúng ta lưu giữ các trường và phương thức liên quan lại với nhau, điều này làm cho đoạn mã của chúng ta rõ ràng hơn và dễ đọc.
- Nó giúp kiểm soát các giá trị của các trường dữ liệu.
- Nó giúp tách riêng các thành phần của một hệ thống. Ví dụ, chúng ta có thể đóng gói một đoạn mã thành nhiều gói khác nhau. Các thành phần tách rời này có thể được phát triển, thử nghiệm và gỡ lỗi một cách độc lập. Bất kỳ thay đổi nào trong một thành phần cụ thể không có bất kỳ ảnh hưởng nào đến các thành phần khác.
- Chúng ta cũng có thể ẩn dữ liệu bằng cách sử dụng tính năng đóng gói. Trong ví dụ trên, nếu chúng ta thay đổi biến ID_sv thành private, thì quyền truy cập vào các trường này sẽ bị giới hạn. Và, chúng được che giấu khỏi các lớp bên ngoài. Đây được gọi là ẩn hay che giấu dữ liệu.
Ẩn dữ liệu
Ẩn dữ liệu là một cách hạn chế quyền truy cập của các thành viên dữ liệu bằng cách ẩn các chi tiết triển khai. Chúng ta có thể sử dụng chỉ định quyền truy cập để ẩn dữ liệu.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class sinh_vien { private int ID_sv; sinh_vien(int a) { this.ID_sv = a; } public void in_thong_tin() { System.out.println(ID_sv); } } class Main { public static void main(String[] args) { sinh_vien sv = new sinh_vien(14); sv.in_thong_tin(); } } |
Trong ví dụ trên, chúng ta khai báo trường ID_sv là private. Vì nó là riêng tư, nên nó sẽ không thể được truy cập từ bên ngoài lớp sinh_vien. Để truy cập trường này, chúng ta đã sử dụng phương thức công khai là in_thong_tin(). Đây được gọi là ẩn hoặc che giấu dữ liệu. Nếu chúng ta cố gắng truy cập trường ID_sv từ lớp Main, trình biên dịch sẽ thông báo lỗi.
Trên đây là khái niệm và ví dụ cơ bản về đóng gói dữ liệu trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!