java - todas - ¿Cuál es la diferencia entre “paquete” y “módulo”?
que es import en java (4)
Yo uso Java donde solo tenemos paquetes. Sé que hay otros lenguajes de programación que también incluyen módulos.
¿Cual es la diferencia?
Gracias
El comentario de instanceofTom lo definió: los diferentes idiomas tienen diferentes definiciones de paquete y módulo. Por lo tanto, no hay una respuesta independiente del idioma a esta pregunta.
Trataré de responderlo desde la perspectiva de algunos de los idiomas que conozco:
Java: tiene un concepto de
package
s, que básicamente es solo un mecanismo para organizar clases Java, interfaces, etc. en espacios de nombres. Requieren estructura jerárquica.package
s no tiene estado de primera clase. También podría valer la pena señalar que a veces se hace referencia a lossuperpackage
propuestos para Java 7 comomodule
s.module
:module
s, igual en concepto alpackage
s de Java. No requiere estructura jerárquica.C #:
namespaces
, igual en concepto a lospackage
s de Java. No requiere estructura jerárquica.C ++:
namespaces
, como su nombre lo indica, estos son solo espacios de nombres. No requiere estructura jerárquica.Haskell:
module
s, igual en concepto alpackage
s de Java.Scala: el
package
s en Scala es igual que elpackage
s en Java, excepto que no requieren estructuras jerárquicas. También se han relajado algunas restricciones más, como una clase pública por archivo.object
en Scala también se conocen como módulos, y también disfrutan del estado de primera clase.F #: los
namespaces
denamespaces
en F # son los mismos que losnamespace
C #. Además de losnamespace
s, F # también tienemodules
que se implementan a nivel CLR como clases .NET con métodos estáticos. No son entidades de primera clase.
Es difícil comparar la semántica en el vacío. (¿A qué otros idiomas se refiere?) Un "módulo" puede ser análogo a una clase de Java, a un paquete de Java, o algo más, dependiendo de ese otro idioma. Normalmente, dado que los "módulos" tienden a ser de lenguajes de procedimiento, me inclino por decir la clase de Java, pero creo que la línea es muy borrosa en ese momento y podría argumentar el paquete de manera bastante convincente.
Parece que, como otras respuestas afirman, la noción de módulo varía de un idioma a otro, algunos incluso sin tenerlo (pero una contraparte correspondiente).
Sin embargo, parece que hoy en día los módulos son más un concepto y se refiere a un conjunto de archivos de código fuente que se pueden compartir de forma independiente. Siguiendo esta definición, los archivos jar de Java no son módulos, ya que contienen archivos compilados de bytecode (archivos .class). Un sistema modular que cumpla con esta definición debe ser introducido en Java 9 ( ver este artículo ) y está presente en otros idiomas que tienen administradores de módulos o paquetes, a menudo nombrando directamente paquetes de módulos (herramienta Go lang / go, Python / pip, PHP / Compositor ...) donde el paquete generalmente son módulos empaquetados.
Un paquete es más parecido a un espacio de nombres de C ++ que a un módulo. Un módulo es más parecido a una clase envolvente que a un paquete.