web-dev-qa-db-fra.com

Différence entre un module, une bibliothèque et un framework

Dans la programmation populaire, quelle est la différence entre ces termes et quels sont les chevauchements?

Des termes associés me manquent-ils?

56
jetru

Les trois fournissent des fonctionnalités.

Cependant, il existe des différences importantes.

Une bibliothèque est juste une collection de fonctionnalités connexes. Rien de plus, mais rien de moins. La caractéristique qui définit une bibliothèque est que vous êtes en contrôle, vous appelez la bibliothèque.

La caractéristique qui définit un framework est Inversion of Control. Le framework appelle you, et non l'inverse. (Ceci est connu sous le nom de Hollywood Principle: "Ne nous appelez pas, nous vous appellerons.") Le framework est sous contrôle. Le flux de contrôle et le flux de données sont gérés par le cadre.

Vous pouvez le concevoir de la manière suivante: dans les deux cas, vous avez une application, et cette application contient des trous, du code a été laissé de côté, et ces trous doivent être comblés. La différence entre une bibliothèque et un cadre est

  • qui écrit l'application,
  • quels sont les trous et
  • qui remplit les trous.

Avec une bibliothèque, vous écrivez l'application et vous omettez les détails de boring, qui sont renseignés par un library.

Avec un cadre, le framework writer écrit l'application et laisse de côté les détails intéressant que vous complétez.

Cela peut parfois être un peu déroutant, car le framework lui-même peut également contenir des détails ennuyeux, que l'auteur du framework a renseigné avec des bibliothèques, les parties que vous écrivez peuvent contenir des détails ennuyeux, que vous complétez avec des bibliothèques et que le framework peut fournir un ensemble de bibliothèques regroupées qui fonctionnent bien avec le cadre ou qui sont souvent nécessaires en conjonction avec le cadre. Par exemple, vous pouvez utiliser une bibliothèque de générateur XML lors de l'écriture d'une application Web à l'aide d'un framework Web, et cette bibliothèque XML peut avoir été fournie par le framework ou même en faire partie intégrante.

Cela ne signifie toutefois pas qu’il n’ya pas de distinction entre une bibliothèque et un framework. La distinction est très claire: il s’agit de l’inversion de contrôle.

La caractéristique qui définit un module est information masquant. Un module a un interface, qui spécifie de manière explicite, mais abstraite, à la fois les fonctionnalités qu’il fournit et les fonctionnalités dont il dépend. (Souvent appelées fonctionnalités exportées et importées.) Cette interface a une implémentation [ (ou plusieurs implémentations, en fait) qui, de la part de l'utilisateur d'un module, constituent une boîte noire.

De plus, une bibliothèque est une collection de fonctionnalités associées, alors qu'un module ne fournit qu'une seule pièce de fonctionnalités. Ce qui signifie que si vous avez un système avec à la fois des modules et des bibliothèques, une bibliothèque contiendra généralement plusieurs modules. Par exemple, vous pourriez avoir une bibliothèque de collections contenant un module List, un module Set et un module Map.

Bien que vous puissiez certainement écrire des modules sans système de modules, vous souhaitez idéalement que vos modules soient compilables séparément (pour les langages et les environnements d’exécution où cette notion est tout à fait logique), déployables séparément et que vous souhaitiez une composition de modules sécurisée (c.-à-d. soit travailler ou déclencher une erreur avant l'exécution, mais ne jamais conduire à une erreur d'exécution ou un comportement inattendu). Pour cela, vous avez besoin d’un système de modules, comme les unités de Racket, les modules et les foncteurs Standard ML ou les classes de niveau supérieur de Newspeak.

Alors récapitulons:

  • bibliothèque : collection de fonctionnalités associées
  • framework : Inversion of Control
  • module : interface abstraite avec exportations et importations explicites, l'implémentation et l'interface sont séparées, il peut y avoir plusieurs implémentations et l'implémentation est masquée
91
Jörg W Mittag

Vous pouvez voir un module, une bibliothèque et un framework de cette façon:

  • module = vos doigts
  • bibliothèque = vos mains
  • cadre = ton corps

Vos doigts/Module: 
Vous pouvez les déplacer, toucher des objets, vous en avez 5 dans une main afin de pouvoir les utiliser pour maintenir les objets plus facilement, ce ne sont pas les plus grandes parties du corps, mais un des la plupart des parties utiles, sans elles vous ne pourriez pas pirater! ... modules font partie d'un programme, vous pouvez les utiliser, développer le code dans d'autres fichiers (pas un fichier volumineux contenant beaucoup de code), ils facilitent la lecture.

_ {Vos mains/Bibliothèque:} _ 
Les mains sont un ensemble de 5 doigts chacun, vous pouvez tenir des choses, les déplacer, interagir avec elles, etc ... bibliothèques font également partie d'un programme! et ils peuvent être vus comme un ensemble de modules, vous pouvez les utiliser pour interagir avec d'autres programmes ou créer des objets pertinents avec votre programme.

_ {Votre corps/Framework:} _ 
Votre corps est un système complet, vous pouvez faire avec votre corps ce que vous voulez (même voler, marcher dans un avion et voilà, un avion est un autre système), vous êtes unique ... un framework est votre corps, un système complet, il ne fonctionne pas pour lui-même (vous devez coder herpderp)} mais vous pouvez créer un programme complet avec quelques piratages ...

juste mon interprétation ... si je me trompe, corrigez-moi.

31
jmsalcido

Mon ASCII interprétation artistique de ce que j'ai compris d'autres réponses:

+-----------------------------------------------+
|  ...........................  ..............  |
|  : f1() f2()  :  f3()      :  : f4() f5()  :  |
|  :            :            :  :            :  |
|  : l1_module1 : l1_module2 :  : l2_module3 :  |
|  :            :            :  :            :  |
|  --library1-----------------  --library2----  |
|                                               |
|   application.c                               |
|                                               |
|       #include l1_module2                     |
|       #include l2_module3                     |
|                                               |
|       int main() {                            |
|           # case 'reload'                     |
|           f5();                               |
|           # case 'start'                      |
|           f1();                               |
|           # case 'stop'                       |
|           f4();                               |
|       }                                       |
|                                               |
+-----------------------------------------------+

.................................................
: FRAMEWORK_X                                   :
:                                               :
:     application start                         :
:     ...                                       :
:     application reload                        :
:     application stop                          :
:     ...                                       :
:...............................................:

Ce qui se produit:

  1. Developer installe library1 et library2 afin de pouvoir utiliser les fonctions fournies à l'intérieur de leurs modules.

  2. Ils incluent ensuite l1_module1 et l2_module3 . (Ils n'ont pas besoin l1_module2 pour l'instant).

  3. Maintenant, ils peuvent utiliser les fonctionnalités de f1 , f2 , f4 et f5 , Ils écrivent donc leur application.

  4. Maintenant, puisqu'ils veulent utiliser l'application à l'intérieur de certains FRAMEWORK_X , ils doivent implémenter l'interface dont ce framework .__ a besoin: pour que le framework puisse appeler l'application

Quelques notes:

  • En pratique, il y a toujours un cadre. Par exemple, le framework OSest pour votre application (c'est pourquoi vous définissez main())! Ou vous pouvez dire que le chargeur de démarrage est un framework pour votre système d'exploitation et le BIOS est un framework pour votre chargeur de démarrage, etc.
10
Alois Mahdal

Je crois que les frameworks et les bibliothèques sont des modules. Étant donné que les modules sont des codes importés ou exportés à partir de votre code… .. Comme ils le disent, Frameworks appelle votre code, votre code appelle des bibliothèques. De toute façon, un module est impliqué

2
Joseph Rex

De mon point de vue une framework contient libraries et les deux sont modules.

Par exemple. Dans Swift a module est une unité unique de distribution de code - une framework ou une application construite et expédiée comme une seule unité.

2
Jakub Truhlář

Grosso modo, je le considérerais ainsi: un module est un "atome" importable de fonctionnalité; il définit le plus petit sous-ensemble de fonctionnalités groupées pouvant être utilisé (notez qu'il ne s'agit pas de la plus petite unité de fonctionnalités; il s'agirait d'une classe (ou d'une fonction, en fonction)). Une bibliothèque serait, dans cette approche, un ensemble de modules; vous pouvez utiliser une bibliothèque sans utiliser tous les modules qui en font partie. Un cadre est l'environnement dont dépend la bibliothèque (probable); il constitue l'environnement de base dans lequel tout ce qui précède fonctionne.

Notez que ces termes sont quelque peu fongibles et que ces définitions ne seront pas toujours solides dans toutes les situations. Ceci est juste mon interprétation de certains des usages courants que j'ai rencontrés.

2
Paul Sonier

Bibliothèque: Une collection de code namespaced/modularized.

Cadre: Un framework est un morceau de code (qu’il s’agisse d’un compilateur, d’un modèle de conception ou de quelque chose d’autre) qui est réutilisable et qui facilite ainsi la vie des développeurs afin qu’ils n’aient pas à réinventer la roue.

Module: En JavaScript, par exemple, un module est simplement un objet avec des propriétés publiques. Je ne suis pas sûr, mais je pense qu'il n'y a pas de réponse générique pour le terme module.

0
Ini

À mon avis, un module pourrait être un sous-ensemble d'une bibliothèque, qui à son tour pourrait être un sous-ensemble d'un cadre. Mais je suis sûr qu'il existe des exceptions à cela et diverses interprétations basées sur le contexte - en particulier pour le terme module.

0
GWW

Module

Un module est la sortie de modular design , un composant de granularité variée.

Dans le contexte de programmation modulaire , un module est une entité exprimable par le langage de codage introduisant la programmabilité (généralement un langage de programmation ou un langage de description matérielle) dans la solution.

Certaines langues supportent explicitement le concept de module et le fournissent en tant que fonctionnalité de langage. Un exemple récent est Modular-2 . Malgré cette fonctionnalité, les utilisateurs peuvent toujours spécifier d'autres types de modules à l'aide de conventions avec une granularité différente dans la conception logicielle et la gestion de projet, telles qu'un fichier source et un répertoire de fichiers source. La fonctionnalité de langage intégrée n'élimine pas le besoin de modules de granularité différente, mais les utilisateurs peuvent utiliser une terminologie différente pour éviter toute ambiguïté avec la fonctionnalité de langage.

Certaines autres langues ne fournissent pas de fonctionnalité spécifique nommée module, mais les utilisateurs peuvent choisir de spécifier des parties du programme en tant que modules. Par exemple, le langage C ne comporte pas de modules, mais les utilisateurs peuvent spécifier une fonction, un fichier source, une unité de traduction (un fichier source avec les en-têtes qu’il inclut) ou même un groupe de fichiers en tant que module à la demande. Un module dans ce cas peut être avec différentes formes de code: source, code binaire de source ou fourni ailleurs avec des garanties de compatibilité de liaison, voire même mixte.

La seule restriction réelle de "module", le cas échéant, est qu'elle doit refléter le résultat d'une conception modulaire. Par conséquent, les composants d'un module doivent partager certaines similitudes pour rendre le borne clair. Un module devrait généralement fournir certains types d’interfaces exportées aux utilisateurs; il peut éventuellement contenir import dépendances de composants de programme externes. Certains modules peuvent être un sous-module d’autres. 

Les outils de gestion de code peuvent utiliser les concepts liés au module. Par exemple, Git a le concept de sous-module, qui est essentiellement un sous-répertoire versionné du code dans le référentiel.

Bibliothèque

Une bibliothèque est un type spécialisé de module de programme contenant (plus précisément, propriétaire) un ensemble de (sous) modules à utiliser dans certains encapsulés} _ (c'est-à-dire, ils ne peuvent pas être modifiés directement en utilisation ultérieure). Généralement, une bibliothèque est conçue pour être réutilisée et déployée dans un stockage non volatile. En règle générale, une bibliothèque est fournie sous forme d'un ou de plusieurs fichiers sur disque dans certains formats permanents persistants. Ces bibliothèques sont appelées archives, objets dynamiques, packages, etc. Avec la prise en charge de bases de données de programmes externes, les bibliothèques peuvent également être identifiées par des moyens autres que les noms de fichiers ou d'autres propriétés basées sur des fichiers. Par exemple, CLI fournit des assemblages de bibliothèques à l'aide de GAC .

Cadre

Un framework est un autre type spécialisé de module de programme qui contient diverses fonctionnalités de code prédéfinies. Un framework peut être déployé sous la forme d'une ou plusieurs bibliothèques. La différence entre un framework et d’autres types de modules d’un programme réside dans le fait que le premier met l’accent sur un solution généralement complète, figée mais adaptative et extensible de sorte que l’utilisateur du framework puisse se concentrer sur le domaine. - problèmes spécifiques et spécifiques au projet au lieu d’écrire du code collé pour assembler différentes bibliothèques et les faire fonctionner facilement. Cependant, cela a un coût de complexité de conception tout au long du projet. Notamment, les frameworks plusieurs (mais pas tous) appliqueraient le code des utilisateurs suivant un style IoC . En conséquence, il est presque impossible de mettre le même genre mais des cadres différents ensemble de manière harmonieuse, de manière idiomatique et naturelle. Utilisation d'un langage avec effets de contrôle de première classe , IoC n'est pas explicitement requis dans un cadre. Cependant, cela implique que la combinaison des bibliothèques normales pour avoir la fonctionnalité d'un framework est plus facile à réaliser, il est donc moins nécessaire d'organiser des modules de programme comme les frameworks traditionnels qui minent souvent facilement la flexibilité.

0
FrankHB