una todas sería sentencia reutilización que paquetes paquete librerías librería libreria las importar funciones forma definición cuál crear correcta conjunto como bibliotecas java comparison module packages

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 los superpackage propuestos para Java 7 como module s.

  • module : module s, igual en concepto al package s de Java. No requiere estructura jerárquica.

  • C #: namespaces , igual en concepto a los package 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 al package s de Java.

  • Scala: el package s en Scala es igual que el package 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 de namespaces en F # son los mismos que los namespace C #. Además de los namespace s, F # también tiene modules 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.