24 Kasım 2021 Çarşamba

Tasarım Seviyesinde Eşleşme (Coupling) Nedir

Giriş
Coupling iki bakış açısıyla tanımlanabilir.

1. Mimari Seviye
2. Tasarım Seviye

Bu yazıda daha çok tasarım seviyesi açıklamak amaçlanıyor.

Coupling Nedir?
Açıklaması şöyle
"The degree in which components depend on each other for their proper operation is called coupling. Coupling is achieved primarily by the mechanisms chosen to interact between components. The less coupled a system is, the more cohesive it is."
Bir başka açıklama şöyle
In software engineering, coupling is the degree of interdependence between software modules; a measure of how closely connected two routines or modules are the strength of the relationships between modules.
Bir başka açıklama şöyle
Generally speaking, the ease with which any system can be extended is dependent upon the degree to which its subsystems are tightly or loosely coupled. Usually, the more loosely coupled the subsystems are, the easier it is to modify them as they are isolated & don't necessarily require a complete understanding of the system as a whole
Nesneye Yönelik Tasarım
Nesneye Yönelik Tasarımda High CohesionLow Coupling amacına ulaşılmaya çalışılır.

Modüller Arası Coupling 
Şeklen şöyle


Diğer Coupling Çeşitleri
Bazı coupling çeşitleri şöyle.
No coupling: The modules do not know each other.
Call coupling: A module calls another one.
Data coupling: A module calls another one passing parameters to it.
Stamp coupling: A module calls another one passing complex parameters to it.
Control coupling: A module influences the control flow of another module.
External coupling: The modules communicate using a simple global variable.
Common coupling: The modules communicate using a common global data structure.
Content coupling: A modules depends on the inner working of another module. This is the strongest form of coupling.
Call Coupling 
Bir nesne diğerini çağıracaktır ve bundan kaçış yoktur. Bunu iki şekilde çözebiliriz
1. A nesneyi B nesnesine üye alan (field, member) olarak verilir.
2. A nesnesi B nesnesine metod parametresi olarak verilir. 
Her ikisi de Call Coupling olmasına rağmen muhtemelen 2. yöntem yani metod parametresi olarak kullanmak daha düşük bir coupling yaratır. Açıklaması şöyle
... injects dependencies not only into objects but also as arguments into methods. This means we do not have to structurally link all objects together ... The method just adds a new parameter for a new dependency. The result is we avoid high coupling because objects no longer require structural references to all other objects.

Coupling'e Sebep Olan Yöntemler
Bir kaç sebep sayılabilir.

1. Inheritance
Kalıtım sıkı bir coupling sözleşmesidir. Kalıtım ile gelen arayüze sadık kalmak gerekir. 

2. Composition

3.Composition With Interfaces

4. Data Transfer Objects

5. Streams and pipes
Kod içinde circular reference varsa High Coupling olduğu çok rahat görülebilir.

Low Coupling Nasıl Elde Edilir?
Bir çok yöntem var.

1.En basit olanı Encapsulation (Bilgi Saklama) kullanmak. Encapsulation şöyle tarif edilir.
"Encapsulation (aka information hiding) is the idea that one shouldn't expose implementation details"

The degree in which components depend on each other for their proper operation is called coupling. Coupling is achieved primarily by the mechanisms chosen to interact between components. The less coupled a system is, the more cohesive it is.
2. Message Center kullanmak. Açıklaması şöyle. Burada Message Center Publish/Subscribe veya benzeri bir altyapıyı temsil ediyor.
Message center reduces coupling and enables view models and other components to communicate with without having to know anything about each other besides a simple Message contract.
3. Bazı tasarım Örüntüleri Kullanmak
Örneğin Facade örüntüsü coupling'i bitirmez ancak azaltabilir. Açıklaması şöyle.
The facade hides whatever you do behind it. It is similar to how an object encapsulates its state. The facade encapsulates a (sub)system. The consumer code only needs to talk to the facade and it is unaware of the details behind it.

Of course, it is still coupled. And yes, you have moved the problem to the Facade. However, thanks to the Facade, the consumer code does not have to change because of the changes of what is behind the facade.


Hiç yorum yok:

Yorum Gönder