Articulo de referencia

Paquete Java

Un paquete Java organiza las clases Java en espacios de nombres , [ 1 ] proporcionando un espacio de nombres único para cada tipo que contiene. Las clases en el mismo paquete pu...

Un paquete Java organiza las clases Java en espacios de nombres , [ 1 ] proporcionando un espacio de nombres único para cada tipo que contiene. Las clases en el mismo paquete pueden acceder a los miembros privados y protegidos del paquete de las demás.

En general, un paquete puede contener los siguientes tipos : clases, interfaces , enumeraciones, registros y tipos de anotación . Un paquete permite al desarrollador agrupar clases (e interfaces). Estas clases estarán relacionadas de alguna manera; por ejemplo, podrían estar vinculadas a una aplicación específica o realizar un conjunto de tareas determinado. Los programadores también suelen usar paquetes para organizar clases que pertenecen a la misma categoría o que ofrecen funcionalidades similares.

Uso de paquetes

En un archivo fuente Java, el paquete al que pertenecen las clases de este archivo se especifica con la packagepalabra clave `package` . Esta palabra clave suele ser la primera del archivo fuente. Como máximo, puede aparecer una declaración de paquete en un archivo fuente.

paquete java.awt.event ;

Para usar las clases de un paquete dentro de un archivo fuente Java, es conveniente importar las clases del paquete con una importdeclaración, que descalifica los espacios de nombres de la clase dentro del ámbito. La siguiente declaración

import java.awt.event.* ;

importa todas las clases del java.awt.eventpaquete, mientras que la siguiente declaración

import java.awt.event.ActionEvent ;

Importa únicamente la ActionEventclase del paquete. Después de cualquiera de estas declaraciones de importación, ActionEventse puede hacer referencia a la clase utilizando su nombre de clase simple:

ActionEvent myEvent = new ActionEvent ();

Las clases también se pueden usar directamente sin una declaración de importación usando el nombre completo de la clase. Por ejemplo,

java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent ( ) ;

No requiere una declaración de importación previa.

Javadoc y anotaciones para todo el paquete

La documentación que explica el paquete en su conjunto está escrita en Javadoc en un archivo llamado exactamente package-info.java . Ese archivo también es el lugar donde se utilizan las anotaciones en todas las clases del paquete. [ 2 ]

El paquete sin nombre

Si no se utiliza una declaración de paquete, las clases se colocan en un paquete sin nombre. Las clases en un paquete sin nombre no pueden ser importadas por clases en ningún otro paquete. [ 3 ] El tutorial oficial de Java desaconseja esto:

En términos generales, un paquete sin nombre se utiliza únicamente para aplicaciones pequeñas o temporales, o cuando se está comenzando el proceso de desarrollo. De lo contrario, las clases e interfaces deben estar en paquetes con nombre. [ 4 ]

Protección de acceso al paquete

Los miembros y clases públicos son visibles en todas partes, mientras que los miembros privados solo son visibles dentro de la misma clase. Las clases dentro de un paquete pueden acceder a las clases y miembros declarados con acceso predeterminado ( privado de paquete ), así como a los miembros de clase declarados con el protectedmodificador de acceso. El acceso predeterminado (privado de paquete) se aplica cuando una clase o miembro no se ha declarado como public, protectedo private. Por el contrario, las clases en otros paquetes no pueden acceder a las clases y miembros declarados con acceso predeterminado. Sin embargo, protectedse puede acceder a los miembros de clase declarados como desde las clases del mismo paquete, así como desde las clases de otros paquetes que sean subclases de la clase declarante. [ 5 ]

Creación de archivos JAR

Los archivos JAR se crean con la utilidad de línea de comandos jar. El comando

jar cf myPackage.jar *.class

Comprime todos los archivos .class en el archivo JAR myPackage.jar . La opción 'c' en la línea de comandos le indica al comando jar que cree un nuevo archivo comprimido. La opción 'f' le indica que cree un archivo. El nombre del archivo se especifica antes del contenido del archivo JAR.

Convenciones de nomenclatura de paquetes

Los paquetes suelen definirse mediante un patrón de nomenclatura jerárquico , con algunos niveles separados por puntos ( , pronunciado "dot"). Aunque los paquetes situados en niveles inferiores de la jerarquía se denominan a menudo "subpaquetes" de los paquetes superiores correspondientes, prácticamente no existe relación semántica entre ellos. La Especificación del Lenguaje Java establece convenciones de nomenclatura para evitar que dos paquetes publicados tengan el mismo nombre. Estas convenciones describen cómo crear nombres de paquete únicos, de modo que los paquetes ampliamente distribuidos tengan espacios de nombres únicos. Esto permite que los paquetes se instalen y cataloguen de forma separada, sencilla y automática..

En general, el nombre de un paquete comienza con el dominio de nivel superior de la organización, seguido del dominio de la organización y, a continuación, de los subdominios, enumerados en orden inverso. La organización puede entonces elegir un nombre específico para su paquete. Los componentes subsiguientes del nombre del paquete varían según las convenciones de nomenclatura internas de la organización. [ 6 ]

Por ejemplo, si una organización en Canadá llamada MySoft crea un paquete para manejar fracciones, nombrar el paquete ca.mysoft.fractionsdistingue el paquete de fracciones de otro paquete similar creado por otra empresa. Si una empresa alemana llamada MySoft también crea un paquete de fracciones, pero lo nombra de.mysoft.fractions, entonces las clases en estos dos paquetes se definen en un espacio de nombres único y separado. No hay ningún requisito de que el TLD deba ser el nombre del país de la empresa. Por ejemplo, muchos paquetes también usan otros TLD como org, com, etc. La biblioteca estándar de Java coloca todos los símbolos en el espacio de nombres java.*, javax.*, o jdk.*, aunque algunas clases asociadas con otras tecnologías pueden residir en otros espacios de nombres . Algunos proyectos, como Project Lombok, pueden no usar TLD en absoluto (todos los símbolos se encuentran en el espacio de nombres lombok).

El uso de TLD en los nombres de paquetes es una convención asociada principalmente con Java, pero rara vez se utiliza en otros lenguajes. En otros lenguajes como C++ y C#, basta con anteponer el nombre de la empresa a los nombres de los paquetes o espacios de nombres.

Las convenciones completas para desambiguar los nombres de los paquetes y las reglas para nombrarlos cuando el nombre de dominio de Internet no se puede usar directamente como nombre de paquete se describen en la sección 7.7 de la Especificación del Lenguaje Java. [ 7 ]

Paquetes principales en Java SE 8

Módulos

En Java 9 (lanzado el 21 de septiembre de 2017), se implementó la compatibilidad con " módulos ", una especie de colección de paquetes, como resultado del desarrollo del Proyecto Jigsaw. Anteriormente, los "módulos" se denominaban "superpaquetes" y su introducción estaba prevista inicialmente para Java 7.

Los módulos describen sus dependencias en una declaración ubicada en un archivo llamado module-info.java en la raíz de la jerarquía de archivos fuente del módulo. Desde Java 9 , el JDK puede verificar las dependencias del módulo tanto en tiempo de compilación como en tiempo de ejecución. El propio JDK está modularizado para Java 9. [ 8 ] [ 9 ] Por ejemplo, la mayor parte de la biblioteca estándar de Java es exportada por el módulo java.base.

Como ejemplo, la siguiente declaración de módulo declara que el módulo com.foo.bar depende de otro módulo com.foo.baz y exporta los siguientes paquetes: com.foo.bar.alpha y com.foo.bar.beta :

módulo com . foo . bar { requiere com . foo . baz ;exportaciones com . foo . bar . alfa ; exportaciones com . foo . bar . beta ; }

Véase también

Referencias

  1. James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Especificación del lenguaje Java, Tercera edición , ISBN 0-321-24678-0, 2005. En la Introducción se afirma: "El Capítulo 7 describe la estructura de un programa, que está organizado en paquetes similares a los módulos de Modula".
  2. "Capítulo 7. Paquetes y módulos" . docs.oracle.com . Consultado el 10 de diciembre de 2021 .
  3. "Capítulo 7. Paquetes" . Docs.oracle.com . Consultado el 15 de septiembre de 2013 .
  4. "Creación y uso de paquetes (Tutoriales de Java™ > Aprendizaje del lenguaje Java > Paquetes) " . docs.oracle.com
  5. "Controlar el acceso a los miembros de una clase (Tutoriales de Java™ > Aprender el lenguaje Java > Clases y objetos) " . docs.oracle.com
  6. Convenciones de código para el lenguaje de programación Java: 9. Convenciones de nomenclatura
  7. "Paquetes" . docs.oracle.com .
  8. "Resumen del módulo JDK" . Oracle Corporation . 23 de octubre de 2015. Archivado del original el 8 de diciembre de 2015. Consultado el 29 de noviembre de 2015 .
  9. "Comprensión de los módulos de Java 9" . Oracle Corporation . 1 de octubre de 2017. Consultado el 4 de octubre de 2022 .
  • Javadocs de la API de Java SE 24