[Java] Coupling & Cohesion

Discussion dans 'Web, design' créé par Angy, 5 Décembre 2008.

Statut de la discussion:
Fermée.
  1. Offline
    Angy \o/
    Hello les gens!

    J'essaye de comprendre la différence entre le coupling (loose coupling, tight coupling) et la cohesion (High cohesion, low cohesion).

    J'ai déjà trouvé des explications sur le net (ou dans des livres) mais ça ne m'avance pas vraiment.

    Quelqu'un saurait m'expliquer exactement la différence entre tous ces termes? (et avec un peu de chance, un petit bout de code pour mieux comprendre!)

    Merci beaucoup! :-D
    Angy, 5 Décembre 2008
    #1
  2. Offline
    k o D Belge !
    Bon bon bon.

    En fait te montrer par un petit bout de code ça va être plus ou moins "complexe".

    Diminuer le couplage sert en fait à ce que les différentes couches de ton application soient moins ... couplées :p

    Alors kesako? Je vais prendre un exemple qui me passe par l'esprit.
    En PHP, il existe une méthode propre pour chaque SGBD de connexion, de select etc... (exemple: mysql_connect()).

    Si dans tes différentes classes tu fais appel à cette fonction mysql_connect, tu as un très gros couplage. En effet, le jour où tu décideras de passer à Oracle par exemple, toutes tes fonctions mysql_xxx devront être changées dans toutes tes classes!

    Pour diminuer le couplage, tu as donc intérêt à créer une classe contenant l'ensemble des méthodes dont tu as besoin pour discuter avec le SGBD (insert, update, connect, etc...).
    Ce ne sont que des redirections hein... tu auras une méthode db_connexion qui ne fera que transmettre ses paramètres à mysql_connect().

    Toutes les classes qui nécessitent un accès DB passeront par la classe que tu as créée (imaginons "DBAccess") via des méthodes qui ne sont plus couplées au SGBD!
    Le jour où tu souhaites changer de DB, tu n'as qu'à éditer ta classe DBAcces ;)

    Il y a encore mieux à faire pour diminuer d'avantage le couplage c'est d'utiliser le pattern factory mais ça si tu ne connais pas, je ne vais pas t'embrouiller avec cela pour le moment ;)
    Ce pattern te permet de diminuer fortement le couplage.

    Concernant la cohésion, il s'agit en fait simplement du principe de bien délimiter tes méthodes. Une méthode ne doit faire qu'une seule chose. Si dans cette méthode tu dois par exemple vérifier tel ou tel état dans ton business tu feras appel à une autre.

    Dans une fonction "saveNews()" tu ne vas par exemple pas vérifier qu'il y a bien un utilisateur identifié, tu feras appel dans saveNews() à "checkIdentity()".

    Bref ce sont des concepts.
    Pour moi le plus important est bien entendu de diminuer le couplage un maximum afin de rendre ton application très souple en cas de changement divers (changement de DB, exportation de factures en PDF et plus sous Excel, etc etc etc)
    k o D, 5 Décembre 2008
    #2
  3. Offline
    k o D Belge !
    Mmm compris?
    k o D, 10 Décembre 2008
    #3
Statut de la discussion:
Fermée.