Skip to content

1. Java

1.1. Historia de Java

Para hablar de la historia de java, hay que remontarse a los años 80, donde C podía considerarse el lenguaje por antonomasia. Era un lenguaje versátil, que podía actuar a bajo nivel y resolvían problemas muy complejos. Era la cima de la programación estructurada, para resolver estos complejos algoritmos, se generaban grandes procedimientos con un código muy complicado de mantener a largo plazo. Por ello empezó a surgir como alternativa la programación orientada a objetos, y con ella nació C++. El objetivo de java era crear un lenguaje de programación parecido a C++ en estructura y sintaxis, fuertemente orientado a objetos, pero con una máquina virtual propia. Esto se hizo bajo el principio, de poder ser usado bajo cualquier arquitectura "Write Once, Run Anywhere (escríbelo una vez, ejecútalo en cualquier sitio)".

En 1992 se presenta el proyecto, con los prototipos a bajo nivel. Entre 1993 y 1994 se trabaja para poder presentar un prototipo funcional (hotJava) donde se ve todo el potencial que JAVA puede ofrecer En 1995 finalmente, es presentada la versión alpha de java, y un año después en 1996 es lanzado el primer JDK (JDK 1.0): software que provee herramientas de desarrollo para la creación de programas en java. El desarrollo de java a partir de entonces es imparable, se van presentando nuevos paquetes y librerías hasta la actualidad.

A día de hoy, se puede decir, que Java es uno de los lenguajes más importantes del mundo. Con una comunidad extendida en todos los componentes y más de 4 millones de desarrolladores, existen millones de dispositivos que lo usan. Además, tras el surgimiento de android, java es establecido como el lenguaje de programación para móviles más extendido del planeta.

En las primeras versiones de Java 1.1, 1.2 y 1.3 es donde el lenguaje va tomando forma, con la inclusión de tecnologías como JavaBeans, JDBC para el acceso a base de datos, RMI para las invocaciones en remoto, Collections para la gestión de múltiples estructuras de datos o AWT para el desarrollo gráfico, entre otros.

Una de las cosas que sucede en noviembre 2006 es que Sun Microsystems lo convierte en Open Source mediante una licencia GNU General Public License (GPL). Dando lugar en mayo de 2008 a lo que se conoce como OpenJDK, con OpenJDK 6.

Llegado julio de 2011 ve la luz Java 7, la cual trae como novedades el soporte de lenguajes dinámicos, dotando a la JVM de un soporte de mútiples lenguajes y una nueva librería I/O para el manejo de ficheros. También aparecen cosas menores, pero muy útiles como el manejo de String, dentro de la validación en una estructura switch, o la capacidad de poner guiones de subrayado como separadores de miles en los números para facilitar su lectura (p. ej. 1_000_000).

La última versión de Java distribuida es Java 8, aparecida en marzo de 2014. Entre las características de Java 8 se tiene el soporte para expresiones Lambda y uso de Streams, que permiten un estilo más similar a la programación funcional para los programas Java. Dentro de este enfoque más cercano a la programación funcional, también aparecen las transformaciones MapReduce. Ve la luz el Proyecto Nashorn para disponer de un engine Javascript y así poder incluir este lenguaje dentro de las aplicaciones Java. Otras cosas son un nuevo API Date y Time y la inclusión de JavaFX 8 dentro de la JDK de Java.

1.2. La Máquina Virtual Java

El lenguaje Java es a la vez compilado e interpretado. Con el compilador, se convierte el código fuente que reside en archivos cuya extensión es .java, a un conjunto de instrucciones que recibe el nombre de bytecodes, que se guardan en un archivo cuya extensión es .class. Estas instrucciones son independientes del tipo de ordenador. El intérprete ejecuta cada una de estas instrucciones en un ordenador específico (Windows, Macintosh, etc). Solamente es necesario, por tanto, compilar una vez el programa, pero se interpreta cada vez que se ejecuta en un ordenador. imagen mav java

Cada intérprete Java es una implementación de la Máquina Virtual Java (JVM). Los bytecodes posibilitan el objetivo de "write once, run anywhere", de escribir el programa una vez y que se pueda ejecutar en cualquier plataforma que disponga de una implementación de la JVM. Por ejemplo, el mismo programa Java puede ejecutarse en Windows 98, Solaris, Macintosh, etc. Java es, por tanto, algo más que un lenguaje, ya que la palabra Java se refiere a dos cosas inseparables: el lenguaje que nos sirve para crear programas y la Máquina Virtual Java que sirve para ejecutarlos. Como se puede ver en la figura, el API de Java y la Máquina Virtual Java forman una capa intermedia (Java platform) que aísla el programa Java de las especificidades del hardware (hardware-based platform). imagen capas java La Máquina Virtual Java (JVM) es el entorno en el que se ejecutan los programas Java. Su misión principal es la de garantizar la portabilidad de las aplicaciones Java. Define esencialmente un ordenador abstracto y especifica las instrucciones (bytecodes) que este ordenador puede ejecutar. El intérprete Java específico ejecuta las instrucciones que se guardan en los archivos cuya extensión es .class. Las tareas principales de la JVM son las siguientes:

  • Reservar espacio en memoria para los objetos creados

  • Liberar la memoria no usada (garbage collection)

  • Asignar variables a registros y pilas
  • Llamar al sistema huésped para ciertas funciones, como los accesos a los dispositivos
  • Vigilar el cumplimiento de las normas de seguridad de las aplicaciones Java Esta última tarea, es una de las más importantes que realiza la JVM. Además, las propias especificaciones del lenguaje Java contribuyen extraordinariamente a este objetivo:
  • Las referencias a arrays son verificadas en el momento de la ejecución del programa
  • No hay manera de manipular de forma directa los punteros
  • La JVM gestiona automáticamente el uso de la memoria, de modo que no queden huecos.
  • No se permiten realizar ciertas conversiones (casting) entre distintos tipos de datos.

1.3. El lenguaje Java

Java es un lenguaje de propósito general, de alto nivel, y orientado a objetos. Java es un lenguaje de programación orientado a objetos puro, en el sentido de que no hay ninguna variable, función o constante que no esté dentro de una clase. Se accede a los miembros dato y las funciones miembro a través de los objetos y de las clases. Por razones de eficiencia, se han conservado los tipos básicos de datos, int, float, double, char, etc, similares a los del lenguaje C/C++. La API de Java es muy rica, está formada por un conjunto de paquetes de clases que le proporcionan una gran funcionalidad. El núcleo de la API viene con cada una de las implementaciones de la JVM:

  • Lo esencial: tipos de datos, clases y objetos, arrays, cadenas de caracteres (strings), subprocesos (threads), entrada/salida (I/O), propiedades del sistema, etc.
  • Applets
  • Manejo de la red (networking)
  • Internacionalización
  • Seguridad
  • Componentes (JavaBeans)
  • Persistencia (Object serialization)
  • Conexión a bases de datos (JDBC) Java proporciona también extensiones, por ejemplo, define un API para 3D, para los servidores, telefonía, reconocimiento de voz, etc.