Gevşek bağlantı esasen modül arasında nasıl gelişebileceğine dolaylı bağımlılıktır.
Genel olarak, sıkı bir şekilde bağlı sistemler olduğunda, farklı modüllerin / nesnelerin, çevresel nesnelerin bu davranışını varsayan çok özel davranışları vardır. Bu tür nesneler diğer modül davranışlarına bağlanır / bağlanır ve tek başlarına veya başka bir bağlamda tekrar kullanılamazlar.
Bireysel işlevsellik sorumlu gelişmeye edemez halde Böyle modüller bağımsız ya da yapamaz evrim geçirmekte
Bir örnek:
Diyelim ki 3 nesneniz
Shape
(bir model nesnesi) ve Canvas
(bir UI öğesi) var. şimdi
Bir yöntemin shape.draw(Canvas)
, tuvalin düzlemi tarafından sağlanan düzlem üzerinde bir nesne çizeceğini varsayın .
Şimdi, bazen pencereler kısmen kaplıdır ve yeniden boyutlandırılır. Bu gibi durumlarda, yukarıdaki yöntem böyle bir şey yapabilir.
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.
}
Temel olarak, burada çizim işlevi, şeylerin çizilmesi gereken dikdörtgeni alır. Bunu anlamak kolaydır (insanlar buna basit diyebilirler ). Bununla birlikte, bu son derece birleştirilmiş koddur.
Durumu hayal edin:
- Tuvalin pencereleri tutma mekanizması artık bir dikdörtgen değilse ne olur?
- Canvas'ın sakladığı özel olan ofsetler varsa ne olur ?
- Başka bir uygulama aynı şekli istiyor ancak artık bir GUI penceresine sahip değilse (örneğin, görüntüler oluşturuyor ve dosyalara kaydediyorsa).
Sorunun kök nedeni nesne olduğunu shape
bilir ve bu nedenle sıkı bir şekilde bağlanmış olan Canvas
.
Yazdığı yere şekil vermek için bir piksel setinin verilmesi istenir; shape
piksel aslında yazılır nerede (hatta örtülü) bilgisine sahip olmamalıdır.