La différence Entre la Cohésion et le Couplage
Quelle est la différence entre la cohésion et le couplage?
Comment le couplage et la cohésion entraîner soit une bonne ou une mauvaise conception de logiciel?
Ce sont quelques exemples qui expliquent la différence entre les deux, et leur impact sur l'ensemble de la qualité du code?
- regarde ça: msdn.microsoft.com/en-us/magazine/cc947917.aspx
- Je tiens à souligner à cet article: S. O. L. I. D. Développement de Logiciel, une Étape à la Fois. Grz, Kris.
- Ceci est le dernier post sur ce sujet
- Voir aussi: stackoverflow.com/questions/39946/coupling-and-cohesion
Vous devez vous connecter pour publier un commentaire.
Cohésion se réfère à ce que la classe (ou module) peut le faire. Faible cohésion signifierait que la classe ne comprend une grande variété d'actions, il est large, pas focalisée sur ce qu'il doit faire. Une cohésion élevée signifie que la classe se concentre sur ce qu'elle doit faire, c'est à dire uniquement les méthodes concernant l'intention de la classe.
Exemple, de Faible Cohésion:
Exemple d'une Forte Cohésion:
Comme pour couplage, il se réfère à la façon dont associées ou dépendantes à deux classes/modules les uns envers les autres. Pour de faibles couplé classes, en changeant quelque chose de plus important dans une classe ne devrait pas affecter les autres. Haut de couplage, il serait difficile de changer et de maintenir votre code; étant donné que les classes sont étroitement unis, de faire un changement pourrait exiger de tout un système à revoir en profondeur.
Un bon logiciel de conception a une forte cohésion et de couplage faible.
Une forte cohésion dans modules et de couplage faible entre modules sont souvent considérées comme liées à la haute qualité dans OO langages de programmation.
Par exemple, le code à l'intérieur de chaque classe Java doit avoir une forte cohésion interne, mais que faiblement couplé possible du code dans d'autres classes Java.
Chapitre 3 de Meyer Logiciel Orienté Objet la Construction (2e édition) est une grande description de ces questions.
Cohésion est l'indication de la relation dans un module.
Couplage est l'indication de la relations entre modules.
Cohésion
seule chose.
c'est à dire la cohésion d'un composant/module se concentrer sur une seule tâche (i.e.,
simple d'esprit) avec peu d'interaction avec les autres modules de la
système d'.
exemple, la classe d'avoir tous les membres visibles avec un paquet ayant
la visibilité par défaut. La cohésion Intra – Concept de Module.
Couplage
vérifier cette lien
Cohésion est une indication de la façon relative et concentre les responsabilités d'un élément logiciel sont.
Couplage se réfère à la puissance d'un élément logiciel est connecté à d'autres éléments.
L'élément logiciel pourrait être classe, package, composant, sous-système ou d'un système. Et pendant la conception des systèmes, il est recommandé de disposer d'un logiciel éléments qui ont une Forte cohésion et de soutien de couplage Faible.
Faible cohésion résultats monolithique classes qui sont difficiles à maintenir, comprendre et réduit la re-usablity. De même Haut de Couplage résultats dans les classes qui sont étroitement associés et des changements ont tendance à ne pas être non-locale, difficiles à changer et réduit la réutilisation.
Nous pouvons prendre un scénario hypothétique où nous travaillons à la conception d'un moniteur classique-mesure
ConnectionPool
avec les exigences suivantes. Notez que, il peut paraître trop pour une simple classe commeConnectionPool
mais l'intention de base est juste pour démontrer de couplage faible et une forte cohésion avec quelques exemple simple et, je pense, devrait vous aider.Avec faible cohésion nous pourrions concevoir un
ConnectionPool
classe par la force de la farce à toutes ces fonctionnalités/responsabilités dans une seule classe comme ci-dessous. Nous pouvons voir que cette même classe est responsable de la gestion de la connexion, de l'interaction avec la base de données ainsi le maintien de statistiques de connexion.Avec une forte cohésion nous pouvons attribuer ces responsabilités à travers les classes et de le rendre plus facile à gérer et réutilisables.
À démontrer de couplage Faible nous allons continuer avec la forte cohésion
ConnectionPool
schéma ci-dessus. Si l'on regarde le schéma ci-dessus, bien qu'il supporte une forte cohésion, laConnectionPool
est étroitement couplé avecConnectionStatistics
classe etPersistentStore
il interagit directement avec eux. Au lieu de réduire le couplage que nous pourrions introduire uneConnectionListener
de l'interface et de laisser ces deux classes implémentent l'interface et de les laisser s'inscrire avecConnectionPool
classe. Et leConnectionPool
va itérer ces auditeurs et de les informer de connexion et obtenir la libération des événements et permet de moins couplage.Note/Mot ou de Prudence: Pour ce scénario simple, il peut ressembler à un exagérée, mais si l'on imagine en temps réel scénario où notre application a besoin d'interagir avec plusieurs services de tiers pour effectuer une transaction: couplage Directement notre code avec les services de tiers signifie que toutes les modifications dans le service de tiers pourrait entraîner des changements dans notre code à plusieurs endroits, au lieu de cela nous avons pu
Facade
qui interagit avec ces multiples services à l'interne et de tous les changements pour les services locaux de laFacade
et d'appliquer de couplage faible avec les services de tiers.Augmentation de la cohésion et de la diminution de couplage n'mener à bien la conception de logiciels.
Cohésion des partitions de votre fonctionnalité de sorte qu'il est concis et plus proche des données qui le concernent, tandis que le découplage assure que la fonctionnelle de la mise en œuvre est isolé du reste du système.
Découplage vous permet de changer la mise en œuvre sans affecter d'autres parties de votre logiciel.
Cohésion garantissent une mise en œuvre plus spécifiques à la fonctionnalité et à la même temps plus facile à maintenir.
La méthode la plus efficace de diminuer le couplage et la cohésion croissante est conception d'une interface.
Qui est fonctionnelle majeure objets ne doit "connaître" les uns les autres par le biais de l'interface(s) qu'ils mettent en œuvre. La mise en œuvre d'une interface introduit la cohésion comme une conséquence naturelle.
Si elle n'est pas réaliste dans certains senarios il devrait être un objectif de conception de travailler en.
Exemple (très sommaire):
Certains où ailleurs dans votre base de code, vous pouvez avoir un module qui traite des questions indépendamment de ce qu'ils sont:
meilleure explication de la Cohésion vient de l'Oncle Bob est un Code Propre:
Les Classes doivent avoir un petit nombre de variables d'instance. Chacune des méthodes d'une classe doivent manipuler un ou plusieurs de ces variables. En général les plus variables d'une méthode manipule la plus cohérente que la méthode est à sa classe. Une classe dans laquelle chaque variable est utilisée par chaque méthode est au maximum cohérent.
En général, il n'est ni possible ni souhaitable de créer de tels maximum cohérente classes; d'autre part, nous aimerions cohésion haute. Lorsque la cohésion est élevé, cela signifie que les méthodes et les variables de classe sont co-dépendant et de tenir ensemble comme un ensemble logique.
La stratégie de maintien des fonctions de petites et de maintien de la liste des paramètres courte peut parfois mener à une prolifération des variables d'instance qui sont utilisés par un sous-ensemble de méthodes. Lorsque cela arrive, cela signifie presque toujours qu'il y a au moins un autre de la classe en essayant de sortir de la plus grande classe. Vous devriez essayer de séparer les variables et les méthodes en deux ou plusieurs catégories, telles que les nouvelles classes sont plus cohérente.
Cohésion en génie logiciel, est la mesure dans laquelle les éléments d'un certain module appartiennent ensemble. Ainsi, il est une mesure de la force relative de chaque morceau de fonctionnalités exprimées par le code source d'un module logiciel est.
Couplage en termes simples, est de savoir combien de composant (encore une fois, imaginez une classe, mais pas nécessairement) sait sur le fonctionnement interne ou des éléments internes d'un autre, c'est à dire combien la connaissance qu'il a de l'autre composant.
J'ai écrit un billet de blog à propos de ce, si vous voulez lire un peu plus de détails avec des exemples et des dessins. Je pense qu'il répond à la plupart de vos questions.
simplement, Cohésion représente la mesure dans laquelle une partie d'un code de formulaires de base une logique unique, unité atomique. Couplage, d'autre part, représente le degré auquel une seule unité est indépendante des autres. En d'autres termes, c'est le nombre de connexions entre les deux unités ou plus. Le moins le nombre, plus le couplage.
En essence, une forte cohésion des moyens maintenant des parties d'une base de code qui sont liés les uns aux autres dans un seul endroit. Faible couplage, dans le même temps, est sans rapport avec l'idée de la séparation des parties de la base de code autant que possible.
Types de code à partir d'une cohésion et de couplage de point de vue:
Idéal est le code qui suit la ligne directrice. Il est faiblement couplés et hautement cohésif. Nous pouvons illustrer ce code avec cette image:
Dieu Objet est à la suite de l'introduction d'une cohésion élevée et haute de couplage. C'est un anti-pattern et fondamentalement, synonyme d'un seul morceau de code qui fait tout le travail à la fois:
mal choisi a lieu lorsque les frontières entre les différentes classes ou modules sont sélectionnés mal
Destructeur de découplage est le plus intéressant. Il se produit parfois lorsqu'un programmeur tente de dissocier une base de code tant que le code perd complètement son attention:
lire plus ici
de cohésion se réfère tout au sujet de la façon dont une classe unique est conçu. La cohésion est l'Orienté-Objet, principe le plus étroitement associé avec s'assurer qu'une classe est conçu avec un unique objectif.
La plus ciblée d'une classe, la cohésion de la classe est plus. Les avantages de la haute cohésion est que ces classes sont beaucoup plus faciles à entretenir (et moins fréquemment changé) que les classes à faible cohésion. Un autre avantage d'une forte cohésion est que les classes avec un objectif ont tendance à être plus réutilisables que d'autres classes.
Dans l'image ci-dessus, nous pouvons voir que dans une faible cohésion d'une seule classe est responsable d'exécuter beaucoup de travail qui ne sont pas en commun, ce qui réduit les possibilités de réutilisation et de maintenance. Mais en haut de cohésion, il est une catégorie distincte pour tous les travaux à exécuter un travail spécifique, qui entraînent une meilleure facilité d'utilisation et d'entretien.
Cohésion (Cohésion) : Co qui signifie ensemble, hesion qui signifie à coller. Le Système de collage de particules de différentes substances.
Pour exemple réel:
img Courtoisie
Cohésion est un ordinal type de mesure et est généralement décrit comme “une cohésion élevée” ou “faible cohésion”. Modules avec une forte cohésion ont tendance à être préférable, car une forte cohésion est associé avec plusieurs traits désirables de logiciels, y compris la robustesse, la fiabilité, la réutilisation et la compréhensibilité. En revanche, la faible cohésion est associé avec des traits comme étant difficile à maintenir, tester, de les réutiliser, ou même de comprendre. wiki
Couplage est généralement contraste avec cohésion. Faible couplage souvent en corrélation avec une forte cohésion, et vice versa. De couplage faible est souvent un signe de la structure du système de l'ordinateur et une bonne conception, et lorsqu'il est combiné avec une forte cohésion, soutient les objectifs généraux de la haute lisibilité et la maintenabilité. wiki
Je pense que les différences peuvent être mis comme les suivantes:
Dans ce blog - Je écrire à ce sujet plus en détail.
Cohésion est une indication de la force fonctionnelle d'un module.
interaction avec d'autres composants dans d'autres parties d'un programme. A déclaré
simplement, la cohésion d'un module (dans l'idéal), faites juste une chose.
Point de vue conventionnel:
la “simple d'esprit” d'un module
OO vue:
cohésion implique qu'un composant ou de la classe encapsule seuls les attributs et les opérations qui sont étroitement liés l'un à l'autre et de la classe ou du composant lui-même
Niveaux de cohésion
Fonctionnelle
Couche
Communicationnelle
Séquentielle
De procédure
Temporelle
utilitaire
Couplage est une indication de la relative interdépendance entre les modules.
De couplage dépend de la complexité de l'interface entre les modules, l'
point d'entrée ou il est fait référence à un module, ainsi que les données
de passage à travers l'interface.
Point De Vue Conventionnel :
La mesure dans laquelle un composant est connecté à d'autres composants et le monde externe
OO vue: une mesure qualitative de la mesure dans laquelle les classes sont connectés l'un à l'autre
Niveau de couplage
Contenu
Commune
Contrôle
Timbre
Données
Appel de Routine
Type d'utilisation
De l'Inclusion ou de l'importation
Externe #
Couplage = les interactions /relations entre les deux modules...
Cohésion = interaction entre les deux éléments à l'intérieur d'un module.
Un logiciel est composé de plusieurs modules. Le Module se compose des éléments. Considérons un module est un programme. Une fonction au sein d'un programme est un élément.
Au moment de l'exécution, la sortie d'un programme est utilisé comme entrée pour un autre programme. Ceci est appelé un module à l'interaction ou de processus à processus de communication. C'est aussi appelée Couplage.
Sein d'un programme unique, sortie de la fonction est passé à une autre fonction. Cela s'appelle de l'interaction des éléments à l'intérieur d'un module. C'est aussi appelée la Cohésion.
Exemple:
Couplage = communication entre les 2 familles différentes...
Cohésion = communication entre père-mère-enfant au sein d'une famille.
Tout simplement, cohésion signifie qu'une classe doit représenter un concept unique.
L'interface publique d'une classe est cohérent si l'ensemble de la classe caractéristiques sont liées à la notion que la classe représente.
Par exemple, au lieu d'avoir CashRegister classe, ayant CashRegister de la Monnaie et des caractéristiques de la cohésion fait en 2 classes - CashRegister et des pièces de Monnaie de la classe.
Dans couplage, une classe dépend d'un autre, car il utilise les objets de la classe.
Le problème avec le haut de couplage est qu'il peut créer des effets secondaires. Un changement dans une classe peut causer une erreur inattendue dans l'autre classe et pourrait casser le code entier.
Généralement, une forte cohésion et de couplage faible est considéré comme de haute qualité de la programmation orientée objet.
Le terme cohésion est en effet un peu contre-intuitif de ce que cela signifie dans la conception de logiciels.
Cohésion sens commun, c'est que quelque chose qui colle bien ensemble, unis, qui sont caractérisés par de fortes obligations comme l'attraction moléculaire. Cependant dans les logiciels de conception, cela veut dire pour une classe qui, idéalement, ne fait qu'une chose, de sorte que plusieurs sous-modules ne sont même pas impliqués.
Nous pouvons peut-être penser à lui de cette façon. Une partie a le plus de cohésion lorsque c'est la seule partie (ne fait qu'une chose et ne peut pas être ventilée). C'est ce qui est souhaité dans la conception de logiciels. La cohésion est tout simplement un autre nom pour "responsabilité unique" ou "la séparation des préoccupations".
Le terme couplage sur la main est très intuitive ce qui signifie que lorsqu'un module ne dépend pas d'un trop grand nombre de modules et de ceux qu'il se connecte peut être facilement remplacées, par exemple, obéissant à principe de substitution de liskov .