01 Que Es Java
01 Que Es Java
01 Que Es Java
QUE ES JAVA
Es una tecnología que incluye un lenguaje de programación y una plataforma de desarrollo
La plataforma Java
Por definición, una plataforma es el ambiente hardware o software sobre el cual se puede
ejecutar un programa. La mayoría de las plataformas actuales se pueden describir como una
combinación de un sistema operativo y su hardware subyacente; por ejemplo, un pc con su
sistema operativo Windows se denomina comúnmente plataforma Windows, una notebook con
una distribución Linux se denomina plataforma Linux y un celular con Android se conoce como
plataforma Android.
La plataforma Java difiere respecto de las plataformas mencionadas en el párrafo anterior
debido a que es una plataforma software que se ejecuta sobre las prestaciones que brinda otra
plataforma que gestiona el hardware (denominada plataforma base) (observe la figura 1):
En el lenguaje de programación Java, todo el código fuente se escribe en archivos de texto plano
con la extensión .java. Estos archivos fuente son entonces compilados por una herramienta de
la plataforma denominada compilador javac guardando el
resultado en archivos con el mismo nombre, pero con
extensión .class. Un archivo .class no contiene código nativo
para el procesador de la plataforma base, sino que contiene un
tipo de código denominado bytecode (lenguaje binario
intermedio). Los bytecode se pueden considerar el lenguaje
máquina de la JVM, debido a que la JVM es la encargada de
traducir los bytecode en el código máquina del ordenador, tal
como se puede ver en la figura 2.
Algunas JVM, tales como Java SE HotSpot (la versión creada por Oracle) incorporan tareas
adicionales en tiempo de ejecución que aumentan el rendimiento de la aplicación. Entre estas
tareas se incluyen encontrar cuellos de botella en el rendimiento y volver a recompilar (en
código nativo) secciones de código frecuente.
Características de Java
• Sencillo: La sintaxis de Java es similar a la de los lenguajes C y C++, pero evita
características semánticas que los vuelven complejos, confusos y poco seguros:
✓ En Java sólo existen tres tipos primitivos: los numéricos (enteros y reales), el tipo
carácter y el tipo booleano. Todos los tipos numéricos están firmados (esto significa
que a pesar de no ser objetos representan el mismo tipo y alcance en cualquier
plataforma que se ejecute)
✓ En Java, los arreglos, las matrices y las cadenas de caracteres son objetos, lo que
facilita su creación y manipulación.
✓ En Java, el programador no tiene que preocuparse de la gestión de la memoria.
Un sistema denominado "el recolector de basura" (garbage collector) se encarga
de asignar la memoria necesaria a la hora de crear objetos y de liberarla cuando
estos ya no se referencian en el dominio del programa (cuando ninguna variable
referencia al objeto).
✓ En Java, no existen preprocesadores ni archivos de encabezamiento. Las
instrucciones “define” de C se sustituyen por constantes en Java y las instrucciones
“typedef” de C se reemplazan por clases.
✓ En C y C++, se definen estructuras y uniones para representar tipos de datos
complejos, mientras que, en Java, se crean instancias de clases para representar
tipos de datos complejos.
✓ En C++, una clase puede heredar varias clases, lo que puede generar problemas de
ambigüedad. Con el fin de evitar estos problemas, Java sólo autoriza la herencia
simple pero aporta un mecanismo de simulación de herencia múltiple mediante la
implementación de una o varias interfaces.
✓ En Java no existe la famosa instrucción goto, simplemente porque aporta una
complejidad a la lectura de los programas y porque a menudo se puede prescindir
de esta instrucción escribiendo un código más limpio. Además, en C y C++ se suele
utilizar el goto para salir de bucles anidados. En Java, se utilizan las instrucciones
break y continue, que permiten salir de uno o varios niveles de anidamiento.
✓ En Java, no es posible sobrecargar los operadores, para evitar problemas de
incomprensión del programa. Se preferirá crear clases con métodos y variables de
instancia.
Y, para terminar, en Java, no hay punteros sino referencias a objetos o celdas de un
arreglo o matriz (referenciadas por su índice), simplemente porque la gestión de
punteros es fuente de muchos errores en los programas C y C++.
• Orientado a objetos: Salvo los tipos de datos primitivos, todo en Java es concebido
como un objeto. Y, además, Java se ha provisto de clases incorporadas que encapsulan
los tipos primitivos (los wrappers). Por lo tanto, Java es un lenguaje de programación
orientado a objetos y diseñado según el modelo de otros lenguajes (C++, Eiffel,
SmallTalk, Objective C, Cedar/Mesa, Ada, Perl), pero sin sus defectos. Las ventajas de la
programación orientada a objetos de forma resumida son: un mejor dominio de la
complejidad (dividir un problema complejo en una serie de pequeños problemas), una
reutilización más sencilla, y una mayor facilidad de corrección y de evolución. Java
estándar está dotado de un conjunto de clases que permiten crear y manipular todo
tipo de objetos (interfaz gráfica, acceso a la red, gestión de entradas/salidas...).
• Distribuido: Java implementa los protocolos de red estándar, lo que permite desarrollar
aplicaciones cliente/servidor en arquitecturas distribuidas, con el fin de invocar
tratamientos y/o recuperar datos de máquinas remotas. Con este fin, Java estándar
cuenta con API´s que permiten crear aplicaciones cliente/servidor distribuidas.
• Interpretado: La ejecución de un programa Java se realiza mediante el intérprete JVM.
Esto hace que sea más lento. Sin embargo, conlleva también sus ventajas, en particular
el hecho de no tener que recompilar un programa Java de un sistema a otro porque
basta, para cada uno de los sistemas, con tener su propia máquina virtual.
Debido a que Java es un lenguaje interpretado, no es necesario editar los enlaces
(obligatorio en C++) antes de ejecutar un programa. En Java, por lo tanto, sólo hay dos
etapas, la compilación y la ejecución. La máquina virtual se encarga de la operación de
edición de enlaces en tiempo de ejecución del programa.
• Robusto: Java es un lenguaje fuertemente tipado y estricto. Por ejemplo, la declaración
de las variables debe ser obligatoriamente explícita en Java. Se verifica el código
(sintaxis, tipos) en el momento de la compilación y también en el momento de la
ejecución (gestión de excepciones), lo que permite reducir los errores y los problemas
de incompatibilidad de versiones.
Además, Java se encarga totalmente de la gestión de las referencias de los objetos y
el programador no tiene manera de acceder a ellos, lo que evita la sobreescritura
accidental de datos en memoria y la manipulación de datos corruptos.
• Seguro: Dados los campos de aplicación de Java, es muy importante que haya un
mecanismo que vigile la seguridad de las aplicaciones y los sistemas. El motor de
ejecución de Java (Java Runtime Environment, JRE) es el encargado de esta tarea.
El JRE se apoya en particular en el archivo de texto java.policy, que contiene información
relativa a la configuración de la seguridad. Si bien el JRE se describirá en mayor detalle
cuando se detallen los componentes de la plataforma Java, se puede adelantar que es
el encargado de gestionar el consumo de memoria de los objetos, y no el compilador,
como es el caso en C++.
Puesto que en Java no hay punteros sino referencias a objetos, el código compilado
contiene identificadores sobre los objetos que luego el JRE traduce en direcciones de
memoria: esta parte es totalmente opaca para los desarrolladores con el objetivo de
controlar que no se generen ni manipulen punteros en el espacio de memoria donde se
ejecuta la aplicación, y que tampoco se presenten violaciones de acceso.
Para lograr esto, en el momento de la ejecución de un programa Java, el JRE utiliza un
proceso denominado ClassLoader que realiza la carga del bytecode contenido en las
clases Java y a continuación, se analiza el bytecode.
Como Java es un lenguaje distribuido, se implementan los principales protocolos de
acceso a la red (FTP, HTTP, Telnet...). Se puede, pues, configurar el JRE con el fin de
controlar el acceso a la red de sus aplicaciones:
➢ Prohibir todos los accesos.
➢ Autorizar el acceso solamente a la máquina anfitriona de donde procede el código
de aplicación. Es la configuración por defecto para los applets Java.
➢ Autorizar el acceso a máquinas en la red externa (más allá del firewall), en el caso
de que el código de la aplicación también proceda de una máquina anfitriona de la
red externa.
➢ Autorizar todos los accesos. Es la configuración por defecto para las aplicaciones de
tipo cliente pesado.
El esquema precedente representa al lenguaje Java Stándar Editión versión 8 y muestra los
diferentes componentes de la plataforma Java.
• Java SE: conocida como Standard Edition es la edición más difundida de la plataforma
Java. Incorpora el JDK, necesario para crear aplicaciones de escritorio con o sin interfaz
gráfica de usuario, acceso al sistema de archivos, comunicación a través de redes,
concurrencia y otros servicios básicos.
• JavaFX: originalmente JavaFX era una alternativa a Java SE para el desarrollo de
proyectos de tipo RIA (Rich Internet Applications), con un núcleo más ligero y fácil de
distribuir, capacidad de aceleración 3D aprovechando la GPU, servicios avanzados para
producción de gráficos y animaciones, y un mecanismo simplificado para el diseño de
interfaces de usuario. JavaFX forma parte de Java SE desde la versión 7 de dicha edición
de la plataforma (y se eliminó de la misma a partir de la versión 13)
• Java EE: denominada Enterprise Edition de la plataforma Java, es la versión dirigida al
desarrollo de soluciones software que se ejecutarán en un servidor de aplicaciones. A
las capacidades de Java SE, la edición EE agrega servicios para gestionar la persistencia
de objetos en bases de datos, hacer posible la invocación remota de métodos, crear
aplicaciones con interfaz de usuario web, etc.
• Java ME: Micro Edition, está enfocada a la creación de programas que se ejecutarán
en sistemas con recursos limitados, tales como teléfonos móviles, electrodomésticos y
dispositivos de domótica o equipos para entornos empotrados como la Rasperry Pi y
similares.
Las ediciones de Java son en realidad especificaciones abstractas de los servicios y modos de
funcionamiento de los distintos elementos de la plataforma. Existen múltiples
implementaciones de dichas especificaciones. Por ejemplo, se puede volver a destacar HotSpot,
la implementación de Oracle de la JVM, existiendo implementaciones alternativas de esa misma
especificación como por ejemplo Open JDK o la de IBM. Estos temas se retomarán más adelante.
Historia de Java
Java se creó como una herramienta de programación para ser
usada en un proyecto de set-top-box en una pequeña operación
denominada the Green Project en Sun Microsystems en el
año 1991. El equipo (Green Team), compuesto por trece personas
y dirigido por James Gosling, trabajó durante 18 meses en Sand
Hill Road; en Menlo Park; para su desarrollo.
El lenguaje se denominó inicialmente Oak (por un roble que había
fuera de la oficina de Gosling), luego pasó a
denominarse Green tras descubrir que Oak era una marca
comercial registrada para adaptadores de tarjetas gráficas, y
finalmente se renombró como Java.
No está claro si el término Java es un acrónimo o no, aunque
algunas fuentes señalan que podría tratarse de las iniciales de sus
diseñadores: James Gosling, Arthur Van Hoff, y Andy
Bechtolsheim. Otros abogan por el siguiente
acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo más"). La hipótesis que
más fuerza tiene es aquella que indica que Java debe su nombre a un tipo de café disponible en
una cafetería cercana del lugar donde se reunía el equipo; de ahí que el icono de Java sea una
taza de café caliente. Un pequeño signo que da fuerza a esta teoría es que los cuatro primeros
bytes (el número mágico) de los archivos.class que genera el compilador, son en hexadecimal,
0xCAFEBABE. A pesar de todas estas teorías, el nombre fue sacado al parecer de una lista
aleatoria de palabras.
El objetivo era implementar una máquina virtual y un lenguaje con una estructura y sintaxis
similar a C++. Entre junio y julio de 1994, tras una sesión maratónica de tres días el equipo
conformado por John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt
reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador
web Mosaic propiciaría que Internet se convirtiese en un medio interactivo, como el que
pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador
denominado WebRunner, que más tarde sería conocido como HotJava.
En 1994, realizaron una demostración de HotJava y la plataforma Java a los ejecutivos de Sun.
Java 1.0a pudo descargarse por primera vez en 1994, aunque recién el 23 de mayo de 1995,
durante las conferencias de SunWorld, se liberó al público tanto Java como HotJava. El
acontecimiento fue anunciado por John Gage, en ese entonces, director científico de Sun
Microsystems. El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por
parte de Marc Andreessen, vicepresidente ejecutivo de Netscape, de que Java sería soportado
en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial
JavaSoft para que se encargase del desarrollo tecnológico. Dos semanas más tarde la primera
versión de Java fue publicada.
La promesa inicial de Gosling era que Java cumple la premisa “Write Once, Run
Anywhere” (Escríbelo una vez, ejecútalo en cualquier lugar), proporcionando un lenguaje
independiente de la plataforma y un entorno de ejecución (la JVM) ligero y gratuito para las
plataformas más populares, de forma que los binarios (bytecode) de las aplicaciones Java
pudiesen ejecutarse en cualquier plataforma.
El entorno de ejecución era relativamente seguro y los principales navegadores web pronto
incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web.
Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un
enorme incremento en el número de clases y paquetes que componen la biblioteca estándar.
Desde J2SE 1.4, la evolución del lenguaje ha sido regulada por el JCP (Java Community Process),
que usa Java Specification Requests (JSRs) para proponer y especificar cambios en la plataforma
Java. El lenguaje en sí mismo está especificado en la Java Language Specification (JLS), o
Especificación del Lenguaje Java. Los cambios en los JLS son gestionados en JSR 901.
A continuación, se nombran las diferentes versiones liberadas hasta la fecha de elaboración
presente apunte
JDK 1.0: 23 de enero de 1996. Primer lanzamiento oficial.
• J2SE 1.2: 8 de diciembre de 1998. El término J2SE introduce el uso de las ediciones de la
plataforma Java. De esta manera el término J2SE (Java 2 Platform, Standard Edition)
reemplaza a JDK en la liberación de versiones y se formalizan los términos J2EE (Java 2
Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition) para indicar que
tipo de aplicaciones Java puede realizar con cada edición. También luego será conocida
con la palabra clave Playground. Esta edición incluye las siguientes mejoras
➢ La palabra reservada strictfp
➢ Reflexión en la programación
➢ Integración de la API Swing
Java SE 6: 11 de diciembre de 2006. Palabra clave Mustang. En esta versión, Sun cambió el
nombre “J2SE” por Java SE y eliminó el ".0" del número de versión. Los cambios más importantes
introducidos en esta versión son
• Incluye un nuevo framework y API´s que hacen posible la combinación de Java con
lenguajes dinámicos como PHP, Python, Ruby y JavaScript.
• Incluye el motor Rhino, de Mozilla, una implementación de Javascript en Java.
• Incluye un cliente completo de Servicios Web y soporta las últimas especificaciones para
Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP.
• Mejoras en la interfaz gráfica y en el rendimiento.
Java SE 7: lanzamiento en julio de 2011. Nombre clave Dolphin. Esta versión se trabajó durante
mucho tiempo, desde el año 2006 se encontraba en las primeras etapas de planificación
Java SE 8: marzo de 2014. Esta versión se convirtió en el estándar de uso por la gran mayoría de
las empresas por su estabilidad (aunque también favorecida por el hecho de que la siguiente
versión demorara 4 años en ser liberada). Resulta ideal para ser usada en el desarrollo de
aplicaciones de gestión o sistemas transaccionales y de back end en donde se prima la
estabilidad por encima de todo. Cabe destacar que incluye interesantes funcionalidades:
Java SE 9: lanzada el 21 de septiembre del 2017. A partir de esta versión Oracle ha optado por
liberar versiones en base al calendario en lugar de funcionalidades. Por tanto, cada nueva
versión se libera cada seis meses y no incluyen un gran volumen de novedades, lo cual no quita
que sean importantes. Sus principales aportes son:
➢ Soporte para lenguaje script a través del lenguaje de programación orientado a objetos.
➢ Incorpora API JSON liviana para generar y consumir flujos de datos JSON en forma de
documentos.
Java SE 10: lanzada el 20 de marzo del 2018. A partir de esta versión Oracle anuncia que una vez
liberada una nueva versión deja de dar soporte a las anteriores. La inferencia de tipos es el
principal cambio en esta nueva versión. También
➢ A partir de este momento se puede utilizar var para crear objetos sin necesidad de
definir el tipo.
➢ Se incorpora el método copyOf() para crear copias inmutables de List, Set y Map.
➢ Se mejora el garbage collector G1 añadiendo soporte para paralelismo y mejorando el
proceso de pausas en los peores escenarios.
➢ Mejora interna en la sincronización y pausas en los threads
Java SE 11: lanzada el 25 de septiembre del 2018. Como era de esperarse, la decisión de Oracle
de liberar una nueva versión cada 6 meses provocó que la versión 9 no reemplazara a la 8 por
una cuestión de estabilidad; peor aún la versión 10 pasó sin pena ni gloria. Esta versión
incorpora dos novedades muy importantes que afecta en todos los aspectos el desarrollo de
aplicaciones con tecnología Java: el cambio de licencia y el soporte a largo plazo asegurado
para el JDK.
cual pregona que brindará soporte por 4 años. Por otro lado, existen otras comunidades
que brindan soporte tales como Stackoverflow. También existe la posibilidad de pagar
licencia por el soporte a otras empresas con experiencia en esta tecnología tales como
IBM o RedHat.
Por otro lado, las novedades que brinda esta versión son
Java SE 12: lanzada el 19 de marzo del 2019. Esta no es una versión LTS (debido a que las
versiones LTS se brindan cada 3 años; por tanto, la siguiente versión LTS será la 17, que según lo
planificado saldrá en setiembre de 2021).
Mejoras experimentales:
Mejoras estables:
Java 13: lanzada el 17 de setiembre de 2019. Continúa las mejoras en switch mejorados, se
introducen los bloques de texto y se libera JavaFX del JDK.
Las nuevas versiones son liberadas cada 6 meses. Busque información sobre las diferencias entre
las diferentes versiones superiores hasta llegar a la actual versión estable liberada PUEDEN SER
OBJETOS DE MENCIÓN EN LAS EVALUACIONES
BIBLIOGRAFÍA
• Plataforma Java:
https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html
• Componentes de la Plataforma Java:
https://docs.oracle.com/javase/8/docs/index.html
• Características del Lenguaje Java:
https://www.oracle.com/technetwork/java/langenv-140151.html
• Como aprender a programar en Java 9na Edición. Deitel-Deitel. Pearson Educación,
México (2012).