Какая разница между "пакетом" и "модулем",

Я использую Java, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.

Какая разница?

Спасибо

Ответ 1

Трудно сравнить семантику в пустоте. (Какие другие языки вы имели в виду?) "Модуль" может быть аналогичен Java-классу или пакету Java или чему-то еще полностью, в зависимости от этого другого языка. Обычно, поскольку "модули" имеют тенденцию быть от процедурных языков, я склоняюсь к высказыванию Java-класса, но я думаю, что линия очень нечеткая в этот момент, и вы можете довольно убедительно утверждать пакет.

Ответ 2

экземпляр instanceofTom компилирует его - разные языки имеют разные определения пакета и модуля. Поэтому нет никакого языкового агностического ответа на этот вопрос.

Я постараюсь ответить на него с точки зрения некоторых языков, которые я знаю:

  • Java: он имеет концепцию package s, которые в основном представляют собой механизм организации классов Java, интерфейсов и т.д. в пространствах имен. Они требуют иерархической структуры. package не имеют статуса первого класса. Также стоит отметить, что superpackage, предлагаемый для Java 7, также иногда называют module s.

  • Modula: module s, то же самое в концепции Java package s. Не требуется иерархическая структура.

  • С#: namespaces, то же самое в концепции Java package s. Не требуется иерархическая структура.

  • С++: namespaces. Как видно из названия, это просто пространства имен. Не требуется иерархическая структура.

  • Haskell: module s, то же самое в концепции Java package s.

  • Scala: package в Scala такие же, как package в Java, за исключением того, что они не требуют иерархических структур. Еще несколько ограничений, таких как одно-открытый класс для файла, также были смягчены. object в Scala также называются модулями, и они также имеют статус первоклассного.

  • F #: namespaces в F # такие же, как С# namespace s. Помимо namespace s, F # также имеет modules, которые реализованы на уровне CLR как классы .NET со статическими методами. Они не являются первоклассными сущностями.

Ответ 3

Похоже, что, как утверждают другие ответы, понятие модуля варьируется от одного языка к другому, некоторые даже не имеют его (но соответствующий аналог).

Однако, похоже, что в настоящее время модули являются скорее концепцией и ссылаются на набор файлов исходного кода, которые могут совместно использоваться независимо. Следуя этому определению, Java jar файлы не являются модулями, так как они содержат файлы, скомпилированные байт-кодом (файлы .class). Модульная система, соответствующая этому определению, должна быть введена в Java 9 (см. Эту статью) и присутствует на других языках, у которых есть модули или менеджеры пакетов, часто непосредственно называя пакеты модулей (Go lang/go tool, Python/pip, PHP/Composer...), где пакет обычно является упакованным модулем.

Ответ 4

Пакет более похож на пространство имен С++, чем модуль. Модуль более похож на охватывающий класс, чем на пакет.