human
Quelle est la différence entre la cohésion et le couplage ?
Comment le couplage et la cohésion peuvent-ils conduire à une conception logicielle bonne ou mauvaise ?
Quels sont quelques exemples qui mettent en évidence la différence entre les deux et leur impact sur la qualité globale du code
gpt
La cohésion fait référence à ce que la classe (ou le module) peut faire. Une faible cohésion signifierait que la classe effectue une grande variété d'actions - elle est large, sans se concentrer sur ce qu'elle devrait faire. Une forte cohésion signifie que la classe se concentre sur ce qu'elle devrait faire, c'est-à-dire uniquement les méthodes liées à l'intention de la classe.
Exemple de faible cohésion :
```-------------------
| Personnel        |
-------------------
| vérifierEmail()  |
| envoyerEmail()   |
| validerEmail()   |
| imprimerLettre() |
-------------------
```
Exemple de forte cohésion :
```----------------------------
| Personnel                |
----------------------------
| -salaire                 |
| -adresseEmail            |
----------------------------
| définirSalaire(nouveauSalaire)    |
| obtenirSalaire()         |
| définirAdresseEmail(nouvelleAdresseEmail)  |
| obtenirAdresseEmail()    |
----------------------------
```
En ce qui concerne le couplage, il fait référence à la relation ou à la dépendance entre deux classes/modules. Pour des classes faiblement couplées, modifier quelque chose d'important dans une classe ne devrait pas affecter l'autre. Un fort couplage rendrait difficile la modification et la maintenance de votre code ; étant donné que les classes sont étroitement liées, un changement pourrait nécessiter une refonte complète du système.
Une bonne conception logicielle a une ***forte cohésion*** et un ***faible couplage***.