"包"和"模块"之间有什么区别

Osc*_*Ryz 32 java comparison module package

我使用Java,我们只有包.我知道还有其他编程语言也包含模块.

有什么不同?

谢谢

T.J*_*der 24

在虚空中比较语义很难.(你的意思是什么?)"模块"可能类似于Java类,或Java包,或完全不同的东西,具体取决于其他语言.通常,因为"模块"往往来自过程语言,所以我倾向于使用Java类,但我认为这一行非常模糊,你可以非常令人信服地论证包.


mis*_*tor 18

instanceofTom的评论指出它 - 不同的语言对包和模块有不同的定义.因此,这个问题没有语言无关的答案.

我会尝试从我所知道的一些语言的角度回答它:

  • Java:它有一个packages 的概念,它基本上只是一种将Java类,接口等组织成命名空间的机制.它们需要分层结构.packages没有头等舱状态.值得注意的是,superpackage针对Java 7的提议有时也被称为modules.

  • Modula:modules,与Java的概念相同package.不需要分层结构.

  • C#namespaces:,在概念上与Java的相同package.不需要分层结构.

  • C++:namespaces正如名称所示,这些只是命名空间.不需要分层结构.

  • Haskell:modules,与Java的概念相同package.

  • Scala:packageScala中的packages与Java中的s 相同,只是它们不需要分层结构.还有一些限制,比如一个公共类每个文件也被放宽了.objectScala中的s也被称为模块,它们也享有一流的地位.

  • F#:namespaces在F#中与C#相同namespace.除了namespaces 之外,F#还在modulesCLR级别实现了.NET类和静态方法.他们不是一流的实体.


Ant*_*iuc 6

发布时引入了Java平台模块系统或JPMS 。从那时开始,Java同时具有packagesmodules。那么它们之间有什么区别呢?

什么是包裹?

包是一个命名空间,用于组织一组相关的类和接口。

什么是模块?

模块是相关Java软件包和带有描述符文件的关联资源的集合,该描述符文件包含有关此模块公开哪些软件包/资源,当前模块使用哪些软件包以及其他一些信息的信息。

我们可以将Java模块看作是软件包之上的更高级别的聚合。模块使您可以将几个软件包组织到一个逻辑单元中,并将它们作为一个完整的系统进行分发。JPMS还提供了一种控制哪些软件包对用户可见的方法。


小智 5

似乎正如其他答案所述,模块的概念因语言而异,有些甚至没有(但是相应的对应物).

但是,现在似乎模块更像是一个概念,它指的是一组可以独立共享的源代码文件.遵循此定义,Java jar文件不是模块,因为它们包含字节码编译文件(.class文件).符合此定义的模块系统将在Java 9中引入(参见本文),并且存在于具有模块或包管理器的其他语言中,通常直接命名模块(Go lang/go工具,Python/pip,PHP/Composer ...)其中包通常是打包模块.