Tweeteame!
Este lenguaje de programación creado por Sun Microsystems a mediados de la década de los 90 es el lenguaje de programación más popular en la actualidad. Así lo demuestra el índice TIOBE.
El índice TIOBE trata de reflejar el "estado de salud" de los distintos lenguajes de programación. El índice reparte 100 puntos entre todos los lenguajes de programación existentes; el número de puntos que se lleva cada lenguaje depende del número de ofertas de trabajo que para dicho lenguaje haya en portales como Monster y similares, del número de respuestas que varios buscadores de Internet (entre ellos Google y Yahoo) devuelven al realizar consultas relacionadas con el lenguaje, del número de libros editados y vendidos sobre dicho lenguaje... y otras métricas similares. Como se puede ver en la figura 1, Java lidera dicho índice; y lo lleva liderando desde principios del 2001, con la excepción de unos pocos meses en torno a 2005, momento en el que fue temporalmente sobrepasado por C. Otro de los méritos que puede atribuirse es el liderar el ranking de Sourceforge de número de proyectos desarrollados en un determinado lenguaje. En abril del 2005 superó al actual tercer lenguaje de programación, C, y en noviembre del 2005 superó al actual segundo, C++.
Ranking del índice TIOBE con los 11 lenguajes de programación más populares
Java, al igual que su rival más directo (.NET), es mucho más que un simple lenguaje de programación, como podría ser el caso de C o C++. Es una plataforma de desarrollo de aplicaciones completa que proporciona contenedores web y lenguajes de script para la creación de páginas web dinámicas; soporte para componentes transaccionales distribuidos; mapeadores objetos relacionales para encargarse de la persistencia de la aplicación; colas de mensajería para el procesamiento asíncrono de tareas; soporte para desarrollo de aplicaciones para tarjetas inteligentes y otros dispositivos empotrados; soporte para desarrollo de aplicaciones para terminales móviles; un toolkit gráfico con soporte para animaciones 2D y 3D; soporte para el desarrollo de aplicaciones que se ejecutarán empotradas en un navegador; y un largo etcétera.
La plataforma se divide en tres grandes bloques. Uno de ellos, Java SE (anteriormente conocido como J2SE) es lo más parecido a un lenguaje de programación estándar. Proporciona una sintaxis para un lenguaje de programación, un entorno de ejecución para las aplicaciones creadas en dicho lenguaje y un extenso conjunto de librerías en las cuales se pueden apoyar dichas aplicaciones. Java SE será el objetivo de esta serie de artículos y es el punto por el que, habitualmente, los desarrolladores que quieren aprender Java se acercan a la plataforma.
Java ME (anteriormente conocido como J2ME) es una edición de Java orientada a programación de dispositivos móviles y empotrados. En esta categoría encajan desde las tarjetas inteligentes (como las que se emplean en los DNI electrónicos, en las tarjetas prepago o en las SIM de los teléfonos móviles) hasta terminales móviles de última generación, pasando por los reproductores del formato de video de alta definición BlueRay, o software de control de coches. Java ME proporciona un subconjunto de las librerías y de las características del lenguaje de Java SE. Este subconjunto puede variar dependiendo de para qué dispositivos estemos programando; si estamos programando para terminales móviles de última generación están disponibles prácticamente todas las características de Java SE. Sin embargo, si estamos programando para tarjetas inteligentes el conjunto de librerías está considerablemente reducido, y el lenguaje de programación soporta menos características; por ejemplo, no soporta tipos de datos reales ya que estos dispositivos sólo tienen hardware para realizar aritmética de enteros.
Java ME es muy popular en la actualidad en dispositivos móviles, aunque a menudo pase desapercibido. Para que el lector se haga una idea de la presencia de esta tecnología, simplemente mencionar que se han manufacturado 3.500.000.000 de tarjetas inteligentes basadas en la tecnología Java, y más de 1.400.000.000 de teléfonos móviles con soporte para aplicaciones Java ME. Con toda probabilidad, tu teléfono móvil es capaz de ejecutar aplicaciones Java ME. Y, por cierto, la inmensa mayoría de los juegos y aplicaciones para terminales móviles que ves anunciados en televisión y en revistas están desarrollados en Java ME.
Si Java ME puede considerarse como un subconjunto de Java SE, Java EE (anteriormente conocido como J2EE) puede considerarse como un superconjunto. En este caso, no se extiende ni se modifica de ningún modo el lenguaje de programación. Se añade un conjunto amplio de librerías y una serie de contenedores de aplicaciones (contenedores web y de EJB). Estos contenedores proporcionan servicios, de un modo automático y transparente para el programador, a las aplicaciones que contienen, servicios como transaccionalidad, persistencia, autenticación, autorización, etcétera. Nuevamente, muchas de las web que visitas diariamente están hechas en Java: la web del Real Madrid, el propio GMail, o las web de los ministerios del gobierno español son algunos ejemplos.
Con el lenguaje de programación Java es posible programar todos estos dispositivos
Una vez terminada la revisión a vista de pájaro de las distintas partes que integran la plataforma, es momento de explicar exactamente qué vamos a abordar en esta serie de artículos. Nuestro objetivo será Java SE: presentaremos el lenguaje de programación Java e introduciremos las partes más esenciales de su librería estándar.
Los artículos están escritos suponiendo que el lector conoce algún lenguaje de programación y, por tanto, domina los conceptos básicos de la programación estructurada: el concepto de variable, estructuras de control de flujo, el concepto de función o procedimiento, etcétera. Esta serie de artículos no es, por tanto, un sustituto de un curso básico de programación.
Aunque no será imprescindible para seguir los artículos, si será aconsejable poseer conocimientos básicos de orientación a objetos: el concepto de método, de objeto, de clase, de paso de mensajes... serán expuestos con mucha brevedad. Nos centraremos más en presentar el soporte que Java proporciona para la programación orientada a objetos, más que en presentar la programación orientada a objetos en sí misma.
Ya hemos introducido, a vista de pájaro, lo que podríamos denominar "plataforma Java". En esta sección presentaremos brevemente cuáles son las principales características del lenguaje de programación Java.
Java 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 todo lo que resultase complicado o fuese fuente de errores en este lenguaje. La herencia múltiple, la aritmética de punteros, la gestión de memoria dinámica (que en Java se realiza de modo transparente para el programador gracias al recogedor de basura) son ejemplos de puntos complicados del lenguaje C++ que en Java se han eliminado o simplificado. Esta decisión de diseño, intencionada, tenía como objetivo atraer a desarrolladores con conocimientos de C++ al nuevo lenguaje de programación, objetivo que fue alcanzado.
Java es completamente independiente de la máquina y el sistema operativo en el que se ejecuta. El código generado por el compilador Java es independiente de la arquitectura: podría ejecutarse en un entorno UNIX, Mac o Windows; en un procesador Sparc, x86, PowerPC, ARM, ... tanto de 32 como de 64 bits. 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 se ejecuta mediante una máquina virtual, que es la que genera código máquina adecuado para cada arquitectura.
Además, Java es portable a nivel de código fuente. El párrafo anterior, aborda la portabilidad de Java a nivel de binario: un mismo programa compilado puede ejecutarse en distintas arquitecturas. Pero además en el lenguaje 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, y en cuanto al modelo de memoria que ven las aplicaciones. Esto no ocurre así en otros lenguajes como C o C++. En estos dos lenguajes, por ejemplo, un entero puede tener un tamaño de 16, 32 o más bits, siendo la única limitación que el entero (
int
Java es un lenguaje de programación robusto y seguro. Estas características surgen en buena medida de ser un lenguaje que no es ejecutado directamente por la CPU, sino que es ejecutado por la máquina virtual. Esta máquina virtual puede controlar los permisos que se le otorgan a una determinada aplicación y garantizar que dichos permisos no son violados. Por ejemplo, Java proporciona soporte para la creación de Applets. Estos son programas diseñados para ser ejecutados de modo automático cuando un usuario visita una página web. Si el Applet no estuviese restringido en lo que puede hacer al ejecutarse, podría comprometer nuestra máquina. Sin embargo, 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 le permite realizar cualquier acción que pudiera dañar la máquina o violar la intimidad del que visita la página web.
Java es un lenguaje de alto rendimiento. Sí, de alto rendimiento. Actualmente la velocidad de ejecución del código Java es semejante a la de C++, hay ciertas 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 traducen los bytecodes de Java en código máquina para una determinada CPU, código 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. Además, estos compiladores realizan optimizaciones que se basan en información que sólo está disponible en tiempo de ejecución y que, por tanto, son imposibles de realizar en tiempo de compilación.
No obstante, por norma general el programa Java consume bastante más memoria que un programa C++ equivalente, ya que no sólo ha de cargar en memoria los recursos necesarios para la ejecución del programa, sino que además debe simular un sistema operativo y hardware virtuales (la máquina virtual). Sin embargo, dado el bajo precio de la memoria RAM en la actualidad y la gran cantidad de memoria que suele haber disponible, el mayor consumo de memoria a menudo es irrelevante.
Por último, en la línea del alto rendimiento, mencionar que Java posee soporte nativo para threads, lo que hace que escribir aplicaciones Java que tomen ventaja de procesadores de varios núcleos (lo más habitual en la actualidad es que al menos dispongamos de dos núcleos en una máquina) sea mucho más sencillo que en otros lenguajes de programación.
Artículo completo en JavaHispano.org
| < Prev | Próximo > |
|---|