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