Este documento presenta la programación modular en Java 9. Introduce el nuevo sistema de módulos de Java 9, el cual divide el código en módulos que especifican sus dependencias. También describe cómo los módulos reemplazan el uso de CLASSPATH y resuelven problemas como conflictos de versiones. Finalmente, demuestra la implementación de módulos mediante un ejemplo.
2. AGENDA
FABIO GARCIA RAMIREZ
Novedades Java 9
Proceso de Desarrollo antes de Java 9
Sistema de Módulos en Java 9
Demostración de Implementación de Módulos
3. Novedades Java 9
FABIO GARCIA RAMIREZ
Java 9 fue liberado el 21 de
Septiembre de 2017, tres años
después de la última versión(Java 8)
Esta version trae dos importantes
caracteristicas: el Sistema de
módulos y un nuevo esquema en la
manera de nombrar y liberar las
siguientes versions del JDK.
Otras novedades de interes son:
mejoras en la API de gestión de
colecciones(listas, conjuntos y
mapas), un Garbage Collector(G1)
multihilo, mejoras en la
herramienta Jshell(Consola REPL),
entre otras.
4. Proceso de Desarrollo antes de Java 9
FABIO GARCIA RAMIREZ
Escritura del Código Java en forma de Clases,
interfaces, enumeraciones y anotaciones
Organización del código fuente en paquetes
Código compilado en archivos JAR
La aplicación puede utilizar librerías, las cuales
normalmente se suministran en uno o mas archivos
JAR.
La aplicación se distribuye, localizando todos los
archivos JAR’s en el CLASSPATH
5. Proceso de Desarrollo antes de Java 9
FABIO GARCIA RAMIREZ
JARHELL
Acceso ilimitado de los tipos
públicos entre paquetes
Ocultamiento de Clases con
el mismo nombre en
diferentes paquetes
Conflicto de versiones
6. Proceso de Desarrollo antes de Java 9
FABIO GARCIA RAMIREZ
Vista de los JAR’s cargados en el CLASSPATH y como
se comunican entre ellos
7. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
JSR 376 es la especificación oficial que define y especifica el sistema de módulos
para Java(http://openjdk.java.net/projects/jigsaw/spec/ ). La especificación JEP 261
implementa el sistema.
Introduce una nueva clase de componente en Java, denominado el Modulo, el cual
es una colección de código y datos.
Introduce una nueva fase opcional: link time, el cual se ubica entre el tiempo de
compilación y el de ejecución, durante el cual un conjunto de módulos pueden ser
ensamblados y optimizados en una imagen en tiempo de ejecución(herramienta
jlink).
Adiciona opciones a las herramientas javac, jlink y java para especificar las rutas y
directorios donde están ubicados los módulos.
Presenta la gestión modular de los archivos JAR, mediante la inclusión del archivo
module-info.class
Adiciona el formato JMOD, la cual es una forma de empaquetado similar a JAR, pero
incluyendo código nativo y archivos de configuración(herramienta jmod)
La división del JDK en módulos, los cuales se pueden combinar en tiempo de
compilación, ensamblado, instalación o ejecución.
8. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
Objetivos
Configuración
Confiable
Encapsulaciónón
robusta
JDK/JRE Modular
9. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
Module1 Module3Module2 Module4
10. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
Nombre del
Modulo
Contenido
Dependencia
•Compuesto de 1 o mas Identificadores
cualificados en Java, separados por punto.
•Ejemplos: Modulo1, com.mod1,
•Paquetes
•Clases
•Interfaces
•Archivos de Configuración
•Listado de módulos que son requeridos
EXPORTACIONES
• Listado de paquetes que se
exportan(API publicas), haciéndolos
disponibles a otros módulos.
• Listado de paquetes que son
Abiertos(API con elementos públicos y
privados)
• Restricciones
11. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
Dependencia entre Módulos
12. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
Dependencia entre Módulos
13. Sistema de Módulos en Java 9
FABIO GARCIA RAMIREZ
Representación Gráfica de dependencia entre módulos