簡體   English   中英

“包裝”和“模塊”之間有什么區別?

[英]What's the difference between “package” and “module”?

我在只有軟件包的地方使用Java。 我知道還有其他編程語言也包含模塊。

有什么不同?

很難比較空白中的語義。 (您還說什么其他語言?)“模塊”可能類似於Java類,Java包或完全其他的東西,具體取決於該其他語言。 通常,由於“模塊”通常來自過程語言,因此我傾向於講Java類,但是我認為那一線模糊,可以令人信服地爭論一下程序包。

instanceofTom的評論已將其釘牢-不同的語言對包和模塊的定義不同。 因此,這個問題沒有語言不可知的答案。

我將嘗試從我所知道的一些語言的角度回答這個問題:

  • Java:它具有package的概念,基本上就是將Java類,接口等組織到名稱空間中的一種機制。 他們需要層次結構。 package沒有頭等艙狀態。 值得注意的是,為Java 7提議的superpackage有時也稱為module

  • modulemodule ,在概念上與Java的package相同。 不需要層次結構。

  • C#: namespaces ,在概念上與Java的package相同。 不需要層次結構。

  • C ++: namespaces ,顧名思義,它們只是名稱空間。 不需要層次結構。

  • Haskell: module ,在概念上與Java的package相同。

  • 斯卡拉: package S IN斯卡拉是一樣package在Java中S,只是他們不需要層次結構。 還放寬了一些限制,例如每個文件一個公共類。 Scala中的object s也稱為模塊,它們也享有一流的地位。

  • F#:F#中的namespaces與C# namespace相同。 除了namespace之外,F#還具有在CLR級別以靜態方法作為.NET類實現的modules 他們不是一流的實體。

發布時引入了Java平台模塊系統或JPMS。 從那時起,Java同時擁有packagesmodules 那么它們之間有什么區別呢?

什么是包裹?

包是一個命名空間,用於組織一組相關的類和接口。

什么是模塊?

模塊是相關Java軟件包和帶有描述符文件的關聯資源的集合,該描述符文件包含有關此模塊公開哪些軟件包/資源,當前模塊使用哪些軟件包以及其他一些信息的信息。

我們可以將Java模塊看作是軟件包之上的更高級別的聚合。 模塊使您可以將幾個軟件包組織到一個邏輯單元中,並將它們作為一個完整的系統進行分發。 JPMS還提供了一種控制哪些軟件包對用戶可見的方法。

似乎,正如其他答案所言,模塊的概念從一種語言到另一種語言是變化的,有些甚至不具有(但是是對應的對應語言)。

但是,如今的模塊似乎已成為一個概念,它指的是一組可以獨立共享的源代碼文件。 按照此定義,Java jar文件不是模塊,因為它們包含字節碼編譯文件(.class文件)。 符合此定義的模塊系統將在Java 9中引入( 請參閱本文 ),並以其他具有模塊或包管理器的語言提供,通常直接命名模塊 (Go lang / go工具,Python / pip,PHP / Composer ...),其中包裝通常是包裝好的模塊。

包與模塊更像是C ++名稱空間。 模塊與封裝類更像是一個封閉的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM