Đóng gói trong Java là gì?
Đóng gói trong Java là một cơ chế để gói các biến (dữ liệu) và các phương thức (mã) lại với nhau thành một đơn vị duy nhất. Nó là quá trình che giấu thông tin chi tiết và bảo vệ dữ liệu và hành vi của đối tượng. Nó là một trong bốn khái niệm OOP quan trọng. Lớp encapsulate rất dễ kiểm tra, vì vậy nó cũng tốt hơn cho kiểm thử đơn vị.
Trong hướng dẫn này, bạn sẽ học-
- Đóng gói trong Java là gì?
- Học cách đóng gói với một ví dụ
- Ẩn dữ liệu trong Java
- Phương thức Getter và Setter trong Java
- Trừu tượng và đóng gói
- Ưu điểm của tính năng đóng gói trong Java
Bấm vào đây nếu video không thể truy cập được
Học cách đóng gói với một ví dụ
Để hiểu chi tiết sự đóng gói là gì, hãy xem xét loại tài khoản ngân hàng sau với tiền gửi và hiển thị các phương pháp số dư
class Account {private int account_number;private int account_balance;public void show Data() {//code to show data}public void deposit(int a) {if (a < 0) {//show error} elseaccount_balance = account_balance + a;}}
Giả sử một tin tặc đã quản lý được quyền truy cập vào mã tài khoản ngân hàng của bạn. Bây giờ, anh ta cố gắng gửi số tiền -100 vào tài khoản của bạn bằng hai cách. Hãy xem phương pháp hoặc cách tiếp cận đầu tiên của anh ấy.
Phương pháp 1: Anh ta cố gắng gửi một số tiền không hợp lệ (giả sử -100) vào tài khoản ngân hàng của bạn bằng cách thao tác với mã.
Bây giờ, câu hỏi là - Điều đó có thể không? Hãy điều tra.
Thông thường, một biến trong một lớp được đặt là "riêng tư" như hình dưới đây. Nó chỉ có thể được truy cập bằng các phương thức được định nghĩa trong lớp. Không có lớp hoặc đối tượng nào khác có thể truy cập chúng.
Nếu một thành viên dữ liệu là riêng tư, điều đó có nghĩa là nó chỉ có thể được truy cập trong cùng một lớp. Không có lớp bên ngoài nào có thể truy cập thành viên hoặc biến dữ liệu riêng của lớp khác.
Vì vậy, trong trường hợp của chúng tôi, hacker không thể gửi số tiền -100 vào tài khoản của bạn.
Cách tiếp cận 2 : Cách tiếp cận đầu tiên của hacker không gửi được số tiền. Tiếp theo, anh ta cố gắng gửi một số tiền -100 bằng cách sử dụng phương thức "ký gửi".
Nhưng việc triển khai phương pháp có kiểm tra các giá trị âm. Vì vậy, cách tiếp cận thứ hai cũng không thành công.
Do đó, bạn không bao giờ để lộ dữ liệu của mình cho bên ngoài. Điều này làm cho ứng dụng của bạn an toàn.
Toàn bộ mã có thể được coi là một viên nang và bạn chỉ có thể giao tiếp thông qua các tin nhắn. Do đó có tên là sự đóng gói.
Ẩn dữ liệu trong Java
Ẩn dữ liệu trong Java là ẩn các biến của một lớp khỏi các lớp khác. Nó chỉ có thể được truy cập thông qua phương thức của lớp hiện tại của chúng. Nó ẩn các chi tiết triển khai với người dùng. Nhưng hơn cả việc ẩn dữ liệu, nó có nghĩa là để quản lý tốt hơn hoặc nhóm các dữ liệu liên quan.
Để đạt được mức độ đóng gói thấp hơn trong Java, bạn có thể sử dụng các từ bổ nghĩa như "protected" hoặc "public". Với tính năng đóng gói, các nhà phát triển có thể thay đổi một phần của mã một cách dễ dàng mà không ảnh hưởng đến phần khác.
Getter và Setter trong Java
Getter và Setter trong Java là hai phương thức thông thường được sử dụng để truy xuất và cập nhật các giá trị của một biến. Chúng chủ yếu được sử dụng để tạo, sửa đổi, xóa và xem các giá trị biến. Phương thức setter được sử dụng để cập nhật các giá trị và phương thức getter được sử dụng để đọc hoặc truy xuất các giá trị. Chúng còn được biết đến như một kẻ truy cập và đột biến.
Đoạn mã sau là một ví dụ về các phương thức getter và setter:
class Account{private int account_number;private int account_balance;// getter methodpublic int getBalance() {return this.account_balance;}// setter methodpublic void setNumber(int num) {this.account_number = num;}}
Trong ví dụ trên, phương thức getBalance () là phương thức getter đọc giá trị của biến account_balance và phương thức setNumber () là phương thức setter đặt hoặc cập nhật giá trị cho biến account_number.
Trừu tượng và đóng gói
Thông thường, sự đóng gói bị hiểu nhầm với sự trừu tượng hóa (Abstraction). Hãy nghiên cứu-
- Tính năng đóng gói thiên về "Cách" đạt được một chức năng
- Tóm tắt là nhiều hơn về "Những gì" một lớp có thể làm.
Một ví dụ đơn giản để hiểu sự khác biệt này là điện thoại di động. Nơi logic phức tạp trong bảng mạch được gói gọn trong một màn hình cảm ứng và giao diện được cung cấp để tóm tắt nó ra.
Ưu điểm của tính năng đóng gói trong Java
- Đóng gói là liên kết dữ liệu với các chức năng liên quan của nó. Ở đây chức năng có nghĩa là "phương pháp" và dữ liệu có nghĩa là "biến"
- Vì vậy, chúng tôi giữ biến và các phương thức ở một nơi. Nơi đó là "lớp học." Lớp là cơ sở để đóng gói.
- Với Java Encapsulation, bạn có thể ẩn (hạn chế quyền truy cập) đối với các thành viên dữ liệu quan trọng trong mã của bạn, điều này giúp cải thiện bảo mật
- Như chúng ta đã thảo luận trước đó, nếu một thành viên dữ liệu được khai báo là "riêng tư", thì nó chỉ có thể được truy cập trong cùng một lớp. Không có lớp bên ngoài nào có thể truy cập thành viên dữ liệu (biến) của lớp khác.
- Tuy nhiên, nếu bạn cần truy cập các biến này, bạn phải sử dụng phương thức "getter" và "setter" công khai .