Ressources

Les principales causes d’un logiciel pourrissant est le code fortement couplé avec un trop grand nombre de dépendances. Il est donc primordial d’avoir conscience de se principe pour réduire les coût de maintenance.

Ce principe est tellement important qu’on le retrouve dans de nombre livres :

  • Java Application Architecture - Section 4.3
  • Modern Software Engineering - Chapitre 11
  • Accelerate - Chapitre 5

Couplage et Cohésion

Couplage

Définition

Coupling tells to which degree a change in one part of the system affects another. Usually we aim for loose coupling so that we can change things independently. But the decoupling may come with a burden, which forces us to make trade offs.

A est couplé à B, si pour créer/utiliser A nous devons nécessairement avoir créer B. En d’autres termes, le couplage est le nombre de connexions entre deux ou plusieurs unités (e.g. des classes, des modules, etc …). Plus ce nombre est faible, plus le couplage est faible.

couplage

B b = new B()
A a = new A( b ) // A couplé à B

Cohésion

Définition

Cohesion tells whether code that changes for the same reason, is put closely. We aim for high cohesion.

La cohésion représente la mesure dans laquelle une partie d’un code (e.g. un ensemble de classe) constitue une unité logique. L’objetif est de regrouper les éléments partageant une même logique ensemble; ceci peut être des classes qu’on regroupe dans un même module/service, des fonctions qu’on regroupe dans une même classe, etc …

Concepts liés

Le couplage et la cohésion sont liés :

  • Si vous avez une bonne cohésion dans votre module, tout les éléments sont couplés.
  • Si tout ce qui va ensemble est ensemble, changer le module n’affectera pas les autres modules.
  • Si changer quelque chose dans le module A affecte le module B, cela signifie que cette chose du module A devrait être dans le module B.

Notre objectif est de structurer notre système de manière à regrouper les composants étroitement liés, tout en veillant à ce qu’ils n’interagissent avec les autres modules qu’à travers des interfaces publiques spécifiques.

Ideal cohesion couplage
  • Coupling is about connections across the boundaries of different modules,
  • while cohesion is about the connections between the elements inside the boundary of a module. 1

Métriques

Ressources

Utilisez les mesures de couplage comme Afferent Coupling (Ca), Efferent Coupling (Ce) et Instability (I) permettent d’examiner notre système et de guider la prise de décision pour refactorer si nécessaire.

Dépendances excessivent ?

Ressources

  • Java Application Architecture - Section 4.3

Dans les lignes suivantes nous allons détailler pourquoi les dépendances excessive ruinent notre code ?

Gêne la maintenance

Empêche l’extension

Freine la réutilisation

Ralentit l’intégration

Limite la compréhension

Footnotes

  1. https://thevaluable.dev/cohesion-coupling-guide-examples/