'Kuplaj' bir yazılım sistemindeki iki varlık (genellikle sınıflar) arasındaki ilişkiyi tanımlayan bir terimdir.
Bir sınıf başka bir sınıf kullandığında veya onunla iletişim kurduğunda, bu diğer sınıfa 'bağımlı' olduğu ve bu sınıfların 'birleştirildiği' söylenir. Bunlardan en az biri diğerini 'biliyor'.
Fikir şu ki, sistemlerimizdeki sınıflar arasındaki bağlantıyı mümkün olduğunca 'gevşek' tutmaya çalışmalıyız: dolayısıyla 'gevşek bağlantı' veya bazen 'ayırma' (İngilizce'de 'ayırma', 'hiç bağlantı yok' anlamına gelse de, insanlar genellikle varlıklar arasında 'gevşek bağlantı' anlamına gelir).
Peki: uygulamada güçlü bağlamaya karşı gevşek bağlantı nedir ve varlıkları neden gevşek bağlı yapalım?
Birleştirme, bir varlık ile diğer bir varlık arasındaki bağımlılık derecesini tanımlar. Genellikle sınıflar veya nesneler.
ClassA büyük ölçüde ClassB'ye bağlı olduğunda, ClassB değiştirildiğinde ClassA'nın etkilenme şansı yüksektir. Bu güçlü bir bağlantıdır.
Bununla birlikte, ClassA hafifçe ClassB'ye bağlıysa, ClassA'nın ClassB kodundaki bir değişiklikten herhangi bir şekilde etkilenme şansı düşüktür. Bu gevşek bir bağlanma ya da 'ayrıştırılmış' bir ilişkidir.
Gevşek bağlantı iyidir, çünkü sistemimizin bileşenlerinin büyük ölçüde birbirine bağlı olmasını istemiyoruz. Bir parçayı diğerini etkilemeden güvenle değiştirebileceğimiz sistemimizi modüler tutmak istiyoruz .
İki parça gevşek bir şekilde bağlandığında, birbirlerinden daha bağımsızdırlar ve diğer değiştiğinde kırılma olasılığı daha düşüktür.
Örneğin, bir araba inşa ederken, motordaki dahili bir değişikliğin direksiyon simidindeki bir şeyi kırmasını istemezsiniz.
Bir araba inşa ederken bu asla kazara olmazken, programcılara her zaman benzer şeyler olur. Gevşek bağlantı, bu tür şeylerin meydana gelme riskini azaltmak içindir.
Güçlü birleşme genellikle A işletmesinin B işletmesi hakkında çok fazla bilgi sahibi olması durumunda ortaya çıkar. A işletmesi, B işletmesinin nasıl çalıştığı veya nasıl inşa edildiği hakkında çok fazla varsayım yaparsa, B işletmesindeki bir değişikliğin A işletmesini etkileme riski yüksektir. This çünkü B varlığıyla ilgili varsayımlarından biri artık yanlış.
Örneğin, bir sürücü olarak, aracınızın motorunun nasıl çalıştığı hakkında bazı varsayımlar yapacağınızı düşünün.
Farklı çalışan bir motora sahip yeni bir araba satın aldığınız gün (veya bir nedenle motorunuzun değiştirilmesi), önceki varsayımlarınız yanlış olur. Bir bilgisayarda kod olsaydınız, artık düzgün çalışmayan yanlış kod olurdu.
Bununla birlikte, bir sürücü olarak otomobiller hakkında yaptığınız tüm varsayımlar şuysa: A- direksiyonları ve B- fren ve gaz pedalları var, arabadaki değişiklikler sizi birkaç varsayımınız olduğu sürece etkilemez doğru kal. Bu gevşek bağlantıdır.
Gevşek kuplaj elde etmek için önemli bir teknik Kapsülleme'dir.Buradaki fikir, bir sınıfın diğer ayrıntılardan gelen iç ayrıntılarını gizlemesi ve diğer sınıfların kendisiyle iletişim kurması için kesin olarak tanımlanmış bir arabirim sunmasıdır.
Bir sınıf Araba tanımlayan olsaydı Yani, örneğin, bu arayüzü (kamu yöntemleri) muhtemelen olacaktır drive()
, stop()
, steerLeft()
, steerRight()
,getSpeed()
. Bunlar, diğer nesnelerin Araba nesnelerinde çağırabileceği yöntemlerdir.
Araba sınıfının diğer tüm ayrıntıları: motorun nasıl çalıştığı, kullandığı yakıt türü, vb. Diğer sınıflardan gizlenir - Araba hakkında çok fazla şey bilmelerini önlemek için.
A sınıfı B sınıfı hakkında çok şey biliyor: A sınıfı B sınıfına çok bağımlı ve B sınıfındaki bir değişikliğin A sınıfını etkilemesi muhtemel, güçlü bir şekilde birleşmiş bir ilişkimiz var .
İki varlık arasındaki, birbirleri hakkında çok az şey bildikleri bir ilişki (sadece gerekli olan) - gevşek bir şekilde bağlanmış veya ayrıştırılmış bir ilişkidir.