Quelle est la différence entre "package" et "module"

j'utilise Java où nous n'avons que des paquets. Je sais qu'il existe d'autres langages de programmation qui incluent aussi des modules.

quelle différence?

Merci

30
demandé sur OscarRyz 2010-09-10 01:59:19

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.

23
répondu T.J. Crowder 2010-09-09 22:05:19

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és module .

  • Modula: module S, même concept que package s de Java. Ne nécessite pas de structure hiérarchique.

  • C#: namespaces , même concept que package 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 le package s de Java.

  • Scala: package s en Scala sont les mêmes que package 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 de namespace s, F# a aussi modules 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.

18
répondu missingfaktor 2010-09-10 10:22:53

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.

5
répondu Josuah Aron 2015-09-09 12:51:39

un paquet s'apparente plus à un namespace C++ qu'à un module. Un module s'apparente davantage à une classe enclosante qu'à un paquet.

0
répondu user207421 2010-09-10 05:34:01