Longgar kopling pada dasarnya adalah ketergantungan tidak langsung antara modul tentang bagaimana mereka dapat berkembang.
Secara umum, ketika ada sistem yang tergabung erat modul / objek yang berbeda memiliki perilaku yang sangat spesifik yang mengasumsikan perilaku objek periferal. Objek tersebut dihubungkan / digabungkan ke perilaku modul lainnya dan tidak dapat digunakan kembali secara terpisah atau dalam konteks lainnya.
Modul semacam itu walaupun bertanggung jawab atas fungsi individu tidak dapat berkembang secara independen atau tidak dapat berkembang
Sebuah contoh:
Katakanlah Anda memiliki 3 objek
Shape(objek model) dan Canvas(elemen UI). Sekarang
Asumsikan bahwa suatu metode shape.draw(Canvas)akan menggambar objek pada bidang yang disuplai oleh bidang kanvas.
Sekarang, terkadang jendela sebagian tertutup dan diubah ukurannya. Dalam kasus seperti itu, metode di atas mungkin hanya melakukan sesuatu seperti ini.
shape::draw(Canvas) {
Rect.WindowLeft = Canvas.GetWindowRect.getLeftOffset();
Rect.LeftPixel = Canvas.GetWindowRect.pixels() + Rect.WindowLeft;
.... // like this get all co-ordinates.
draw_instance(Rect); // This will draw the actual shape.
}
Pada dasarnya, di sini fungsi draw mengambil persegi panjang di mana hal-hal perlu digambar. Ini mudah dimengerti (orang mungkin menyebut ini sederhana ) kode. Namun, ini adalah kode yang sangat digabungkan.
Bayangkan situasinya:
- Bagaimana jika mekanisme kanvas menahan jendela tidak lagi berbentuk persegi panjang?
- bagaimana jika ada offset tambahan yang disimpan Canvas yang bersifat pribadi ?
- Bagaimana jika beberapa aplikasi lain menginginkan bentuk yang sama tetapi tidak lagi memiliki jendela GUI (misalnya, ia membuat gambar dan menyimpan dalam file).
Akar penyebab masalah adalah bahwa objek shape tahu dan karenanya erat dengan Canvas.
Apa yang diinginkan bahwa satu set piksel diberikan untuk membentuk di mana ia menulis; yang shapeseharusnya tidak (bahkan implisit) pengetahuan tentang di mana pixel benar-benar ditulis.