Javaパッケージのみがある場合。
違いは何ですか?
ボイド内のセマンティクスを比較することは困難です。 (他の言語とはどういう意味ですか?)「モジュール」は、Javaクラス、またはJavaパッケージ、または完全に何か他のものに応じて、通常、「モジュール」は手続き型言語に由来する傾向があるため、Javaクラスですが、この行はvery fuzzyだと思いますその時点で、あなたはパッケージを非常に説得力を持って議論することができます。
instanceofTomのコメントはそれを釘付けにした-言語が異なれば、パッケージとモジュールの定義も異なります。したがって、この質問に対する言語に依存しない答えはありません。
私が知っているいくつかの言語の観点から答えようとします:
Java:package
sの概念があり、これは基本的にJavaクラス、インターフェースなどを名前空間に整理するためのメカニズムです。階層構造が必要です。package
sにはファーストクラスのステータスはありません。また、Java 7に対して提案されたsuperpackage
sは、時々module
sと呼ばれることもあります。
モジュール:module
s、Javaのpackage
sと同じ概念です。階層構造は必要ありません。
C#:namespaces
、Javaのpackage
sと同じ概念です。階層構造は必要ありません。
C++:namespaces
、名前が示すように、これらは単なる名前空間です。階層構造は必要ありません。
Haskell:module
s、Javaのpackage
sと同じ概念です。
Scala:package
s in ScalaはJavaのpackage
sと同じですが、階層構造を必要としない点が異なります。one-public-class-per-fileのようないくつかの制限も緩和されました。 object
s in Scalaはモジュールとも呼ばれ、彼らは一流のステータスも享受しています。
F#:F#のnamespaces
は、C#namespace
sと同じです。 namespace
sに加えて、F#にはmodules
もあります。これは、静的メソッドを持つ.NETクラスとしてCLRレベルで実装されます。彼らは一流のエンティティではありません。
他の答えが述べているように、モジュールの概念は言語によって異なり、一部の言語には対応していません。
ただし、今日のモジュールは概念であり、独立して共有できるソースコードファイルのセットを指しているようです。この定義に従って、Java jarファイルはバイトコードコンパイルファイル(.classファイル)を含むため、モジュールではありません。この定義に準拠するモジュールシステムは、Java 9( この記事を参照 )、モジュールまたはパッケージマネージャーを持つ他の言語に存在し、多くの場合、モジュールに直接名前を付けますpackages(Go lang/goツール、Python/pip、PHP/Composer ...)パッケージは通常、パックされたモジュールです。
Java Platform Module System または Java-9 のリリース時にJPMSが導入されました。そのときからJavaにはpackages
とmodules
の両方があります。これらの違いは何ですか?
パッケージとは何ですか?
パッケージは、関連するクラスとインターフェイスのセットを整理する名前空間です。
モジュールとは何ですか?
モジュールは、関連するJavaパッケージと関連ファイルと記述子ファイルのコレクションです。このファイルには、このモジュールによって公開されているパッケージ/リソース、現在のモジュールおよびその他のパッケージで使用されているパッケージ情報。
Javaパッケージの上位レベルの集約としてのモジュール。モジュールを使用すると、いくつかのパッケージを単一の論理ユニットに整理し、システム全体として配布できます。 JPMSは、どのパッケージがユーザーに表示されるかを制御する方法を提供します。
パッケージは、モジュールというよりはC++名前空間に似ています。モジュールは、パッケージというよりも、クラスを囲むクラスに似ています。