web-dev-qa-db-ja.com

「パッケージ」と「モジュール」の違いは何ですか?

Javaパッケージのみがある場合。

違いは何ですか?

32
OscarRyz

ボイド内のセマンティクスを比較することは困難です。 (他の言語とはどういう意味ですか?)「モジュール」は、Javaクラス、またはJavaパッケージ、または完全に何か他のものに応じて、通常、「モジュール」は手続き型言語に由来する傾向があるため、Javaクラスですが、この行はvery fuzzyだと思いますその時点で、あなたはパッケージを非常に説得力を持って議論することができます。

24
T.J. Crowder

instanceofTomのコメントはそれを釘付けにした-言語が異なれば、パッケージとモジュールの定義も異なります。したがって、この質問に対する言語に依存しない答えはありません。

私が知っているいくつかの言語の観点から答えようとします:

  • Java:packagesの概念があり、これは基本的にJavaクラス、インターフェースなどを名前空間に整理するためのメカニズムです。階層構造が必要です。packagesにはファーストクラスのステータスはありません。また、Java 7に対して提案されたsuperpackagesは、時々modulesと呼ばれることもあります。

  • モジュール:modules、Javaのpackagesと同じ概念です。階層構造は必要ありません。

  • C#:namespaces、Javaのpackagesと同じ概念です。階層構造は必要ありません。

  • C++:namespaces、名前が示すように、これらは単なる名前空間です。階層構造は必要ありません。

  • Haskell:modules、Javaのpackagesと同じ概念です。

  • Scala:packages in ScalaはJavaのpackagesと同じですが、階層構造を必要としない点が異なります。one-public-class-per-fileのようないくつかの制限も緩和されました。 objects in Scalaはモジュールとも呼ばれ、彼らは一流のステータスも享受しています。

  • F#:F#のnamespacesは、C#namespacesと同じです。 namespacesに加えて、F#にはmodulesもあります。これは、静的メソッドを持つ.NETクラスとしてCLRレベルで実装されます。彼らは一流のエンティティではありません。

18
missingfaktor

他の答えが述べているように、モジュールの概念は言語によって異なり、一部の言語には対応していません。

ただし、今日のモジュールは概念であり、独立して共有できるソースコードファイルのセットを指しているようです。この定義に従って、Java jarファイルはバイトコードコンパイルファイル(.classファイル)を含むため、モジュールではありません。この定義に準拠するモジュールシステムは、Java 9( この記事を参照 )、モジュールまたはパッケージマネージャーを持つ他の言語に存在し、多くの場合、モジュールに直接名前を付けますpackages(Go lang/goツール、Python/pip、PHP/Composer ...)パッケージは通常、パックされたモジュールです。

5
Josuah Aron

Java Platform Module System または Java-9 のリリース時にJPMSが導入されました。そのときからJavaにはpackagesmodulesの両方があります。これらの違いは何ですか?

パッケージとは何ですか?

パッケージは、関連するクラスとインターフェイスのセットを整理する名前空間です。

モジュールとは何ですか?

モジュールは、関連するJavaパッケージと関連ファイルと記述子ファイルのコレクションです。このファイルには、このモジュールによって公開されているパッケージ/リソース、現在のモジュールおよびその他のパッケージで使用されているパッケージ情報。

Javaパッケージの上位レベルの集約としてのモジュール。モジュールを使用すると、いくつかのパッケージを単一の論理ユニットに整理し、システム全体として配布できます。 JPMSは、どのパッケージがユーザーに表示されるかを制御する方法を提供します。

4
Anton Balaniuc

パッケージは、モジュールというよりはC++名前空間に似ています。モジュールは、パッケージというよりも、クラスを囲むクラスに似ています。

0
user207421