Đóng gói Java

Trong hướng dẫn này, bạn sẽ tìm hiểu về cách đóng gói và ẩn dữ liệu trong Java với sự trợ giúp của các ví dụ.

Đóng gói Java

Đó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 duy nhất.

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 đạt được việc ẩn dữ liệu .

Ví dụ 1: Đóng gói Java

 class Area ( // fields to calculate area int length; int breadth; // constructor to initialize values Area(int length, int breadth) ( this.length = length; this.breadth = breadth; ) // method to calculate area public void getArea() ( int area = length * breadth; System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )

Đầu ra

 Diện tích: 30

Trong ví dụ trên, chúng ta đã tạo một lớp có tên là Khu vực. Mục đích chính của lớp này là để tính diện tích.

Để tính toán diện tích, chúng ta cần hai biến: chiều dài và chiều rộng và một phương pháp: getArea(). Do đó, chúng tôi 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 chỉ là sự đóng gói . Chúng tôi chỉ giữ các mã tương tự với nhau.

Lưu ý : 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 ẩ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 lại đóng gói?

  • Trong Java, tính đóng gói giúp chúng ta 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 mã của chúng ta sạch 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 của chúng tôi. Ví dụ,
     class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )

    Ở đây, chúng tôi đang tạo biến độ tuổi privatevà áp dụng logic bên trong setAge()phương pháp. Bây giờ, tuổi tác không thể là tiêu cực.
  • Các phương thức getter và setter cung cấp quyền truy cập chỉ đọc hoặc chỉ ghi vào các trường lớp của chúng ta. Ví dụ,
     getName() // provides read-only access setName() // provides write-only access
  • Nó giúp tách các thành phần của một hệ thống. Ví dụ, chúng ta có thể đóng gói mã thành nhiều gói.
    Các thành phần tách rời này (gói) có thể được phát triển, thử nghiệm và gỡ lỗi một cách độc lập và đồng thời. Và, 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 độ dài và độ rộng thành private thì quyền truy cập vào các trường này sẽ bị hạn chế.
    Và, chúng được giữ ẩn khỏi các lớp bên ngoài. Đây được gọi là ẩn 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 của chúng tôi bằng cách ẩn các chi tiết triển khai. Đóng gói cũng cung cấp một cách để ẩn dữ liệu.

Chúng ta có thể sử dụng các công cụ sửa đổi quyền truy cập để ẩn dữ liệu. Ví dụ,

Ví dụ 2: Ẩn dữ liệu bằng cách sử dụng công cụ xác định riêng tư

 class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )

Đầu ra

 Tuổi của tôi là 24

Trong ví dụ trên, chúng ta có privatetuổi trường. Vì nó là private, nó không thể được truy cập từ bên ngoài lớp.

Để truy cập độ tuổi, chúng tôi đã sử dụng publiccác phương pháp: getAge()setAge(). Các phương thức này được gọi là phương thức getter và setter.

Đặt độ tuổi ở chế độ riêng tư cho phép chúng tôi hạn chế truy cập trái phép từ bên ngoài lớp học. Đây là ẩn dữ liệu .

Nếu chúng tôi cố gắng truy cập trường tuổi từ lớp Chính, chúng tôi sẽ gặp lỗi.

 // error: age has private access in Person p1.age = 24;

thú vị bài viết...