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
packages, que básicamente es solo un mecanismo para organizar clases Java, interfaces, etc. en espacios de nombres. Requieren estructura jerárquica.packages no tiene estado de primera clase. También podría valer la pena señalar que a veces se hace referencia a lossuperpackagepropuestos para Java 7 comomodules.module:modules, igual en concepto alpackages de Java. No requiere estructura jerárquica.C #:
namespaces, igual en concepto a lospackages 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:
modules, igual en concepto alpackages de Java.Scala: el
packages en Scala es igual que elpackages 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.objecten Scala también se conocen como módulos, y también disfrutan del estado de primera clase.F #: los
namespacesdenamespacesen F # son los mismos que losnamespaceC #. Además de losnamespaces, F # también tienemodulesque 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.