239 votes

Que signifie "faible taux de couplage et fort taux de cohésion" ?

J'ai du mal à comprendre la déclaration low in coupling and high in cohesion . J'ai fait des recherches sur Internet et lu beaucoup de choses à ce sujet, mais j'ai toujours du mal à comprendre.

Ce que je comprends, c'est que High cohesion signifie que nous devrions avoir des classes qui sont spécialisées pour exécuter une fonction particulière. J'espère que c'est correct ? Comme une classe de validation de carte de crédit, qui est spécialisée pour valider uniquement les cartes de crédit.

Et vous ne comprenez toujours pas ce que signifie un couplage faible ?

4 votes

Pour une explication plus détaillée, vous pouvez préférer la réponse de ce post Cohésion et couplage

0 votes

Cette réponse est certainement meilleure et plus concise que celles données ici.

0 votes

En fait, il s'agit d'un doublon. Answer by Infinity est le seul doublon qui n'a pas été mentionné jusqu'à présent.

347voto

vishal_aim Points 2641

Ce que je crois, c'est ceci :

La cohésion fait référence au degré d'appartenance des éléments d'un module/classe, il est suggéré que le code lié soit proche les uns des autres, nous devons donc nous efforcer d'obtenir une cohésion élevée et lier tout le code lié le plus étroitement possible. Il s'agit des éléments sur le module/la classe.

Le couplage fait référence au degré de dépendance des différents modules/classes les uns par rapport aux autres. Il est suggéré que tous les modules soient indépendants autant que possible, c'est pourquoi le couplage est faible. Il est lié aux éléments parmi différents modules/classes.

Il est utile de visualiser l'ensemble du tableau :

enter image description here

La capture d'écran a été prise à partir de Coursera .

34 votes

Notre professeur dit : "Une forte cohésion consiste à s'assurer que le module ne fait pas plusieurs choses, mais qu'il est destiné à faire une seule chose en particulier".

8 votes

D'après ce que je crois, il s'agit plutôt de "s'assurer qu'un module fait une chose et que plusieurs modules ne font pas la même chose", ce qui permet de s'assurer qu'un seul module spécifie le comportement, de sorte que le comportement global d'une chose est cohérent.

16 votes

@Lokesh Je pense que votre commentaire brouille les pistes. Votre professeur confond cohésion élevée et "principe de responsabilité unique". Une forte cohésion signifie que les choses similaires et liées sont maintenues ensemble. Vous pouvez avoir une cohésion élevée dans un objet ou un service qui est composé de nombreuses fonctions.

70voto

Bojan Skrchevski Points 3908

Cohésion en génie logiciel, comme dans la vie réelle, c'est la mesure dans laquelle on peut dire que les éléments d'un ensemble (dans notre cas, disons une classe) appartiennent réellement ensemble. Il s'agit donc d'une mesure du degré de parenté de chaque élément de fonctionnalité exprimé par le code source d'un module logiciel.

Une façon de considérer la cohésion en termes d'OO est de savoir si les méthodes de la classe utilisent l'un des attributs privés.

La discussion est plus large que ça, mais Cohésion élevée (ou le meilleur type de cohésion - la cohésion fonctionnelle) est lorsque les parties d'un module sont regroupées parce qu'elles contribuent toutes à une seule tâche bien définie du module.

Accouplement en termes simples, c'est la mesure dans laquelle un composant (encore une fois, imaginez une classe, mais pas nécessairement) connaît le fonctionnement interne ou les éléments internes d'un autre composant, c'est-à-dire la mesure dans laquelle il connaît l'autre composant.

Accouplement libre est une méthode d'interconnexion des composants d'un système ou d'un réseau de sorte que ces composants dépendent les uns des autres dans la mesure la plus faible possible

J'ai écrit un article de blog à ce sujet. Il aborde tout cela de manière très détaillée, avec des exemples, etc. Il explique également les avantages pour lesquels vous devriez suivre ces principes.

44voto

zoran Points 3

Dans la conception de logiciels grande cohésion signifie que la classe doit faire une chose et une seule très bien. Une cohésion élevée est étroitement liée à Principe de responsabilité unique .

Faible couplage suggèrent que la classe doit avoir le moins de dépendances possibles. De même, les dépendances qui doivent exister doivent être des dépendances faibles - préférer la dépendance à l'interface plutôt que la dépendance à la classe concrète, ou préférer la composition à l'héritage .

Une cohésion élevée et un couplage faible nous donnent un code mieux conçu et plus facile à maintenir.

1 votes

Vous avez oublié l'injection de dépendance. Elle est étroitement liée au couplage faible et permet de s'assurer qu'une classe a le moins de dépendances possible.

32voto

Daniel Perník Points 1556

Réponse courte et claire

  • Haute cohésion : Les éléments d'une même classe/module doivent fonctionnellement appartenir ensemble et faire une chose particulière.
  • Accouplement libre : La dépendance entre les différentes classes/modules doit être minimale.

9voto

Braj Kishore Points 66

Le couplage faible est dans le contexte de deux ou plusieurs modules. Si un changement dans un module entraîne de nombreux changements dans un autre module, on dit qu'ils sont fortement couplés. C'est dans ce cas que la programmation basée sur les interfaces est utile. Tout changement dans le module n'aura pas d'impact sur l'autre module car l'interface (le moyen d'interaction) entre eux n'a pas changé.

Cohésion élevée - Mettez les choses similaires ensemble. Une classe doit donc avoir des méthodes ou des comportements pour faire le travail correspondant. Juste pour donner un mauvais exemple exagéré : Une implémentation de l'interface List ne devrait pas avoir d'opération liée à String. La classe String devrait avoir des méthodes, des champs qui sont pertinents pour String et de la même manière, l'implémentation de List devrait avoir des choses correspondantes.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X