INTRODUCCIÓN
Estamos en unos días en los que cada vez más la informática invade más campos de nuestra
vida, estando el ciudadano medio cada vez más familiarizado con términos del mundo
informático, entre ellos, como no, los lenguajes de programación. A cualquier persona que
haya empleado alguna vez un ordenador le resultará familiar alguno de estos nombres: C,
Pascal, Cobol, Visual Basic, Java, Fortran ..... y a una persona ya más introducida en ese
mundillo posiblemente haya oído muchos otros: Oak, Prolog, Dbase, JavaScrip, Delphi,
Simula, Smalltalk, Modula, Oberon, Ada, BCPL, Common LISP, Scheme... En la actualidad se
podrían recopilar del orden de varios cientos de lenguajes de programación distintos, sino
miles.
Cabe hacerse una pregunta: ¿Para qué tanto lenguaje de programación?. Toda esta multitud
de nombres puede confundir a cualquier no iniciado que haya decidido aprender un
lenguaje, quien tras ver las posibles alternativas no sabe cual escoger, al menos entre los del
primer grupo, que por ser más conocidos deben estar más extendidos.
El motivo de esta disparidad de lenguajes es que cada uno ha sido creado para una
determinada función, está especialmente diseñado para facilitar la programación de un
determinado tipo de problemas, para garantizar seguridad de las aplicaciones, para obtener
una mayor facilidad de programación, para conseguir un mayor aprovechamiento de los
recursos del ordenador... Estos objetivos son muchos de ellos excluyentes: el adaptar un
lenguaje a un tipo de problemas hará más complicado abordar mediante este lenguaje la
programación de otros problemas distintos de aquellos para los que fue diseñado. El facilitar
el aprendizaje al programador disminuye el rendimiento y aprovechamiento de los recursos
del ordenador por parte de las aplicaciones programadas en este lenguaje; mientras que
primar el rendimiento y aprovechamiento de los recursos del ordenador dificulta la labor del
programador.
La pregunta que viene a continuación es evidente: ¿Para qué fue pensado Java?.
A esto responderemos en el siguiente apartado.
1.2 Características de Java
A continuación haremos una pequeña redacción de las características del lenguaje, que nos
ayudarán a ver para que tipo de problemas está pensado Java:
1.2.1 Simple
Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ “simplificada”. Los creadores de
Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase
complicado o fuente de errores en este lenguaje. La herencia múltiple, la aritmética de
punteros, por la gestión de memoria dinámica (que en Java se elimina de modo transparente
para el programador gracias al recogedor basura) son ejemplos de "tareas complicadas" de
C++ y en Java se han eliminado poco simplificado.
1.2.2 Orientado a Objetos
Posiblemente sea el lenguaje más orientado a objetos de todos los existentes; en Java todo, a
excepción de los tipos fundamentales de variables (int, char, long...) es un objeto.
1.1.1 Distribuido
Java está muy orientado al trabajo en red, soportando protocolos como TCP/IP, UDP, HTTP y
FTP. Por otro lado el uso de estos protocolos es bastante sencillo comparandolo con otros
lenguajes que los soportan.
1.1.2 Robusto
El compilador Java detecta muchos errores que otros compiladores solo detectarían en tiempo
de ejecución o incluso nunca. A esclarecer así por ejemplo " if(a=b) then ... " o " int i; h=i*2; "
son dos ejemplos en los que el compilador Java no nos dejaría compilar este código; sin
embargo un compilador C compilaría el código y generaría un ejecutable que ejecutaría esta
sentencia sin dar ningún tipo de error).
1.1.3 Seguro
Sobre todo un tipo de desarrollo: los Applet. Estos son programas diseñados para ser
ejecutados en una página web. Java garantiza que ningún Applet puede escribir o leer de
nuestro disco o mandar información del usuario que accede a la página a través de la red
(como, por ejemplo, la dirección de correo electrónico). En general no permite realizar
cualquier acción que pudiera dañar la máquina o violar la intimidad del que visita la página
web.
1.1.4 Portable
En Java no hay aspectos dependientes de la implementación, todas las implementaciones de
Java siguen los mismos estándares en cuanto a tamaño y almacenamiento de los datos.
Esto no ocurre así en C++, por ejemplo. En éste un entero, por ejemplo, puede tener un
tamaño de 16, 32 o más bits, siendo lo única limitación que el entero sea mayor que un short
y menor que un long int. Así mismo C++ bajo UNIX almacena los datos en formato little
endian, mientas que bajo Windows lo hace en big endian. Java lo hace siempre en little edian
para evitar confusiones.
1.1.5 Arquitectura Neutral
El código generado por el compilador Java es independiente de la arquitectura: podría
ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente
ejecuta el código generado por el compilador no es el procesador del ordenador
directamente, sino que este se ejecuta mediante una máquina virtual. Esto permite que los
Applets de una web pueda ejecutarlos cualquier máquina que se conecte a ella
independientemente de que sistema operativo emplee (siempre y cuando el ordenador en
cuestión tenga instalada una máquina virtual de Java).
1.1.6 Rendimiento medio
Actualmente la velocidad de procesado del código Java es semejante a la de C++, hay ciertos
pruebas estándares de comparación (benchmarks) en las que Java gana a C++ y viceversa.
Esto es así gracias al uso de compiladores just in time, compiladores que traduce los
bytecodes de Java en código para una determinada CPU, que no precisa de la máquina virtual
para ser ejecutado, y guardan el resultado de dicha conversión, volviéndolo a llamar en caso de
volverlo a necesitar, con lo que se evita la sobrecarga de trabajo asociada a la interpretación
del bytecode.
No obstante por norma general el programa Java consume bastante más memoria que el
programa C++, ya que no sólo ha de cargar en memoria los recursos necesario para la
ejecución del programa, sino que además debe simular un sistema operativo y hardware
virtuales (la máquina virtual). Por otro lado la programación gráfica empleando las librerías
Swing es más lenta que el uso de componentes nativos en las interfaces de usuario.
En general en Java se ha sacrificado el rendimiento para facilitar la programación y sobre todo
para conseguir la característica de neutralidad arquitectural, si bien es cierto que los avances
en las máquinas virtuales remedian cada vez más estas decisiones de diseño.
1.1.7 Multithread
Soporta de modo nativo los threads, sin necesidad del uso de de librerías específicas (como es
el caso de C++). Esto le permite además que cada Thread de una aplicación java pueda correr
en una CPU distinta, si la aplicación se ejecuta en una máquina que posee varias CPU. Las
aplicaciones de C++ no son capaces de distribuir, de modo transparente para el
programador, la carga entre varias CPU.
1.2 JAVA FRENTE A LOS DEMÁS LENGUAJES
Java es un lenguaje relativamente moderno. Su primer uso en una “tarea seria” de
programación fue la construcción del navegador HotJava por parte de la empresa Sun en
mayo de 1995, y fue a principios de 1996 cuando Sun distribuye la primera versión de Java. Es
esta corta edad lo que hace que Java esté más orientado al mundo web, que no existía
cuando, por ejemplo, C fue desarrollado.
También es esto lo que ha hecho que soporte de modo nativo (no mediante el uso de
librerías, como C) los threads, siendo posible aprovechar las ventajas de los sistemas
multiprocesadores.
Las ventajas fundamentales de Java frente a otros lenguajes son el menor periodo de
aprendizaje por parte del programador, llegando a ser un programador productivo en menos
tiempo (sencillez) y siendo posible desarrollar aplicaciones más rápido que en otros lenguajes
(sencillez y robustez), lo cual se traduce en el mundo empresarial en un ahorro de costes.
Sus cualidades de distribuido, seguro e independencia de la plataforma lo hacen ideal para
aplicaciones relacionadas con el mundo web; precisamente a esto es a lo que Java debe su
gran difusión y fama. El hecho de que sea independiente de la máquina y del sistema
operativo permite que distintas máquinas con distintos sistemas operativos se conecten a una
misma página web y ejecuten los mismos applets. Además la seguridad que garantiza Java
para los applets impiden que alguien trate de averiguar información sobre los usuarios que se
conectan a la página web o intente dañar sus máquinas.
En cuanto a su capacidad de soporte de threads y su capacidad de sacarle partido a sistemas
multiprocesador lo convierten en un lenguaje más “orientado hacia el futuro “. Estas
cualidades podrían dar pie a que algún día los rendimientos computacionales de Java sean
comparables con los de C++ y otros lenguajes que hoy son computacionalmente más
eficientes.
Leer mas...