Couplage vs Cohésion
Le couplage et la cohésion sont deux concepts que l'on retrouve en Java (et dans tous les autres langages orientés objet). Le couplage mesure à quel point chacun des modules du programme dépend des autres modules du programme. La cohésion mesure à quel point chacune des fonctions est liée au sein d'un module. En fait, tout langage orienté objet (y compris Java) a les deux principaux objectifs d'augmenter la cohésion et de diminuer le couplage en même temps, afin de développer des programmes plus efficaces. Ces deux métriques de génie logiciel ont été développées par Larry Constantine pour réduire le coût de modification et de maintenance des logiciels.
Qu'est-ce que la cohésion ?
La cohésion mesure à quel point chacune des fonctions est liée au sein d'un module de programme. Des cours bien structurés mènent à des programmes très cohérents. Si une certaine classe exécute un ensemble de fonctions étroitement liées, cette classe est dite cohésive. D'un autre côté, si une classe exécute un ensemble de fonctionnalités totalement indépendantes, cela signifie que la classe n'est pas du tout cohérente. Il est important de comprendre que ne pas avoir de cohésion ne signifie pas que l'application globale n'a pas la fonctionnalité requise. C'est juste que sans cohésion, il sera très difficile de gérer les fonctionnalités car elles seront dispersées dans de nombreux mauvais endroits à mesure que la complexité de l'application augmentera avec le temps. Maintenir, modifier et étendre des comportements éparpillés dans tout le code est très fastidieux, même pour les programmeurs les plus expérimentés.
Qu'est-ce que le couplage ?
Le couplage mesure à quel point chacun des modules du programme dépend des autres modules du programme. Les interactions entre deux objets se produisent parce qu'il y a couplage. Les programmes faiblement couplés sont très flexibles et extensibles. Un couplage fort n'est jamais bon car un objet peut être fortement dépendant d'un autre objet. C'est un cauchemar lorsque le code est modifié, car un couplage élevé signifie que les programmeurs doivent travailler sur plusieurs endroits du code pour même une seule modification de comportement. Un couplage fort conduit toujours à des programmes avec une faible flexibilité et moins d'évolutivité/d'extensibilité. Cependant, dans les langages de programmation comme Java, il est impossible d'éviter complètement le couplage. Mais il est recommandé que les programmeurs fassent de leur mieux pour réduire le couplage autant que possible. Il est également possible d'avoir un couplage pour aider les objets à interagir les uns avec les autres sans entraver son évolutivité et sa flexibilité.
Quelle est la différence entre Couplage et Cohésion ?
Même si le couplage et la cohésion traitent de la qualité d'un module en génie logiciel, ce sont des concepts totalement différents. La cohésion indique dans quelle mesure les fonctionnalités sont liées les unes aux autres au sein du module, tandis que le couplage traite de la dépendance d'un module aux autres modules du programme dans l'ensemble de l'application. Afin d'avoir des logiciels de la meilleure qualité, la cohésion et le couplage doivent atteindre les deux extrémités opposées de leurs spectres. En d'autres termes, un couplage lâche et une forte cohésion fournissent le meilleur logiciel. Le fait d'avoir des champs privés, des classes non publiques et des méthodes privées fournit un couplage lâche, tout en rendant tous les membres visibles au sein de la classe et en ayant package comme visibilité par défaut pour une grande cohésion.