Diferencia entre revisiones de «Java (lenguaje de programación)»

Contenido eliminado Contenido añadido
Camilo (discusión · contribs.)
m Revertidos los cambios de 189.141.146.119 a la última edición de Camilo
Línea 22:
Entre noviembre de [[2006]] y mayo de [[2007]], Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia [[GNU GPL]], de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la [[biblioteca (programación)|biblioteca de clases]] de Sun que se requiere para ejecutar los programas Java todavía no es [[software libre]]).
 
== Historia ==
blablabla
La tecnología Java se creó como una herramienta de programación para ser usada en un proyecto de [[Set-top box|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 en 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 ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a ''Java''.
 
El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus creadores: <cite>'''J'''ames Gosling, '''A'''rthur '''V'''an Hoff, y '''A'''ndy Bechtolsheim</cite>. Otros abogan por el siguiente acrónimo, <cite>'''J'''ust '''A'''nother '''V'''ague '''A'''cronym</cite> ("sólo otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de cafe caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el ''número mágico'') de los archivos .class que genera el compilador, son en hexadecimal, 0xCAFEBABE. Otros simplemente dicen que el nombre fue sacado al parecer de una lista aleatoria de palabras.
 
Los objetivos de Gosling eran 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 maratoniana de tres días entre John Gaga, James Gosling, Joy Naughton, Wayne Rosing y Eric Schmidt, el equipo 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, WebRunner, que más tarde sería conocido como [[HotJava]].
 
En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el 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, 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.
[http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.html]
Dos semanas más tarde la primera versión de Java fue publicada.
 
La promesa inicial de Gosling era ''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 [[applet]]s 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 [http://www.jcp.org/en/jsr/detail?id=63 JSR 901].
 
* '''JDK 1.0''' ([[23 de enero]] de [[1996]]) — Primer lanzamiento.
[http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.html comunicado de prensa]
 
* '''JDK 1.1''' ([[19 de febrero]] de [[1997]]) — Principales adiciones incluidas: [http://www.sun.com/smi/Press/sunflash/1997-02/sunflash.970219.0001.html comunicado de prensa]
** una reestructuración intensiva del modelo de eventos AWT (Abstract Windowing Toolkit)
** clases internas (inner classes)
** [[JavaBeans]]
** [[JDBC]] (Java Database Connectivity), para la integración de bases de datos
** [[RMI]] (Remote Method Invocation)
 
* '''J2SE 1.2''' ([[8 de diciembre]] de [[1998]]) — Nombre clave ''Playground''. Esta y las siguientes versiones fueron recogidas bajo la denominación '''Java 2''' y el nombre "J2SE" (Java 2 Platform, Standard Edition), reemplazó a JDK para distinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition). Otras mejoras añadidas incluían: [http://www.sun.com/smi/Press/sunflash/1998-12/sunflash.981208.9.html comunicado de prensa]
** la palabra reservada (keyword) <code>[[strictfp]]</code>
** [[Reflexión (informática)|reflexión en la programación]]
** la API gráfica ( [[Swing (biblioteca gráfica)|Swing]]) fue integrada en las clases básicas
** la máquina virtual (JVM) de Sun fue equipada con un [[compilador]] [[JIT]] (Just in Time) por primera vez
** [[Java Plug-in]]
** [[Java IDL]], una implementación de IDL (Lenguaje de Descripción de [[Interfaz (Java)|Interfaz]]) para la interoperabilidad con [[CORBA]]
** Colecciones ([[Collection class|Collections]])
 
* '''J2SE 1.3''' ([[8 de mayo]] de [[2000]]) — Nombre clave ''Kestrel''.
Los cambios más notables fueron:[http://www.sun.com/smi/Press/sunflash/2000-05/sunflash.20000508.3.html comunicado de prensa] [http://java.sun.com/j2se/1.3/docs/relnotes/features.html lista completa de cambios]
** la inclusión de la máquina virtual de [[HotSpot]] JVM (la JVM de HotSpot fue lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2)
** [[RMI]] fue cambiado para que se basara en [[CORBA]]
** [[JavaSound]]
** se incluyó el [[JNDI|Java Naming and Directory Interface]] (JNDI) en el paquete de bibliotecas principales (anteriormente disponible como una extensión)
** [[Java Platform Debugger Architecture]] (JPDA)
 
* '''J2SE 1.4''' ([[6 de febrero]] de [[2002]]) — Nombre Clave ''Merlin''. Este fue el primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como [http://www.jcp.org/en/jsr/detail?id=59 JSR 59]. Los cambios más notables fueron: [http://www.sun.com/smi/Press/sunflash/2002-02/sunflash.20020206.5.html comunicado de prensa][http://java.sun.com/j2se/1.4.2/docs/relnotes/features.html lista completa de cambios]
** Palabra reservada <code>[[Assertion (computing)|assert]]</code> (Especificado en [http://www.jcp.org/en/jsr/detail?id=41 JSR 41].)
** [[Expresiones regulares]] modeladas al estilo de las expresiones regulares [[Perl programming language|Perl]]
** [[Encadenación de excepciones]] Permite a una excepción encapsular la excepción de bajo nivel original.
** non-blocking NIO ([[New I/O|New Input/Output]]) (Especificado en [http://www.jcp.org/en/jsr/detail?id=51 JSR 51].)
** Logging API (Specified in [http://www.jcp.org/en/jsr/detail?id=47 JSR 47].)
** API I/O para la lectura y escritura de imágenes en formatos como [[JPEG]] o [[PNG]]
** Parser [[XML]] integrado y procesador [[XSLT]] ([[JAXP]]) (Especificado en [http://www.jcp.org/en/jsr/detail?id=5 JSR 5] y [http://www.jcp.org/en/jsr/detail?id=63 JSR 63].)
** Seguridad integrada y extensiones criptográficas (JCE, [[JSSE]], [[JAAS]])
** [[Java Web Start]] incluido (El primer lanzamiento ocurrió en marzo de 2001 para J2SE 1.3) (Especificado en [http://www.jcp.org/en/jsr/detail?id=56 JSR 56].)
 
* '''J2SE 5.0''' ([[30 de septiembre]] de [[2004]]) — Nombre clave: ''Tiger''. (Originalmente numerado 1.5, esta notación aún es usada internamente.[http://java.sun.com/j2se/1.5.0/docs/relnotes/version-5.0.html]) Desarrollado bajo [http://www.jcp.org/en/jsr/detail?id=176 JSR 176], Tiger añadió un número significativo de nuevas características [http://www.sun.com/smi/Press/sunflash/2004-09/sunflash.20040930.1.html comunicado de prensa]
** [[Programación genérica|Plantillas (genéricos)]] — provee [[conversion de tipos (type safety)]] en tiempo de compilación para colecciones y elimina la necesidad de la mayoría de [[typecasting (programming)|conversion de tipos (type casting)]]. (Especificado por [http://www.jcp.org/en/jsr/detail?id=14 JSR 14].)
** [[Metadatos]] — también llamados [[anotacione]]s, permite a estructuras del lenguaje como las clases o los métodos, ser etiquetados con datos adicionales, que puedan ser procesados posteriormente por utilidades de proceso de metadatos. (Especificado por [http://www.jcp.org/en/jsr/detail?id=175 JSR 175].)
** [[Autoboxing]]/unboxing — Conversiones automáticas entre [[tipo primitivo|tipos primitivos]] (Como los <code>int</code>) y [[clases de envoltura primitivas]] (Como {{Javadoc:SE|java/lang|Integer}}). (Especificado por [http://www.jcp.org/en/jsr/detail?id=201 JSR 201].)
** [[Enumeración|Enumeraciones]] — la palabra reservada <code>enum</code> crea una [[type safety|typesafe]], lista ordenada de valores (como <code>Dia.LUNES</code>, <code>Dia.MARTES</code>, etc.). Anteriormente, esto solo podía ser llevado a cabo por constantes enteras o clases construidas manualmente (enum pattern). (Especificado por [http://www.jcp.org/en/jsr/detail?id=201 JSR 201].)
** Varargs (número de argumentos variable) — El último parámetro de un método puede ser declarado con el nombre del tipo seguido por tres puntos (e.g. <code>void drawtext(String... lines)</code>). En la llamada al método, puede usarse cualquier número de parámetros de ese tipo, que serán almacenados en un array para pasarlos al método.
** [[Bucle]] <code>for</code> mejorado — La sintaxis para el bucle <code>for</code> se ha extendido con una sintaxis especial para iterar sobre cada miembro de un array o sobre cualquier clase que implemente {{Javadoc:SE|java/lang|Iterable}}, como la clase estándar {{Javadoc:SE|java/util|Collection}}, de la siguiente forma:
 
<!-- La tabla inferior está destinada a mostrar el ejemplo de código y texto siguiente en un ancho de 32 píxeles -->
<source lang="java">
void displayWidgets (Iterable<Widget> widgets) {
for (Widget w : widgets) {
w.display();
}
}
</source>
 
Este ejemplo itera sobre el objeto <code>Iterable</code> <code>widgets</code>, asignando, en orden, cada uno de los elementos a la variable <code>w</code>, y llamando al método <code>display()</code> de cada uno de ellos. (Especificado por JSR 201.)
|}
* '''Java SE 6''' ([[11 de diciembre]] de [[2006]]) — Nombre clave [https://mustang.dev.java.net/ ''Mustang'']. Estuvo en desarrollo bajo la [http://www.jcp.org/en/jsr/detail?id=270 JSR 270]. En esta versión, Sun cambió el nombre "J2SE" por '''Java SE''' y eliminó el ".0" del número de versión.[http://www.java.com/en/about/brand/naming.jsp]. Está disponible en [http://java.sun.com/javase/6/ http://java.sun.com/javase/6/]. Los cambios más importantes introducidos en esta versión son:
** Incluye un nuevo marco de trabajo y APIs 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''' — Nombre clave ''Dolphin''. En el año [[2006]] aún se encontraba en las primeras etapas de planificación. Se espera que su desarrollo dé comienzo en la primavera de 2006, y se estima su lanzamiento para 2008.
** Soporte para XML dentro del propio lenguaje.
** Un nuevo concepto de superpaquete.
** Soporte para closures.
** Introducción de anotaciones estándar para detectar fallos en el software.
*No oficiales:
** NIO2
** Java Module System.
** Java Kernel.
** Nueva API para el manejo de Dias y Fechas, la cual reemplazara las antiguas clases Date y Calendar.
** Posibilidad de operar con clases BigDecimal usando operandos.
 
[http://weblogs.java.net/blog/editors/archives/2004/09/evolving_a_lang.html]
 
Además de los cambios en el lenguaje, con el paso de los años se han efectuado muchos más cambios dramáticos en la biblioteca de clases de Java (''Java class library'') que ha crecido de unos pocos cientos de clases en JDK 1.0 hasta más de tres mil en J2SE 5.0. APIs completamente nuevas, como [[Swing (biblioteca gráfica)|Swing]] y [[Java 2D|Java2D]], han sido introducidas y muchos de los métodos y clases originales de JDK 1.0 están obsoletas.
 
En el [[2005]] se calcula en 4,5 millones el número de desarrolladores y 2.500 millones de dispositivos habilitados con tecnología Java.
 
== Filosofía ==