'Coupling' เป็นคำที่อธิบายถึงความสัมพันธ์ระหว่างสองเอนทิตี้ในระบบซอฟต์แวร์
เมื่อคลาสใช้คลาสอื่นหรือสื่อสารกับมันคลาสนั้นจะพูดว่า 'พึ่งพา' กับคลาสอื่นนั้นดังนั้นคลาสเหล่านี้จึงเป็น 'คู่' อย่างน้อยหนึ่งคนก็รู้เกี่ยวกับอีกคนหนึ่ง
แนวคิดก็คือเราควรพยายามรักษาความสัมพันธ์ระหว่างชั้นเรียนในระบบของเราว่า 'หลวม' ที่สุดเท่าที่จะเป็นไปได้: ดังนั้น 'ข้อต่อหลวม ๆ ' หรือบางครั้ง 'decoupling' (แม้ว่าในภาษาอังกฤษ 'decoupling' จะหมายถึง มักใช้เพื่อบ่งบอกถึง 'การมีเพศสัมพันธ์ที่หลวม' ระหว่างเอนทิตี)
ดังนั้น: อะไรคือข้อต่อหลวมเมื่อเทียบกับข้อต่อที่แข็งแรงในทางปฏิบัติและทำไมเราต้องสร้างเอนทิตีแบบคู่อย่างหลวม ๆ
การมีเพศสัมพันธ์อธิบายระดับของการพึ่งพาระหว่างหน่วยงานหนึ่งไปยังหน่วยงานอื่น บ่อยครั้งที่คลาสหรือวัตถุ
เมื่อ ClassA ขึ้นอยู่กับ ClassB อย่างหนักโอกาสของ ClassA ที่จะได้รับผลกระทบเมื่อ ClassB นั้นเปลี่ยนไปสูง นี่คือการแต่งงานที่แข็งแรง
อย่างไรก็ตามหาก ClassA ขึ้นอยู่กับ ClassB เบากว่าโอกาสที่ ClassA จะได้รับผลกระทบในทางใดทางหนึ่งโดยการเปลี่ยนรหัสของ ClassB นั้นต่ำ นี่คือคลัปหลวมหรือความสัมพันธ์ 'แยกคู่'
การมีเพศสัมพันธ์ที่หลวมนั้นดีเพราะเราไม่ต้องการให้ส่วนประกอบของระบบของเราพึ่งพากันมาก เราต้องการรักษาระบบของเราแบบแยกส่วนที่เราสามารถเปลี่ยนส่วนหนึ่งได้อย่างปลอดภัยโดยไม่กระทบต่อส่วนอื่น ๆ
เมื่อทั้งสองส่วนเข้าด้วยกันอย่างหลวม ๆ พวกเขาจะเป็นอิสระจากกันและกันและมีโอกาสน้อยที่จะแตกหักเมื่อการเปลี่ยนแปลงอื่น ๆ
ตัวอย่างเช่นเมื่อสร้างรถยนต์คุณไม่ต้องการให้มีการเปลี่ยนแปลงภายในของเครื่องยนต์เพื่อทำลายบางสิ่งในพวงมาลัย
แม้ว่าสิ่งนี้จะไม่เกิดขึ้นโดยบังเอิญเมื่อสร้างรถยนต์สิ่งที่คล้ายกันเกิดขึ้นกับโปรแกรมเมอร์ตลอดเวลา การมีเพศสัมพันธ์แบบหลวมหมายถึงการลดความเสี่ยงของสิ่งต่าง ๆ ที่จะเกิดขึ้น
การมีเพศสัมพันธ์ที่แข็งแกร่งมักจะเกิดขึ้นเมื่อนิติบุคคลรู้มากเกินไปเกี่ยวกับนิติบุคคล B. หาก บริษัท ที่ทำให้สมมติฐานมากเกินไปเกี่ยวกับวิธีการดำเนินกิจการที่ B หรือวิธีการที่มันถูกสร้างขึ้นกว่าที่มีความเสี่ยงสูงที่มีการเปลี่ยนแปลงในกิจการ B จะมีผลต่อนิติบุคคล A.นี้ เป็นเพราะสมมติฐานข้อหนึ่งเกี่ยวกับเอนทิตี B ไม่ถูกต้อง
ตัวอย่างเช่นลองจินตนาการว่าในฐานะคนขับคุณจะต้องตั้งสมมติฐานว่าเครื่องยนต์ของรถคุณทำงานอย่างไร
วันที่คุณซื้อรถใหม่ที่มีเครื่องยนต์ที่ใช้งานได้แตกต่างกัน (หรือด้วยเหตุผลบางประการที่เครื่องยนต์ของคุณถูกแทนที่) สมมติฐานก่อนหน้านี้ของคุณจะไม่ถูกต้อง หากคุณเป็นรหัสในคอมพิวเตอร์ตอนนี้คุณจะเป็นรหัสที่ไม่ถูกต้องที่ทำงานไม่ถูกต้อง
อย่างไรก็ตามหากสมมติฐานทั้งหมดที่คุณทำกับคนขับคือ: A- พวกเขามีพวงมาลัยและ B- พวกเขามีเบรคและคันเร่งกว่าการเปลี่ยนแปลงในรถจะไม่ส่งผลกระทบต่อคุณตราบใดที่สมมติฐานของคุณไม่กี่คน อยู่ที่ถูกต้อง นี่คือคลัปหลวม
เทคนิคสำคัญในการมีเพศสัมพันธ์แบบหลวมคือ Encapsulation แนวคิดคือคลาสจะซ่อนรายละเอียดภายในจากคลาสอื่นและเสนออินเทอร์เฟซที่กำหนดไว้อย่างเข้มงวดเพื่อให้คลาสอื่น ๆ สามารถสื่อสารกับคลาสได้
ดังนั้นสำหรับตัวอย่างเช่นถ้าคุณถูกกำหนดรถยนต์ชั้นมันอินเตอร์เฟซ (วิธีการสาธารณะ) อาจจะเป็นdrive()
, stop()
, steerLeft()
, ,steerRight()
getSpeed()
นี่เป็นวิธีการที่วัตถุอื่นสามารถเรียกใช้บนวัตถุรถยนต์ได้
รายละเอียดอื่น ๆ ทั้งหมดของคลาสรถยนต์: วิธีการทำงานของเครื่องยนต์ชนิดของเชื้อเพลิงที่ใช้ ฯลฯ ถูกซ่อนไว้จากคลาสอื่น - เพื่อป้องกันไม่ให้พวกเขารู้มากเกินไปเกี่ยวกับรถยนต์
ช่วงเวลาที่คลาส A รู้มากเกินไปเกี่ยวกับคลาส B: เรามีความสัมพันธ์ที่แน่นแฟ้นมากขึ้นโดยคลาส A นั้นขึ้นอยู่กับคลาส B มากเกินไปและการเปลี่ยนแปลงในคลาส B น่าจะส่งผลกระทบต่อคลาส A ทำให้ระบบยากที่จะขยายและบำรุงรักษา
ความสัมพันธ์ระหว่างสองหน่วยงานที่พวกเขารู้เพียงเล็กน้อยเกี่ยวกับกันและกัน (เฉพาะสิ่งที่จำเป็น) - เป็นความสัมพันธ์แบบคู่หรือคับ