Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa khớp nối chặt và khớp nối lỏng lẻo trong Java là gì?

Khớp nối chặt chẽ có nghĩa là các lớp và các đối tượng phụ thuộc vào nhau. Nói chung, khớp nối chặt thường không tốt vì nó làm giảm tính linh hoạt và khả năng tái sử dụng của mã trong khi Khớp nối lỏng lẻo nghĩa là giảm sự phụ thuộc của một lớp sử dụng trực tiếp lớp khác.

Khớp nối chặt chẽ

  • Đối tượng được kết hợp chặt chẽ là một đối tượng cần biết về các đối tượng khác và thường phụ thuộc nhiều vào các giao diện của nhau.
  • Thay đổi một đối tượng trong ứng dụng được kết hợp chặt chẽ thường yêu cầu thay đổi một số đối tượng khác.
  • Trong các ứng dụng nhỏ, chúng tôi có thể dễ dàng xác định các thay đổi và ít có cơ hội bỏ sót bất kỳ điều gì. Nhưng trong các ứng dụng lớn, không phải lập trình viên nào cũng biết được những mối quan hệ phụ thuộc lẫn nhau này và có khả năng bị bỏ sót những thay đổi.

Ví dụ

class A {
   public int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.a = 100; // Not suppose to happen as defined by class A, this causes tight coupling.
      System.out.println("aObject.a value is: " + aObject.a);
   }
}

Trong ví dụ trên, mã được xác định bởi kiểu triển khai này sử dụng kết hợp chặt chẽ và rất tệ vì lớp B biết về chi tiết của lớp A, nếu lớp A thay đổi biến 'a' thành private thì lớp B cũng ngắt. Việc triển khai của lớp A nói rằng biến 'a' không được lớn hơn 10 nhưng như chúng ta có thể thấy không có cách nào để thực thi một quy tắc như vậy vì chúng ta có thể truy cập trực tiếp vào biến và thay đổi trạng thái của nó thành bất kỳ giá trị nào mà chúng ta quyết định.

Đầu ra

aObject.a value is: 100

Khớp nối lỏng

  • Khớp nối lỏng lẻo là mục tiêu thiết kế nhằm giảm sự phụ thuộc lẫn nhau giữa các thành phần của hệ thống với mục tiêu giảm rủi ro khi những thay đổi trong một thành phần sẽ yêu cầu những thay đổi trong bất kỳ thành phần nào khác.
  • Khớp nối lỏng lẻo là một khái niệm chung chung hơn nhằm mục đích tăng tính linh hoạt của hệ thống, làm cho nó dễ bảo trì hơn và làm cho toàn bộ khung hoạt động ổn định hơn.

Ví dụ

class A {
   private int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.setA(100); // No way to set 'a' to such value as this method call will
                         // fail due to its enforced rule.
      System.out.println("aObject value is: " + aObject.getA());
   }
}

Trong ví dụ trên, mã được xác định bởi kiểu triển khai này sử dụng khớp nối lỏng và được khuyến nghị vì lớp B phải đi qua lớp A để có được trạng thái của nó nơi các quy tắc được thực thi. Nếu lớp A được thay đổi trong nội bộ, lớp B sẽ không bị phá vỡ vì nó chỉ sử dụng lớp A như một cách giao tiếp.

Đầu ra

Giá trị
getA() method
aObject value is: 0