Quelle est la différence entre "package" et "module"
4 réponses
difficile de comparer la sémantique dans le vide. (Quelles sont les autres langues, vous voulez dire?) Un "module" pourrait être analogue à une classe Java, ou un paquet Java, ou autre chose, selon cette autre langue. Typiquement puisque les " modules "ont tendance à être des langages procéduraux, je pencherais plutôt pour dire classe Java, mais je pense que la ligne est très floue à ce point et vous pourriez plaider paquet assez convaincant.
instanceoftom's comment clouée it - différentes langues ont différentes définitions de paquet et de module. Il n'y a donc pas de réponse agnostique à cette question.
j'essaierai 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 essentiellement juste un mécanisme pour organiser des classes Java, interfaces etc dans les espaces de noms. Ils besoin de structure hiérarchique.package
s n'ont pas le statut de première classe. Il pourrait également être intéressant de noter que "151920920 proposé pour Java 7 sont également parfois appelésmodule
. -
Modula:
module
S, même concept quepackage
s de Java. Ne nécessite pas de structure hiérarchique. -
C#:
namespaces
, même concept quepackage
s de Java. Ne pas exiger 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 lepackage
s de Java. -
Scala:
package
s en Scala sont les mêmes quepackage
s en Java, à l'exception qu'ils ne nécessitent pas de structures hiérarchiques. Quelques d'autres restrictions, comme l'imposition d'une classe unique par fichier, ont également été assouplies.object
s à Scala sont également appelés modules, et ils jouissent également du statut de première classe. -
F#:
namespaces
in F# are same as c#namespace
S. En plus denamespace
s, F# a aussimodules
qui sont implémentés au niveau CLR comme classes .NET avec des méthodes statiques. Ce ne sont pas des entités de première classe.
il semble que, comme l'indiquent d'autres réponses, la notion de module varie d'une langue à l'autre, certaines ne l'ayant même pas (mais une contrepartie correspondante).
cependant, il semble que de nos jours les modules sont plus un concept et se réfère à un ensemble de fichiers de code source qui peuvent être partagés indépendamment. Selon cette définition, les fichiers Java jar ne sont pas des modules car ils contiennent des fichiers compilés par bytecode (.les fichiers de classe). Un système modulaire conforme à cette définition doit: être introduit en Java 9 ( voir cet article ) et est présent dans d'autres langues qui ont des gestionnaires de modules ou de paquets, nommant souvent directement les modules paquets (Go lang/go tool, Python/pip, PHP/Composer...) où les paquets sont généralement des modules emballés.
un paquet s'apparente plus à un namespace C++ qu'à un module. Un module s'apparente davantage à une classe enclosante qu'à un paquet.