Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

อะไรคือความแตกต่างระหว่างคับปลิ้งและคลัปหลวมใน Java?


ข้อต่อแน่น หมายถึงคลาสและอ็อบเจ็กต์ขึ้นอยู่กับกันและกัน โดยทั่วไป คัปปลิ้งแบบแน่นมักจะไม่ดีเพราะจะลดความยืดหยุ่นและการนำโค้ดกลับมาใช้ใหม่ในขณะที่คัปปลิ้งหลวม หมายถึงลดการพึ่งพาของคลาสที่ใช้คลาสอื่นโดยตรง

ข้อต่อแน่น

  • วัตถุที่ยึดแน่น เป็นอ็อบเจกต์ที่ต้องการทราบเกี่ยวกับอ็อบเจกต์อื่นๆ และมักจะขึ้นอยู่กับอินเทอร์เฟสของกันและกันมาก
  • เปลี่ยนวัตถุหนึ่งชิ้นใน แอปพลิเคชันที่ยึดแน่น มักจะต้องเปลี่ยนแปลงวัตถุอื่นๆ จำนวนหนึ่ง
  • ในแอปพลิเคชันขนาดเล็ก เราสามารถระบุการเปลี่ยนแปลงได้อย่างง่ายดายและมีโอกาสน้อยที่จะพลาดอะไรไป แต่ในแอปพลิเคชันขนาดใหญ่ โปรแกรมเมอร์ทุกคนอาจไม่ค่อยรู้จักการพึ่งพาอาศัยกันเหล่านี้เสมอไป และมีโอกาสที่จะมองข้ามการเปลี่ยนแปลงได้

ตัวอย่าง

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);
   }
}

ในตัวอย่างข้างต้น โค้ดที่กำหนดโดยการใช้งานประเภทนี้ใช้การมีเพศสัมพันธ์ที่แน่นหนาและแย่มาก เนื่องจากคลาส B รู้เกี่ยวกับรายละเอียดของคลาส A หากคลาส A เปลี่ยนตัวแปร 'a' เป็นไพรเวต คลาส B ก็จะแตกด้วย การใช้งานคลาส A ระบุว่าตัวแปร 'a' ไม่ควรเกิน 10 แต่อย่างที่เราเห็นว่าไม่มีทางบังคับใช้กฎดังกล่าว เนื่องจากเราสามารถไปที่ตัวแปรโดยตรงและเปลี่ยนสถานะของมันเป็นค่าใดก็ตามที่เราตัดสินใจ

ผลลัพธ์

aObject.a value is: 100

ข้อต่อหลวม

  • ข้อต่อหลวม เป็นเป้าหมายการออกแบบเพื่อลดการพึ่งพาซึ่งกันและกันระหว่างส่วนประกอบของระบบโดยมีเป้าหมายเพื่อลดความเสี่ยงที่การเปลี่ยนแปลงในองค์ประกอบหนึ่งจะต้องมีการเปลี่ยนแปลงในองค์ประกอบอื่น ๆ
  • ข้อต่อหลวม เป็นแนวคิดทั่วไปที่มีจุดมุ่งหมายเพื่อเพิ่มความยืดหยุ่นของระบบ ทำให้สามารถบำรุงรักษาได้มากขึ้น และทำให้กรอบงานทั้งหมดมีเสถียรภาพมากขึ้น

ตัวอย่าง

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());
   }
}

ในตัวอย่างข้างต้น โค้ดที่กำหนดโดยการใช้งานประเภทนี้ใช้การมีเพศสัมพันธ์แบบหลวม และแนะนำเนื่องจากคลาส B ต้องผ่านคลาส A เพื่อให้ได้สถานะที่มีการบังคับใช้กฎ หากมีการเปลี่ยนแปลงคลาส A ภายใน คลาส B จะไม่แตกเนื่องจากใช้เพียงคลาส A เป็นวิธีการสื่อสาร

ผลลัพธ์

getA() method
aObject value is: 0