Я использую Java, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.
Какая разница?
Спасибо
Я использую Java, где у нас есть только пакеты. Я знаю, что есть другие языки программирования, которые также включают в себя модули.
Какая разница?
Спасибо
Трудно сравнить семантику в пустоте. (Какие другие языки вы имели в виду?) "Модуль" может быть аналогичен Java-классу или пакету Java или чему-то еще полностью, в зависимости от этого другого языка. Обычно, поскольку "модули" имеют тенденцию быть от процедурных языков, я склоняюсь к высказыванию Java-класса, но я думаю, что линия очень нечеткая в этот момент, и вы можете довольно убедительно утверждать пакет.
экземпляр 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 со статическими методами. Они не являются первоклассными сущностями.
Похоже, что, как утверждают другие ответы, понятие модуля варьируется от одного языка к другому, некоторые даже не имеют его (но соответствующий аналог).
Однако, похоже, что в настоящее время модули являются скорее концепцией и ссылаются на набор файлов исходного кода, которые могут совместно использоваться независимо. Следуя этому определению, Java jar файлы не являются модулями, так как они содержат файлы, скомпилированные байт-кодом (файлы .class). Модульная система, соответствующая этому определению, должна быть введена в Java 9 (см. Эту статью) и присутствует на других языках, у которых есть модули или менеджеры пакетов, часто непосредственно называя пакеты модулей (Go lang/go tool, Python/pip, PHP/Composer...), где пакет обычно является упакованным модулем.
Пакет более похож на пространство имен С++, чем модуль. Модуль более похож на охватывающий класс, чем на пакет.