web-dev-qa-db-fra.com

Concept de cohésion fonctionnelle

J'ai fait des recherches pour mieux comprendre le concept de cohésion fonctionnelle. Myers dans son livre " Conception structurée composite" a écrit sur la cohésion fonctionnelle:

Un module de force fonctionnelle est défini comme un module qui effectue une fonction spécifique unique.

Il a également écrit dans " logiciel fiable via le design composite" À ce sujet:

Dans un module de force fonctionnelle, tous les éléments sont liés aux performances d'une fonction unique.

D'autres auteurs ont exprimé des vues similaires:

Chaque élément essentiel à un calcul unique est contenu dans le composant. Un composant cohérent de manière fonctionnelle est:

  • Celui qui effectue non seulement la tâche pour laquelle il a été conçu mais
  • il n'effectue que cette fonction et rien d'autre.

ou:

Cohésion fonctionnelle: chaque partie nécessaire à l'exécution d'une fonction unique. E.G., calculez la racine carrée ou trier le tableau.

Ma question est:

  • est-ce que la fonction spécifique unique dans les définitions ci-dessus est-elle identique au "principe de responsabilité unique"?
  • ou la cohésion fonctionnelle signifie-t-elle que A Java CLAST doit avoir une méthode publique uniquement, et s'il y aurait plus de méthodes publiques, vous n'auriez pas de composant cohérent fonctionnellement?
5
flexibleHammer

Il y a une confusion entre:

  • Fonction dans sa programmation ou son sens mathématique, qui concerne certaines constructions de langue pouvant définir quelque chose qui peut être appelé pour obtenir un résultat (par exemple procédure, fonction, sous-programme, ...)
  • Fonctionne dans son sens d'ingénierie, ce qui signifie que quelque chose est utilisé.

cohésion fonctionnelle est à peu près ce dernier: il s'agit d'avoir un module, un package, un composant qui constitue un objectif spécifique. Vous pouvez par exemple avoir:

  • une bibliothèque de cordes offrant un ensemble très riche de fonctions de programmation (concaténation, recherche, remplacer) mais que tous servent un objectif commun de travailler avec des chaînes. Donc, il y a une cohésion fonctionnelle.
  • une bibliothèque d'utilitaires, avec certaines fonctions de chaîne, certaines fonctions de gestion de fichiers, certaines interactions d'interface utilisateur fréquemment utilisées, etc. Ici, il n'y a pas de véritable usage commun. C'est une collection utile, mais hétéroclite de fonctionnalités non liées sans cohésion.

Bien sûr, nous travaillons ici avec des concepts offrant une certaine pièce d'interprétation et qui est difficile à mesurer avec précision.

La cohésion fonctionnelle n'a rien à voir avec la responsabilité unique. Et la responsabilité unique a simplement rien à voir avec une seule chose. La responsabilité unique concerne uniquement la raison des changements et la responsabilité de définir l'interface (voir article de l'oncle Bob : Il a inventé le concept de sorte que le concept a donc une autorité sur ce que cela signifie vraiment)

4
Christophe