Le «couplage» est un terme qui décrit la relation entre deux entités dans un système logiciel (généralement des classes).
Lorsqu'une classe utilise une autre classe, ou communique avec elle, on dit qu'elle "dépend" de cette autre classe, et donc ces classes sont "couplées". Au moins l'un d'eux «connaît» l'autre.
L'idée est que nous devrions essayer de garder le couplage entre les classes dans nos systèmes aussi `` lâche '' que possible: d'où `` couplage lâche '' ou parfois `` découplage '' (bien qu'en anglais, `` découplage '' signifierait `` pas de couplage du tout '', les gens l'utilisent souvent pour impliquer un «couplage lâche» entre entités).
Donc: qu'est-ce que le couplage lâche contre le couplage fort dans la pratique, et pourquoi devrions-nous faire des entités à couplage lâche?
Le couplage décrit le degré de dépendance entre une entité et une autre entité. Souvent des classes ou des objets.
Lorsque la classe A dépend fortement de la classe B, les chances que la classe A soit affectée lorsque la classe B est modifiée sont élevées. C'est un couplage fort.
Cependant, si la classe A dépend légèrement de la classe B, les chances que la classe A soit affectée de quelque manière que ce soit par un changement du code de la classe B sont faibles. Il s'agit d'un couplage lâche ou d'une relation «découplée».
Le couplage lâche est bon parce que nous ne voulons pas que les composants de notre système dépendent fortement les uns des autres. Nous voulons garder notre système modulaire, où nous pouvons changer en toute sécurité une partie sans affecter l'autre.
Lorsque deux parties sont faiblement couplées, elles sont plus indépendantes l'une de l'autre et sont moins susceptibles de se casser lorsque l'autre change.
Par exemple, lors de la construction d'une voiture, vous ne voudriez pas qu'un changement interne du moteur casse quelque chose dans le volant.
Bien que cela ne se produise jamais par accident lors de la construction d'une voiture, des choses similaires arrivent tout le temps aux programmeurs. Un couplage desserré est destiné à réduire le risque que de telles choses se produisent.
Couplage fort se produit généralement lorsque l' entité A sait trop sur l' entité B. Si l' entité A fait trop d'hypothèses sur la façon dont fonctionne B entité ou la façon dont il est construit, qu'il y a un risque élevé qu'un changement dans l' entité B aura une incidence sur l' entité A. Cette est parce que l'une de ses hypothèses sur l'entité B est maintenant incorrecte.
Par exemple, imaginez qu'en tant que conducteur, vous fassiez certaines hypothèses sur le fonctionnement du moteur de votre voiture.
Le jour où vous achetez une nouvelle voiture avec un moteur qui fonctionne différemment (ou pour une raison quelconque, votre moteur a été remplacé), vos hypothèses précédentes seraient incorrectes. Si vous étiez du code sur un ordinateur, vous seriez maintenant un code incorrect qui ne fonctionne pas correctement.
Cependant, si toutes les hypothèses qu'en tant que conducteur que vous avez faites sur les voitures sont que: A- elles ont des volants et B- elles ont des pédales de frein et de gaz, alors les changements dans la voiture ne vous affecteront pas, tant que vos quelques hypothèses restez correct. Il s'agit d'un couplage lâche.
L'encapsulation est une technique importante pour réaliser un couplage lâche. L'idée est qu'une classe cache ses détails internes aux autres classes et offre une interface strictement définie pour que d'autres classes puissent communiquer avec elle.
Ainsi , par exemple, si vous définissiez une voiture de classe, il est l' interface (méthodes publiques) serait probablement drive()
, stop()
, steerLeft()
, steerRight()
, getSpeed()
. Ce sont les méthodes que d'autres objets peuvent invoquer sur les objets Car.
Tous les autres détails de la classe Car: comment le moteur fonctionne, le type de carburant qu'il utilise, etc. sont cachés aux autres classes - pour les empêcher d'en savoir trop sur Car.
Au moment où la classe A en sait trop sur la classe B: nous avons une relation fortement couplée, où la classe A dépend trop de la classe B et un changement de classe B est susceptible d'affecter la classe A. Rendant le système difficile à étendre et à maintenir.
Une relation entre deux entités, où elles se connaissent peu (uniquement ce qui est nécessaire) - est une relation faiblement couplée ou découplée.