В чем разница между «пакетом» и «модулем»? - PullRequest
32 голосов
/ 10 сентября 2010

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

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

Ответы [ 5 ]

24 голосов
/ 10 сентября 2010

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

18 голосов
/ 10 сентября 2010

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

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

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

  • Modula: module s, аналогично по концепции Javapackage s.Не требуется иерархическая структура.

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

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

  • Haskell: module s, в принципе то же, что и в Java package s.

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

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

5 голосов
/ 09 сентября 2015

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

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

4 голосов
/ 12 ноября 2018

Модульная система платформы Java или JPMS была введена после выпуска . Начиная с этого времени Java имеет и packages и modules. Так в чем же разница между ними?

Что такое пакет?

Пакет - это пространство имен, которое организует набор связанных классов и интерфейсы.

Что такое модуль?

Модуль - это набор связанных пакетов Java и связанных ресурсов с файлом дескриптора, который содержит информацию о том, какие пакеты / ресурсы представлены этим модулем, какие пакеты используются текущим модулем, и некоторую другую информацию.

Мы можем рассматривать модуль Java как более высокий уровень агрегации над пакетами. Модуль позволяет вам организовать несколько пакетов в одну логическую единицу и распределить их как одну целую систему. Также JPMS предоставляет способ контролировать, какие пакеты видны пользователям.

0 голосов
/ 10 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...