ความผูกพัน (coupling) หมายถึงการที่โปรแกรมหนึ่งขึ้นอยู่กับโปรแกรมอื่นมากขนาดไหน โดยดูจากการเปลี่ยนแปลงในโปรแกรมหนึ่งที่จะทำให้ต้องมีการเปลี่ยนแปลงในอีกโปรแกรมหนึ่ง ความผูกพันทำให้การปรับปรุง บำรุงรักษา หรือการนำมาใช้ใหม่ทำได้ลำบาก เพราะการแก้ไขโปรแกรมหนึ่งอาจจะส่งผลให้เกิดข้อผิดพลาดในโปรแกรมอื่น และเมื่อแก้ปัญหาที่พบก็อาจจะทำให้เกิดปัญหาที่โปรแกรมอื่นๆที่ผูกพันกันต่อๆไป ยิ่งมีโปรแกรมที่ผูกพันกันเป็นสิบเป็นร้อยตัวยิ่งทำให้เกิดปัญหามาก หรือถ้าเราต้องการนำโปรแกรมกลับมาใช้ใหม่ เมื่อเราศีกษาโปรแกรมแล้วพบว่าต้องไปดูที่โปรแกรมอื่นๆอีกจำนวนมากและต้องนำมาใช้ทั้งหมดการนำกลับมาใช้ใหม่ก็เกิดขึ้นได้ยาก ดังนั้นในการพัฒนาโปรแกรมเราต้องลดการผูกพันระหว่างโปรแกรมให้เหลือน้อยที่สุด เพื่อช่วยให้มีความยืดหยุ่นมากขึ้น บำรุงรักษาง่ายขึ้น และลดความเสี่ยงของข้อผิดพลาดหรือจุดบกพร่อง การไม่ผูกพันหรือผูกพันแบบหลวมๆจะช่วยให้สามารถพัฒนาและแก้ไขส่วนประกอบได้อย่างอิสระ ทำให้โปรแกรมเป็นโมดูลมากขึ้นและปรับขนาดได้ง่ายขึ้น
ความผูกพันสามารถแบ่งได้หลายชนิด เช่น (1) Tight coupling : เกิดขึ้นเมื่อโปรแกรมตั้งแต่ 2 โปรแกรมขึ้นไปต้องพึ่งพาซึ่งกันและกันอย่างมาก หากมีการเปลี่ยนแปลงกับโปรแกรมหนึ่ง อาจส่งผลต่อลักษณะการทำงานของโปรแกรมอื่นๆ ทำให้ยากต่อการแก้ไขหรือบำรุงรักษาระบบ (2) Loose coupling : เกิดขึ้นเมื่อโปรแกรมค่อนข้างเป็นอิสระจากกัน การเปลี่ยนแปลงในโปรแกรมหนึ่งไม่มีผลกระทบอย่างมีนัยสำคัญต่อโปรแกรมอื่นๆ ทำให้ระบบมีความยืดหยุ่นและบำรุงรักษาง่ายกว่า (3) Data coupling : เกิดขึ้นเมื่อโปรแกรมเชื่อมต่อกันโดยใช้ข้อมูลร่วมกันผ่านพารามิเตอร์ ตัวแปร หรือหน่วยความจำที่ใช้ร่วมกัน การเปลี่ยนแปลงโครงสร้างข้อมูลอาจส่งผลกระทบต่อโปรแกรมที่ใช้ข้อมูลร่วมกัน (4) Control coupling : เกิดขึ้นเมื่อโปรแกรมหนึ่งควบคุมพฤติกรรมของโปรแกรมอื่นผ่านพารามิเตอร์หรือแฟล็กควบคุม สิ่งนี้สามารถนำไปสู่การผูกพันที่แข็งแรงและทำให้ระบบมีความยืดหยุ่นน้อยลง (5) Content coupling : เกิดขึ้นเมื่อโปรแกรมขึ้นอยู่กับการทำงานภายในหรือรายละเอียดการใช้งานของโปรแกรมอื่น การเปลี่ยนแปลงการใช้งานโปรแกรมหนึ่งอาจส่งผลต่อลักษณะการทำงานของโปรแกรมอื่นๆ (6) Global coupling : คือสถานการณ์ที่โปรแกรมใช้ตัวแปร ฟังก์ชัน หรือวัตถุ ที่เป็นส่วนกลาง (gloabl) ทำให้สถานะหรือข้อมูลถูกเข้าถึงและแก้ไขได้จากหลายโปรแกรม
ดังนั้นในการออกแบบจะต้องระมัดระวังเรื่องความผูกพันโดยต้องคำนึงถึง ความสะดวกในการใช้งาน (usability) การรองรับการทดสอบ (testability) และการนำกลับมาใช้ใหม่ (reusability)