Bonjour,
comme le titre l'indique, je suis entrain d'étudier pour passer la certification et j'ai du mal à comprendre le principe coupling et cohesion.
Si une âme charitable pouvait m'expliquer un peu ces 2 principes.
merci
Version imprimable
Bonjour,
comme le titre l'indique, je suis entrain d'étudier pour passer la certification et j'ai du mal à comprendre le principe coupling et cohesion.
Si une âme charitable pouvait m'expliquer un peu ces 2 principes.
merci
pour le couplage on peut essayer quelques critères:
- si je fais des modifications dans la classe B est-ce qu'il faudra modifier la classe A qui en fait usage?
- la classe A sait-elle qu'elle utilise effectivement B ? (utilisation d'une interface ou sous classe d'une classe abstraite peuvent faire que A demande un service bien défini mais ne sait pas qu'elle utilise en fait B)
maintenant on peut aussi avoir des interdépendances:
C utilise A qui utilise B qui utilise C! S'il n'est pas possible d'éviter une telle clique alors:
- utiliser des classes internes
- si ce n'est pas pertinent en dernier recours A, B, C doivent être dans le même package (une interdépendance qui traverse des frontières de package est exclue)
pour la cohérence: une classe ne fait pas en même temps l'eau, le gaz et l'electricité!
La cohésion représente la diversité des taches faites par une classe. Par exemple, une classe qui accéderait à une BDD, verifierait un login/mdp afficherait un message si incorrect et gérerait les droits si correct n'est pas très cohésive. En revanche, une classe qui se contenterait d'accéder à la BDD pour vérifier login/mdp et renvoyer un résultat est cohésive. Bref, pour etre cohésive, une classe doit avoir une tache dédiée et etre aussi indépendante (c'est à dire ne pas faire un morceau dans classe A puis un morceau similaire dans classe B) que possible pour l’exécuter. Un moyen de vérifier la cohésivité est d'essayer d'expliquer simplement à quoi sert une classe. Si c'est clair, c'est probablement que la classe est cohésive.
Quand au couplage, c'est comme l'a précisé professeur shadoko, le lien entre une classe et les classes qu'elle utilise. Pour une meilleure maintenance, c'est bien qu'il soit aussi faible que possible (c'est à dire que si Classe A utilise Classe B, est ce qu'une modification de B impactera Classe A). Un cas d'ecole est l'utilisation de base de données différentes. Grosso modo, est ce que l'utilisation de 2 classes gérant des base de données différentes impacte les classes qui l'utilisent.