Home Notas Weblog Downloads Manuales Mis programas Diseño web Links Correo Información legal Mejor visto en ... FAQ Acerca del autor Menú
RSS 1.0

¿Qué es Java?

Por ICeman


Bueno, en un principio podemos decir que Java es un lenguaje de programación. Eso ya es sabido por todos, no me quiero enfocar tanto en el lenguaje Java, sino en la tecnología Java.

El problema inicial

Cuando aparecieron las primeras computadoras (ENIAC), se usaba la lógica cableada. Esto es, si bien la computadora era de uso general, el algoritmo o programa a ejecutar estaba seteado en el hardware mediante la conexión interna de cables. Para que la computadora hiciera algo distinto de lo que estaba haciendo, había que abrirla y cambiar todos los cables de lugar. La lógica cableada se sigue usando en las calculadoras de bolsillo y los relojitos chinos de $2.

En los '50s, un tipo llamado Von Neumann logró hacer una computadora distinta: el programa no estaba en el hardware, sino en la memoria de la computadora. Si se quería que hiciera otra cosa, en lugar de abrir la máquina, simplemente se le cargaba otro programa en la memoria.

Ya de por sí era un avance, pero... ¿cómo eran esos programas? Estaban en el lenguaje de la máquina, código binario. Cada código binario representa una instrucción distinta para esa máquina en particular, para cada microprocesador en particular. Si se quería hacer el mismo programa para dos máquinas distintas, hay que hacer dos programas totalmente distintos, ya que las instrucciones de las máquinas son distintas, a menos que sean del mismo modelo.

Si bien pasaron más de 50 años, las computadoras siguen usando la arquitectura de Von Neumann. El set de instrucciones de un micro Pentium es distinto al de un micro PowerPC (Mac).

Para tratar de remediar esto, se inventaron los lenguajes de programación, como C. La idea es que el lenguaje sea el mismo para todas las computadoras, y existan compiladores para los distintos micros que conviertan ese programa en C al código binario respectivo de los distintos micros para los cuales se compile. Una excelente idea, pero presenta tres problemas:

  1. No todas las personas tienen un compilador, o si lo tienen, no saben usarlo. Además, se pueden producir errores durante la compilación que hagan que los programas funcionen distinto.
  2. La aparición de software propietario, de código cerrado sin las fuentes (como el de Microsoft) hace que no se pueda portar el programa a otra plataforma.
  3. Mucho software se hace para que funcione en un sistema operativo específico (Windows, Linux) usando recursos disponibles en ese sistema operativo. Este tipo de software tiene una doble dependencia: instrucciones de micro y recursos del sistema operativo.

El problema seguía: queremos hacer programas que anden en cualquier computadora, sin importar su microprocesador o su sistema operativo. Programas que puedan correr en una Apple con Mac OSX, en una PC con Linux o una notebook con Windows, y en todas anden igual sin tener que compilar una versión distinta para cada caso.


La solución de Sun

A los chicos de Sun se les ocurrió la forma de solucionar todo esto, usando un método poco ortodoxo y por ello muy criticado.

La idea es crear una máquina virtual (VM), para cada micro y sistema operativo. Pero que esa máquina virtual sea internamente igual para todas las computadoras. La máquina virtual sería un software estándar de Sun, y eso no se discute. De modo que los programas se podrían ejecutar en esa máquina virtual, sobre ella.

La máquina virtual se interpone entre el programa a ejecutar, y el sistema operativo. Para ello, los programas no tienen que estar en el código de máquina de ningún micro, sino en el código de la máquina virtual.

Como además, se acostumbra a crear en los sistemas operativos un entorno de librerías con las funciones propias de ese sistema operativo (por ejemplo en Windows: GDI, DirectX, COM, OLE, ODBC, MDAC, etc.), en Java se hizo lo mismo:

  1. Un conjunto de librerías básicas comunes a todas las máquinas virtuales que ya vengan instaladas. A esas librerías se las llama librerías WO/RE.
  2. Otras librerías que sirvan para extender la máquina virtual, aunque no forman parte de la especificación de la máquina virtual en sí. Éstas son para agregar más funcionalidad.

Bien, ya está la máquina virtual y las librerías. Ahora, para hacer pleno uso de estos recursos, es necesario un lenguaje de programación que los aproveche al máximo. Ahí es donde entra Java como lenguaje. Java, el lenguaje desarrollado para este combo, es un lenguaje derivado de C++, totalmente orientado a objetos y a eventos, por lo que era en su momento (y si no fuera por Python lo seguiría siendo) el lenguaje de programación más avanzado del mundo.

Los programas en Java no se compilan, porque no hay instrucciones de micro, sino que se pseudo-compilan. Eso es para permitir que los fabricantes vendan el software (a diferencia de Perl y Python). Además, los scripts pseudo-compilados se interpretan más rápido que los no compilados.

¿Eso significa que Java es un lenguaje interpretado? sí y no. Todos los lenguajes son interpretados. Un ejecutable es un conjunto de instrucciones binarias que el microprocesador interpreta en tiempo real según su tabla interna de instrucciones. La pseudo-compilación de Java es una optimización para acelerar el tiempo de "ejecución" en la JVM.


Los applets

Hace 10 años se gestaban varias revoluciones tecnológicas, no solo Java. Más importante que Java, fue el gran invento de Tim Berners-Lee: la World Wide Web. Los ingenieros de Sun se avivaron de lo que venía, y adaptaron a Java a ello.

Crearon los applets. Un applet es un subprograma, un programita más simple que es llamado desde el navegador. El applet se encuentra insertado en la página web, y se descarga localmente al caché del navegador. Desde ahí se ejecuta. Los applets no tienen la función Main(), sino que la función llamada por el navegador es Init().Esta diferenciación sirve para ejecutar a los applets sin los privilegios con los que se ejecuta un programa normal.

Esta técnica de seguridad se llama sandboxing, y permite la ejecución segura del applet aislado en un entorno de seguridad. De este modo se evita que hayan applets virus que infecten a las personas por sólo entrar a una página.

En general los applets se usan para cosas triviales como scrollers, banners, quoters, marquesinas, botones con efectos, etc. Pero se pueden hacer programas mucho más complejos, como procesadores de texto, reproductores multimedia, etc.

Los servlets

Un servlet es lo contrario de un applet: es un subprograma que se ejecuta en el servidor web, y lo que le da al usuario es su salida estándar. Esa salida es una página web generada dinámicamente. Para los que alguna vez hicieron scripts CGI en Perl, es parecido, pero en Java.

Además existe JSP, que es como PHP y/o ASP, un lenguaje de combinación entre HTML y Java; el cual se procesa en el servidor devolviendo sólo HTML.

Java y JavaScript ¿Son lo mismo?

Nada que ver. JavaScript es un lenguaje creado por Sun y Netscape para agregar funcionalidad extra a las páginas web. Va mezclado con el HTML y lo procesa el navegador. Sirve para hacer efectitos en las páginas web. No se puede hacer un programa en JavaScript. Tiene ese nombre tan sólo porque su sintaxis es muy parecida.


JRE y JDK

Java es un estándar. Es por ello que todos los sistemas operativos deben traer una máquina virtual de Java. Bien, esto no se cumple. Windows ya no la trae.

Si tenés suficiente ancho de banda, no te preocupes. Te podés bajar una para Windows hecha por Sun. Hay dos JVMs:

  1. JDK o SDK: trae la máquina virtual con las librerías, y el compilador para que crees tus propios programas en Java.
  2. JRE: Es tan sólo la máquina virtual, sin compilador. Bajalo si sólo querés ejecutar programas de otros y no te interesa programar.

Ambas vienen en tres versiones:

  1. J2SE: Java edición estándar, es la más común para crear y ejecutar programas en Java. Aconsejado para uso hogareño.
  2. J2EE: Java edición empresarial, trae todas las librerías, incluso las más exóticas, y el motor servlet por si tenés un servidor web. Es demasiado para un usuario común.
  3. J2ME: Java edición micro, su máquina virtual sólo trae las librerías WO/RE. Útil para programar utilitarios de celulares, PDAs, agendas, etc.

Hay otra especificación, aún más reducida que J2ME, se llama JavaCard y es para hacer pequeños programitas que se ejecuten en las tarjetas chip, incluyendo las tarjetas SIM de los celulares G3.

Yo te recomiendo, si querés empezar, el JDK de J2SE. Todas estas máquinas virtuales las podés bajar del sitio de Java en español: http://www.java.com/es/.


XHTML válido CSS válido ¡Bajate Firefox! ¡Instalá el soporte Java ya! Algunos derechos reservados