Bạn đang xem: Encapsulation là gì
Ví dụ về Đóng gói (Encapsulation) trong Java OOP
Trong bài học này bạn sẽ được học:Đóng gói trong Java là gì?Ví dụ về Đóng gói trong JavaẨn dữ liệu trong JavaCác phương thức Getter và Setter trong JavaTrừu tượng so với Đóng góiƯu điểm của đóng gói trong Java
Đóng gói là một nguyên tắc đóng gói dữ liệu (biến) và mã với nhau dưới dạng một đơn vị. Đây là một trong bốn khái niệm OOP. Ba cái còn lại là Kế thừa, Đa hình và Trừu tượng.
Cách học nhanh nhất là học qua ví dụ thực tế. Và để hiểu chi tiết đóng gói là gì, mình sẽ thử hack tài khoản ngân hàng:Trước tiên, tài khoản ngân hàng đơn giản được mô phỏng bằng class Account sau với phương thức tiền gửi và hiển thị 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
Giả sử mình định Hack tài khoản ngân hàng này, mình sẽ cố gắng để có quyền truy cập vào mã tài khoản ngân hàng.Bây giờ, mình thử cố gắng trừ 100 đồng ở tài khoản này bằng hai cách. Hãy cùng xem cách làm này như thế nào nhé:Cách tiếp cận 1: Mình cố gắng thực hiện một lệnh không hợp lệ(giả sử -100 đồng) vào tài khoản ngân hàng này bằng cách thao túng code như sau:
Bây giờ, câu hỏi là – Cách này có thể thành công không? Hãy thử kiểm tra xem:Thông thường, một biến trong một lớp được đặt là ‘private’ như hình bên dưới. Nó chỉ có thể được truy cập với các phương thức được định nghĩa trong class đó. Không có class hoặc đối tượng nào khác có thể truy cập vào chúng.
Ví dụ về Encapsulation trong Java OOP: Chức năng của private
Nếu một data member là private, điều đó có nghĩa là nó chỉ có thể được truy cập trong cùng một class. Không có class bên ngoài có thể truy cập private data member hoặc biến của class khác.Vì vậy, trong trường hợp giả định này, mình không thể trừ -100 đồng ở tài khoản của ngân hàng này.
Xem thêm: Hình Thức Là Gì – Các Phương Pháp Hình Thức
Cách thứ2: Cách tiếp cận đầu tiên của mình nhằm cố gắng trừ tiền nhưng không thể, thế nên tiếp theo, mình sẽthửtrừ 100 đồng bằng cách sử dụng phương thức ‘deposit’.
Nhưng trong class Account ban đầu có kiểm tra các giá trị âm. Vì vậy, cách thứ hai cũng lại thất bại.
Ví dụ về Encapsulation trong Java OOP: Kiểm tra giá trị âm
Do đó, tài khoản ngân hàng này không bị lộ dữ liệu của nó ra bên ngoài. Chính vì thế, điều này làm cho tài khoản ngân hàng này trở nên an toàn.
Xem thêm: Mỗi Ngày Một Cụm Từ: Học Cách Dùng No Sweat Là Gì
Ví dụ về Encapsulation trong Java OOP: Ứng dụng an toàn nhờ Đóng gói
Toàn bộ mã có thể được coi là một viên nang (là kiểu dạng thuốc viên nang đó) và bạn chỉ có thể giao tiếp qua các tin nhắn. Chính vì thế nó có tên là Đóng gói (Encapsulation).
Thông thường, Java Encapsulation được gọi là ẩn dữ liệu (data hiding). Nhưng hơn cả việc ẩn dữ liệu, khái niệm Encapsulation có nghĩa là để quản lý tốt hơn hoặc nhóm các dữ liệu liên quan lại với nhau.Để giảm mức độ đóng gói trong Java, bạn có thể sử dụng ‘protected‘ hoặc ‘public‘.Thêm nữa, với việc đóng gói, các lập trình viên Java có thể dễ dàng thay đổi một phần của mã mà không ảnh hưởng đến phần khác.
Nếu một data member được khai báo là ‘private’, thì nó chỉ có thể được truy cập trong cùng một class. Không có class bên ngoài nào có thể truy cập data member của class đó.Nếu bạn cần truy cập các biến này, bạn phải sử dụng các phương thức public ‘getter’ và ‘setter’.Các phương thức của Getter và Setter được sử dụng để tạo, sửa đổi, xóa và xem các giá trị biến.
Ví dụ về phương thức Getter và Setter trong lập trình Java:
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_balancePhương thức setNumber () là phương thức setter đặt hoặc cập nhật giá trị cho biến account_number
Thông thường, Đóng gói hay bị hiểu nhầm với Trừu tượng.Encapsulation nói về ‘Làm thế nào’ để làm được chức năng đóTrừu tượng thì là ‘Cái gì’ mà một class 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.Trong đó, logic phức tạp bên trong bảng mạch được gói gọn trong màn hình cảm ứng và giao diện được cung cấp để trừu tượng hóa nó ra cho người dùng.
Chuyên mục: Hỏi Đáp