ORIGEN DE JAVA
Sun Microsystems, líder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo ha sido "the netwokr is the computer", es quien ha inventado el lenguaje Java, en un intento de resolver simultáneamente todos los problemas que se planteaban a los desarrolladores de software por la proliferación de arquitecturas incompatibles, tanto entre las diferentes máquinas como entre los diversos sistemas operativos y sistemas de ventanas que funcionan sobre una misma máquina, añadiendo la dificultad de crear aplicaciones distribuidas en una red como Internet.
Yo he conocido, varias versiones distintas sobre el origen, concepción y desarrollo de Java.
Sun Microsystems decidió intentar introducirse en el mercado de la electrónica de consumo y desarrollar programas para pequeños dispositivos electrónicos. Tras unos comienzos dudosos, Sun decidío crear una filial, denominada FirstPerson Inc., para dar margen de maniobra al equipo responsable del proyecto.
El mercado inicialmente prevsito para los programas de FirstPerson eran los equipos domésticos: microondas, tostadoras y, fundamentalmente, televisión interactiva. Este mercado, dada la falta de sofisticación de los usuarios, requería unas interfaces mucho más cómodas e intuitivas que los sistemas de ventanas que proliferaban en el momento.
James Gosling, el miembro del equipo con más experiencia en lenguajes de programación, decidió que las ventajas de eficiencia de C++ no compensaban el gran coste de pruebas y depuración. Los lenguajes como C o C++, deben ser compilados para un chip, y si se cambia el chip, todo el software debe compilarse de nuevo. Esto supone un gran problema ya que encarece mucho los desarrollos y el problema es especialmente acusado en el campo de la electrónica de consumo La aparición de un chip más barato y, generalmente, más eficiente, conduce inmediatamente a los fabricantes a incluirlo en las nuevas series de sus cadenas de producción, por pequeña que se la diferencia en precio, ya que, multiplicada por la tirada masiva de los aparatos, supone un ahorro considerable
Gosling había estado trabajando en su tiempo libre en un lenguaje de programación que él había llamado Oak, según parece el nombre se debe al roble que se veía por la ventana de su casa.
El primer proyecto en el que se aplicó este lenguaje recibió el nombr de proyecto Green y consistía en un sistema de control completo de los aparatos electrónicos y el entorno de un hogar. Se construyó un ordenador experimental denominado *7 (Star Seven). El sistema presentaba una interfaz basada en la representación de la casa de forma animada y el control se llevaba a cabo mediante una pantalla sensible al tacto. En el sistema aparecía Duke, la actual mascota de Java. Posteriormente se aplicó a otro proyecto denominado VOD (Video On Demand) en el que se empleaba como interfaz la televisión interactiva. Ninguno de estos proyectos se convirtió nunca en un sistema comercial, pero fueron desarrollados enteramente en un Java primitivo.
Una vez que en Sun se dieron cuenta de que a corto plazo la televisión interactiva no iba a ser un gran éxito, urgieron a FirstPerson a desarrollar con rapidez nuevas estrategias que produjeran beneficios. No lo consiguieron y FirstPerson cerró en la primavera de 1994.
Pese a lo que parecía ya un olvido definitivo, Bill Joy, cofundador de Sun y uno de los desarrolladores principales del Unix de Berkeley, juzgó que Internet podría llegar a ser el campo de juego adecuado para disputar a Microsoft su primacía casi absoluta en el terreno del software, y vio en Oak el instrumento idóneo para llevar a cabo estos planes.
CRONOLOGIA
En 1994 eclosionó el fenómeno web y Oak fue rebautizado como Java. El lenguaje Java fue presentado en sociedad en agosto de 1995. En unmomento de inspiración, sus creadores decidieron utilizar el lenguaje para desarrollar un browser al que se llamó WebRunner, que fue ensayado con éxito, arrancando en ese momento el proyecto Java/HotJava. HotJava fue un browser totalmente programado en Java y capaz así mismo de ejecutar código Java.
A lo largo de 1995 tanto Java, su documentación y su código fuente como HotJava
pudieron obtenerse para múltiples plataformas al tiempo que se introducía soporte para Java
en la versión 2.0 del navegador Netscape.
La versión beta 1 de Java despertó un inusitado interés y se empezó a trabajar para
que Java fuera portable a todos los sistemas operativos existentes.
En diciembre de 1995 cuando se dio a conocer la versión beta 2 de Java y Microsoft e
IBM dieron a conocer su intención de solicitar licencia para aplicar la tecnología Java, su
éxito fue ya inevitable.
El 23 de enero 1996 se publicó oficialmente la versión Java 1.0 que ya se podía
obtener descargándola de la web.
A principios de 1997 aparece la versión 1.1 mejorando mucho la primera versión.
Java 1.2 (Java 2) apareció a finales de 1998 incorporando nuevos elementos. Según
Sun esta era la primera versión realmente profesional. El nombre de Java se rebautizó añadiendole el número 2 (Java 2). Las versiones siguieron nombrándose como Java2 1.x.
En mayo del 2000 se lanza la versión 1.3 del J2SE (Java 2 Standar Edition) y en febrero de 2002, se lanzó la versión 1.4 (la versión 1.4.1 es ya una beta).
J2SE 1.4 (6 de febrero de 2002) Se lanza J2SE 1.4. Este fue el primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como JSR 59.J2SE 5.0 (30 de septiembre de 2004) - Nombre clave: Tiger. (Originalmente numerado 1.5, esta notación aún es usada internamente.[4]) Desarrollado bajo JSR 176, Tiger añadió un número significativo de nuevas características comunicado de prensa. 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 conversion de tipos (type casting). (Especificado por JSR 14.)
Gracias a sus posibilidades para usarse en Internet. Actualmente Java no es sólo un lenguaje sino toda una plataforma que, en la práctica, abarca todos los segmentos posibles: desde la creación de pequeñas animaciones para páginas web hasta grandes aplicaciones distribuidas con acceso a bases de datos, pasando por componentes discretos, aplicaciones gráficas, etc.
Java es el primer lenguaje que tiene la virtud de ser compilado e interpretado de forma simultánea. Cuando un programador realiza una aplicación o un applet en Java y lo compila, en realidad, el compilador no trabaja como un compilador de un lenguaje al uso. El compilador Java únicamente genera el denominado ByteCode. Este código es un código intermedio entre el lenguaje máquina del procesador y Java. Este código no es ejecutable por sí mismo en ninguna plataforma hardware, pues no se corresponde con el lenguaje de ninguno de los procesadores que actualmente se conocen (habrá que esperar a ver qué ocurre con los procesadores Java).
Para ejecutar una aplicación Java es necesario disponer de un mecanismo que permita ejecutar el ByteCode. Este mecanismo es la denominada Máquina Virtual Java (JVM). En cada plataforma (Solaris, Linux, Windows, HP-UX, MacOS, etc) existe una Máquina virtual específica.
Cuando el ByteCode llega a la máquina virtual, ésta lo interpreta pasándolo a código máquina del procesador donde se esté trabajando, así como ejecutando las intrucciones en lenguaje máquina que se deriven de la aplicación Java. Cuando el mismo ByteCode llega a diferentes plataformas, éste se ejecutará de forma correcta, pues en cada una de esas plataformas existirá la máquina virtual adecuada. Con este mecanismo se consigue la famosa multiplataforma de Java, en la que con sólo codificar una vez, podemos ejecutar en varias plataformas.
La Máquina Virtual Java (JVM) desempeña otras funciones, como la de aislar los programas Java al entorno de la JVM, consiguiendo una gran seguridad.
Esto tiene algunas desventajas, y la más clara es la velocidad de ejecución. Puesto que la JVM debe estar interpretando constantemente el ByteCode, se consume demasiado tiempo de procesador en realizar esta interpretación, que por otra parte no aporta nada a la aplicación, obteniendo así un bajo rendimiento. Para solucionarlo se han adoptado soluciones intermedias. Una de las más novedosas y útiles son los compiladores JIT (Just-In-Time). Estos compiladores están situados a la entrada de la JVM, de forma que según llega el ByteCode lo van compilando al lenguaje máquina del procesador. A diferencia de la interpretación, el compilador no ejecuta el BytCode, únicamente lo traduce y lo almacena en código nativo dentro de la JVM. Así, una vez que la aplicación está dentro de la JVM, ya se encuentra en lenguaje máquina y, por lo tanto, será directamente ejecutable, sin necesidad de interpretaciones, consiguiendo dotar de mayores rendimientos a la aplicación.
Todas las mejoras al lenguaje se centran básicamente en conseguir mejores tiempos de ejecución y dotar de mayores prestaciones a la Máquina virutal Java.
APIS DE LA PLATAFORMA JAVA
No hay mejor información que la descripción de los APIs que componen la plataforma Java para hacerse una idea de todo lo que se mueve alrededor. Aunque no todas las que aquí se citan están disponibles para su uso, ya que algunas se encuentran en fase de desarrollo, otras en fase de discusión pública para aporte de ideas y otras en fase beta.
JavaEnterprise: Conjunto de especificaciones para entornos corporativos
- JDBC API Java Database Connectivity, para permitir a aplicaciones o applets acceder a bases de datos de forma homogénea vía consultas SQL
- Java RMI Remote Method Invocation, inovación remota de métodos para aplicaciones distribuidas.
- Java IDL Puente de compatibilidad con el modelo estándar de objetos CORBa
- JNDI Java Naming and Directory Interface, proporciona servicios de directorios y localización de recursos en un entorno corporativo
- JAF JavaBeans Activation Framework, entorno para determinar el tipo de datos, encapsular el acceso a ellos, descubrir las acciones que se les puede aplicar e instanciar el componente JavaBean adecuado
JFC: Java Foundation Classes, jerarquía de clases para el desarrollo de aplicaciones gráficas e interfaces de usuario
- Swint Set Conjunto de pequeños componentes gráficos para aplicaciones: botones, pestañas, etc.
- Java 2D Extensión del AWT para el tratamiento de información gráfica bidimensional
Java Server API: API para el intercambio de información entre un servidor Web y aplicaciones que se ejecutan en su entorno.
Java Commerce API: API para transacciones comerciales en Internet
Java Media API: Conjunto de especificaciones para el acceso y utilización de información interactiva
- JMF Java Media Framework, conjunto de especificaciones para la arquitectura, protocolos e interfaces de programación para reproductores multimedia, captura y videoconferencia.
- Java Collaboration Especificación para la comunicación interactiva bidireccional
- Java Telephony Especificación para aplicaciones de telefonía
- Java Speech Especificación para el reconocimiento y síntesis de voz
- Java Animation Especificación para la manipulación y movimiento de objetos bidimensionales
- Java 3D Especificación para la manipulación de objetos tridimensionales
JavaMail API: Especificación para proporcionar un conjunto de clases abstractas que modelice un sistema de correo
Personal Java: Especificaciones para aparatos electrónicos de consumo conectables a redes, incluyendo televisores, teléfonos inteligentes, videoconsolas, etc
Java Smart Card: Especificaciones para tarjetas inteligentes, tipo tarjeta de crédito.
Embedded Java: Especificaciones para dispositivos electrónicos industriales con software embebido ejecutándose sobre sistemas operativos en tiempo real, incluyendo dispositivos de instrumentación, electrónica de procesos, etc.
EL PAQUETE DE DESARROLLO DE JAVA
Cualquier programador que desee usar el lenguaje puede hacerlo adquiriendo lo que se conoce como JDK (Java Development Kit), un paquete de desarrollo compuesto por el compilador Java, las librerías estándar, documentación, ejemplos y el llamodo JRE (Java Runtime Environment) o entorno de ejecución de Java.
La última versión del JDK es la 1.3 y se conoce como Java 2 Platform 1.3. Puede obtenerla para sus sistema operativo dela URL http://java.sun.com/products/j2se/1.3. En la misma dirección se encuentra el paquete de documentación de la plataforma estándar de Java.
Actualmente existen varias ediciones de la plataforma Java 2. La indicada en el enlace anterior es la conocida como estándar o J2SE (Java 2 Standard Edition), en la cual se incluyen los elementos necesarios para crear applets y aplicaciones Java corrientes. Existen otras ediciones, como la J2EE (Java 2 Enterprise Edition) y J2ME (Java Micro Edition). La primera de ellas está dirigida, como su propio nombre indica, a las empresas, facilitando elementos como los EJB (Enterprise Java Beans) y los servicios necesarios para diseñar aplicaciones distribuidas. La J2ME es una versión reducida para dispositivos móviles, como los Palm.
PAQUETES. PAQUETES JAVA
En Java las clases se almacenan, para su posterior reutilización, en el interior de paquetes.
La plataforma Java dispone de una serie de paquetes predefinidos como los que hemos usado en los ejemplos anteriores. En el paquete javax.swing, por ejemplo, se encuentran las clases relacionadas con interfaces de usario.
Aparte de los que podemos crear nosotros mismos, con finalidades específicas para nuestra actividad, la plataforma Java incluye infinidad de paquetes con clases multipropósito. Con ellas es posible crear interfaces de usuario, generar gráficos 2D y 3D, trabajar con audio, conectividad a redes, bases de datos, generar applets, etc.
Las clases de utilidad que forman parte del núcleo de Java se encuentran en paquetes cuyo nomb re empieza siempre con java. Entre éstos están java.math, java.lang o java.applet. Existen paquetes de extensiones a Java, cuyo nombre se inicia con javax. A éstos hay que añadir los creados por empresas, que suelen comenzar por com. y el nombre de la empresa o directamente el nombre de la empresa.
3 EJEMPLOS RAPIDOS
Veamos cómo crear un programa muy simple. Éste tan sólo deberá mostrar una cadena de caracteres.
- 1 Ejemplo:
class HolaMundo {
public static void main (String[] args) {
System.out.println("Hola mundo");
}
}
- 2 Ejemplo:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.UIManager;
class HolaMundoFrm extends JFrame {
public HolaMundoFrm() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
this.setSize(new Dimension(400, 300));
this.setTitle("Hola mundo");
}
protected void processWindowEvent(WindowsEvent e){
super.processWindowEvent(e);
if(e.getID() == WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
}
public class HolaMundoGrafico {
public HolaMundoGrafico(){
HolaMundoFrm frame = new HolaMundoFrm();
frame.setVisible(true);
}
public static void main (String[] args) {
new HolaMundoGrafico();
}
}
Observe que existe no una clase sino dos. La primera gestiona la ventana, estableciendo su título, dimensiones y un gestor para eventos que, en este caso concreto, tan sólo responde al cierre. La segunda clase es la aplicación, cuyo constructor crea una ventana y la muestra. El método main() se limita a crear un objeto de la clase aplicación.
- 3 Ejemplo
Un applet es un programa escrito en Java que se ejecuta en el interior de un cliente web, como Internet Explorer o Netscape Navigator
Como cualquier otro lenguaje, Java se usa para crear aplicaciones pero, además, tiene la particularidad especial de poder crear aplicaciones muy especiales, son los applets, que es una mini (let) aplicación (app) diseñada para ejecutarse en un navegador.
Ahora no se utiliza la salida por consola sino un método del objeto Graphics. Observe la sintaxis usada para indicar que HolaMundoapllet deriva de Applet.
import java.applet.Applet;
import java.awt.Graphics;
public class HolaMundoApplet extends Applet {
public void paint (Graphics g) {
g.drawString("Hola mundo", 100, 100);
}
}
La compilación de este applet se efectúa como la de cualquier otro programa, siendo el resultado un archivo de clase con byte code. Éste, no obstante, no será ejecutado directamente sino referencia desde un documento HTML.
html
body
Aquí esta el applet:
applet
code="HolaMundoApplet.class"
width=240 height=120
applet
body
html
JAVA 2: Manual de usuario y tutorial, 2.ª edición. Agustin Froute
--------------------------------------------------------------------------------------------------
La comunicación entre aplicaciones que se ejecutan de manera distribuida, en sistemas comunicados a través de algún tipo de red, no es nada nuevo y existen desde hace décadas mecanismos tales como CORBA (Common Object Request Broker Architecture), DCOM (Distributed Component Object Model) o Java RMI (Remote Method Invocation). Todos ellos se caracterizan por usar canales de comunicación a medida, lo cual no planteaba ningún problema en entornos cerrados como las redes locales de empresas y organismos, habituales antes de la difusión de Internet en estos ámbitos.
Los problemas de seguridad que plantea tener conectadas esas redes internas, antes cerradas, a Internet, para aprovechar los recursos de ésta, ha hecho necesario el uso de dispositivos como los cortafuegos, que impiden las intrusiones pero, al tiempo, dificultan la comunicación a través de esos canales específicos que citaba antes. La búsqueda de alternativas produjo como fruto la aparición de un nuevo abanico de soluciones basadas todas ellas en XML, un estándar abierto y con amplia difusión, y la pila de protocolos TCP/IP y HTTP, usados en la Web desde su nacimiento.
Un servicio Web es una aplicación que se ejecuta en un servidor, como puede hacerlo una página PHP o bien un CGI, pero que atiende a solicitudes que tienen la forma de mensajes SOAP. Este protocolo permite a los clientes indicar la función que quieren invocar, facilitando los parámetros asociados, y al propio servicio devolver la respuesta adecuada. Un mensaje SOAP es un documento XML con una serie de elementos predefinidos.
Para que los clientes puedan consumir un servicio Web antes tienen que localizar y, a continuación, conocer las funciones que expone: sus nombres, argumentos, etc. Ésta es la finalidad de los directorios UDDI y el lenguaje WSDL.