P á g i n a1 | 5
TEMA 067. ENTORNO DE DESARROLLO JAVA
Actualizado a 28/09/2020
P á g i n a2 | 5
1. TEMA 067. ENTORNO DE DESARROLLO JAVA
Se presenta a continuación una serie de conceptos importantes o novedosos relacionados con el lenguaje Java, así como algunas de las características que diferencian las distintas versiones.
1.1. LENGUAJE DE PROGRAMACIÓN JAVA
Las características de Java como lenguaje de programación son:
Cumple el paradigma de Orientación a Objetos, aunque para ser considerado puro (al estilo de otros lenguajes como Smalltalk) debería cumplir las siguientes características:
o Herencia o Encapsulación o Polimorfismo o Abstracción
o Todos los tipos predefinidos sean objetos
o Todas las operaciones se realizan mediante el paso de mensajes a objetos o Todos los tipos definidos por el usuario son objetos
En Java no se cumple que todos los tipos predefinidos son objetos, tal y como ocurre con los tipos primitivos:
o Números enteros (byte, short, int, long) o Números reales (float, double) o Carácter (char)
o Booleano o lógico (boolean)
Lenguaje fuertemente tipado el control de la memoria de las aplicaciones queda bajo el entorno de ejecución y S.O (proporciona más seguridad) a diferencia de C++ que es débilmente tipado (utiliza punteros), y por tanto no garantiza un entorno de ejecución estable de aplicaciones.
No soporta herencia múltiple de clases de forma estricta
o Extends: herencia de clases (una única clase): transmito métodos + propiedades
o Implements: implementación de interfaces (se pueden implementar varios interfaces en una misma clase). A partir de Java 8 (Ver más adelante) los interfaces pueden contener implementaciones por defecto de los métodos, y no sólo su signatura.
Compilado e interpretado: todo programa debe compilarse, generando un bytecode el cual es interpretado en una máquina virtual que lo interpreta.
No permite sobrecarga de operadores, aunque:
o permite sobrecarga de métodos o polimorfismo estático (métodos de clases con el mismo nombre, pero distintos argumentos)
o permite polimorfismo dinámico empleando clases y métodos abstractos que podrán ser redefinidos en clases hijas, con implementaciones diferentes según la clase que herede. La consecuencia es que se podrán definir objetos del mismo tipo (clase padre abstracta), con métodos que devolverán valores distintos según la instancia del objeto sea de una clase hija u otra (heredan de la clase abstracta y redefinen el método en cuestión)
Lenguaje multiplataforma: Bytecode. Un programa Java puede ejecutarse en entornos con distintos sistemas operativos (Windows, Linux, OS…) sin necesidad de recompilarse.
P á g i n a3 | 5
1.2. PLATAFORMAS JAVA
Cuando hablamos de Java muchas veces no nos circunscribimos únicamente a Java como lenguaje de programación, sino a una plataforma de desarrollo de aplicaciones que utiliza componentes y librerías escritas en el lenguaje de programación Java.
Java SE (Java Platform Standar Edition) es el conjunto de APIs estándar del lenguaje de programación Java, forma la funcionalidad core de Java para el desarrollo de aplicaciones.
Java EE (Java Platform Enterprise Edition) es un superconjunto de Java SE. Añade una serie de librerías para el desarrollo de aplicaciones empresariales de gran escala.
Java ME (Java Platform Micro Edition) es un subconjunto de Java SE para el desarrollo de programas que van a ejecutarse en dispositivos de pequeño tamaño como teléfonos móviles o electrodomésticos.
JavaFX está pensado para la construcción de aplicaciones RIA (Rich Internet Applications) mediante el uso de un API ligero para interfaces de usuario.
1.3. RESUMEN DE VERSIONES DE JAVA Y CAMBIOS FUNDAMENTALES
VERSIÓN PRINCIPALES CAMBIOS
15 (09/2020) Clases e interfaces sealed (no pueden heredarse o extender) (Experimental)
Nuevo recolector de basura ZGC 14 (03/2020) Mejora de las NullPointerException
Registros: simplifica la creación de clases que sólo tienen datos públicos 13 (09/2019) Bloques de texto
P á g i n a4 | 5
Expresiones switch mejoradas
12 (03/2019) Expresiones de conmutación o Switch expressions (experimental)
Shenandoah o nuevo recolector de basura (experimental) 11 (09/2018)
Incorpora restricciones de licencia, la distribución Oracle es de pago
Palabra reservada var para simplificar la declaración de variables dejando al compilador inferirlo en función del constructor del objeto
10 (03/2018) Incorpora la inferencia de tipos para variables locales
9 (09/2017)
Modularización, de manera que en tiempo de compilación puede restringirse el acceso a determinados paquetes, mediante la inclusión del archivo module- info.java
jshell o The Java Shell o consola REPL (Read-Eval-Print Loop)
Métodos privados en interfaces.
8 (03/2014)
Soporte para expresiones lambda y programación funcional
Soporte para la escritura de funciones en interfaces
Tipos Optional 7 (07/2011) Nueva biblioteca de E/S
6 (12/2006) Soporte de lenguaje de scripting: Javascript Rhino 5 (09/2004) Introducción de genéricos y anotaciones
Introducción de enumeraciones y varargs 1.4 (02/2002)
1.3 (05/2000) 1.2 (12/1998) 1.1 (02/1997) 1.0 (01/1996)
1.4. COMPILACIÓN
Modos de compilación / traducción
Compiladores AOT (Ahead-Of-time) y los compiladores JIT (Just in Time). La principal diferencia entre unos y otros es que los compiladores AOT compilan a código máquina nativo antes de la ejecución de la aplicación, mientras que los JIT compilan durante la ejecución. Dependiendo del tipo de aplicación puede convenir más un compilador u otro en caso de querer compilar a código nativo.
Método antiguo
1ª traducción: .java comp .class / .jar bytecode (código intermedio válido para cualquier HW y S.O). Es .jar si lo queremos distribuir.
2ª traducción: Escenario cliente: JRE (contiene la JVM) .jar / .class intérprete ejecución en plataforma
La JVM es una para cada escenario de plataforma, también puede estar como plugin del navegador, pero cada vez se tiende menos a eso.
Método actual
Se producen 2 compilaciones para evitar la ejecución en entorno cliente.
Escenario servidor: .class compilador JIT (Just in Time) ejecutable para un entorno de ejecución concreto
P á g i n a5 | 5 JRE tiene un JIT. Detecta un bytecode y ejecuta el JIT automáticamente.
1.5. CONCEPTOS RELACIONADOS
A lo largo de la evolución del lenguaje, aparecen otras consideraciones que deben tenerse en cuenta:
Empleo de anotaciones y tipos genéricos a partir de Java 5, actualización de la sintaxis y nuevas características desde Java 8, como las expresiones lambda, los streams, etc.
Actualización de librerías relacionadas con aspectos como los logs, JSON, XML, pruebas, HTTP, HTML, BBDD, mensajes, seguridad, etc.
En relación con el punto anterior, se mencionan algunos frameworks como Spring MVC, JSF, GWT, Grails, Struts 2, etc.
Entornos de desarrollo integrado (IDE) como Apache NetBeans, Eclipse e IntelliJ IDEA
Lenguajes basados en la plataforma Java: Kotlin, Clojure, Goovy, Scala
Herramientas empleadas para la construcción de aplicaciones o proyectos Java: Apache Maven, Gradle y Apache Ant.
Algunas certificaciones: Oracle Certified Professional Java SE 11 Developer, Oracle Certified Professional Java EE 7 Application Developer, Oracle Certified Professional Java EE 6 Enterprise Architetc