J'utilise Java où nous n'avons que des packages. Je sais qu'il existe d'autres langages de programmation qui incluent également des modules.
Quelle est la différence?
Il est difficile de comparer la sémantique dans le vide. (De quelles autres langues parlez-vous?) Un "module" peut être analogue à une classe Java, ou à un package Java, ou autre chose entièrement, selon sur cet autre langage. Généralement, puisque les "modules" sont généralement issus de langages procéduraux, je pencherais pour dire Java class, mais je pense que la ligne est très floue à ce moment-là et vous pourriez argumenter le paquet de manière assez convaincante.
le commentaire d'instanceofTom l'a cloué - Différentes langues ont différentes définitions de paquet et de module. Il n'y a donc pas de réponse indépendante de la langue à cette question.
Je vais essayer d'y répondre du point de vue de certaines des langues que je connais:
Java: Il a un concept de package
s, qui sont fondamentalement juste un mécanisme pour organiser Java classes, interfaces, etc. en espaces de noms. Ils nécessitent une structure hiérarchique. package
s n'ont pas de statut de première classe. Il convient également de noter que les superpackage
s proposés pour Java 7 sont aussi parfois appelés module
s.
Modula: module
s, même concept que les package
s de Java. Ne nécessite pas de structure hiérarchique.
C #: namespaces
, même concept que les package
s de Java. Ne nécessite pas de structure hiérarchique.
C++: namespaces
, Comme son nom l'indique, ce ne sont que des espaces de noms. Ne nécessite pas de structure hiérarchique.
Haskell: module
s, même concept que les package
s de Java.
Scala: package
s en Scala sont les mêmes que package
s en Java, sauf qu'ils ne nécessitent pas de structures hiérarchiques. Quelques restrictions supplémentaires comme one-public- La classe par fichier a également été assouplie. object
s dans Scala sont également appelés modules, et ils bénéficient également du statut de première classe.
F #: namespaces
en F # sont identiques à C # namespace
s. Outre namespace
s, F # a également modules
qui sont implémentés au niveau CLR en tant que classes .NET avec des méthodes statiques. Ce ne sont pas des entités de première classe.
Il semble que, comme d'autres réponses l'indiquent, la notion de module varie d'une langue à l'autre, certains ne l'ayant même pas (mais une contrepartie correspondante).
Cependant, il semble que de nos jours les modules soient plus un concept et se réfèrent à un ensemble de fichiers de code source qui peuvent être partagés indépendamment. Suivant cette définition, Java ne sont pas des modules car ils contiennent des fichiers compilés en bytecode (fichiers .class). Un système de modules conforme à cette définition doit être introduit dans Java 9 ( voir cet article ) et est présent dans d'autres langages qui ont des gestionnaires de modules ou de packages, nommant souvent directement les modules packages (Outil Go lang/go, Python/pip, PHP/Composer ...) où les packages sont généralement des modules emballés.
Java Platform Module System ou JPMS a été introduit lors de la sortie de Java-9 . A partir de ce moment Java a à la fois packages
et modules
. Quelle est donc la différence entre eux?
Qu'est-ce qu'un package?
Un package est un espace de noms qui organise un ensemble de classes et d'interfaces associées.
Qu'est-ce qu'un module?
Un module est une collection de packages Java Java et ressources associées avec un fichier descripteur, qui contient des informations sur les packages/ressources qui sont exposés par ce module, quels packages sont utilisés par le module actuel et d'autres) information.
Nous pouvons penser à un module Java comme niveau d'agrégation supérieur aux packages. Un module vous permet d'organiser quelques packages en une seule unité logique et de les distribuer comme un système entier. De même JPMS fournit un moyen de contrôler quels packages sont visibles par les utilisateurs.
Un package s'apparente plus à un espace de noms C++ qu'à un module. Un module s'apparente plus à une classe englobante qu'à un package.