Friday, March 13, 2020

Java hướng đối tượng: Tính đóng gói (Encapsulation) trong Java

Trong lập trình hướng đối tượng, chúng ta có 4 tính chất chính đó là tính đóng gói (Encapsulation), tính kế thừa (Inheritance), tính đa hình (Polymorphism)tính trừu tượng (Abstraction). Trong bài này, tôi sẽ giới thiệu đến các bạn tính chất cơ bản đầu tiên  đó là tính đóng gói (Encapsulation) trong Java và cách vận dụng tính chất này trong lập trình.

1. Khái niệm tính đóng gói

Đóng gói là một trong bốn khái niệm OOP cơ bản. Ba cái còn lại là sự kế thừa, đa hình và trừu tượng.
Đóng gói trong Java là một cơ chế bao bọc dữ liệu (biến) và mã tác động lên dữ liệu (phương thức) với nhau như một đơn vị. Trong đóng gói, các biến của một lớp sẽ bị ẩn khỏi các lớp khác và chỉ có thể được truy cập thông qua các phương thức của lớp hiện tại của chúng. Do đó, nó còn được gọi là ẩn dữ liệu.
Tính đóng gói (Encapsulation) trong Java

Điều kiện để thể hiện tính đóng gói trong Java 

  • Khai báo các biến của một lớp là riêng tư.
  • Cung cấp các phương thức setter và getter công khai để sửa đổi và xem các giá trị biến.

Tính đóng gói có những đặc điểm như sau:
Tạo ra cơ chế để ngăn ngừa việc gọi phương thức của lớp này tác động hay truy xuất dữ liệu của đối tượng thuộc về lớp khác.
Dữ liệu riêng (khi được khai báo là private) của mỗi đối tượng được bảo vệ khỏi sự truy xuất không hợp lệ từ bên ngoài.
Người lập trình có thể dựa vào cơ chế này để ngăn ngừa việc gán giá trị không hợp lệ vào thành phần dữ liệu của mỗi đối tượng.
Cho phép thay đổi cấu trúc bên trong của một lớp mà không làm ảnh hưởng đến những lớp bên ngoài có sử dụng lớp đó.
Ví dụ sau đây thể hiện tính đóng gói:
EncapTest.java
public class EncapTest {
   private String name;
   private String idNum;
   private int age;
   public int getAge() {
      return age;
   }
   public String getName() {
      return name;
   }
   public String getIdNum() {
      return idNum;
   }
   public void setAge( int newAge) {
      age = newAge;
   }
   public void setName(String newName) {
      name = newName;
   }
   public void setIdNum( String newId) {
      idNum = newId;
   }
}
RunEncap.java
public class RunEncap {
   public static void main(String args[]) {
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");
      System.out.print("Name : " + encap.getName() + " Age : " + encap.getAge());
   }
}
Kết quả:
Name : James Age : 20
Lợi ích của đóng gói
Các trường của một lớp có thể được thực hiện chỉ đọc hoặc chỉ viết.
Một lớp có thể có toàn quyền kiểm soát những gì được lưu trữ trong các trường của nó.

No comments:

Post a Comment