Módulo 2. Inicio con Java Objetivos: -Clasificar el lenguaje de programación Java según las formas de clasificar los lenguajes de programación. -Describir el funcionamiento de la plataforma Java. -Explicar las características y componentes del lenguaje de programación Java. -Motivar al estudiante al estudio del lenguaje de programación Java. Inicio con Java Muchas veces encontramos en nuestro entorno referencias sobre Java, bien sea como lenguaje de programación o como plataforma, pero, qué es en realidad Java?, cuál es su historia?, para qué sirve Java?, cómo aplicamos Java en el mundo real?, y más importante aún cómo Java nos ayuda a desarrollar el curso de lenguajes de programación?. A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante más Historia de Java. El lenguaje de programación Java es diseñado para resolver los desafíos del desarrollo de aplicaciones que se ejecuten en diferentes ambientes y en redes heterogéneas. Algunos de estos desafíos tienen que ver con la seguridad en las aplicaciones, consumir un mínimo de recursos, funcionar en diferentes plataformas de hardware y software, y crecer dinámicamente. Java se originó como parte de un proyecto de investigación que pretendía desarrollar un software para una amplia gama de dispositivos. La meta era desarrollar una aplicación pequeña, confiable, portable y que se pudiese distribuir en tiempo real. La opción a este problema era desarrollar la aplicación en un lenguaje conocido; C++ fue entonces la solución. Luego de comenzar el proyecto se encontraron dificultades, lo que llevó a crear por completo la plataforma Java. Java aparece entonces como una solución diferente al desarrollo y a la forma como se debe distribuir el software. [1] 7
Qué es entonces Java? Java es un lenguaje de programación de alto nivel caracterizado por ser: Simple, orientado a objetos y familiar. Las características primarias del lenguaje de programación de Java incluyen una lengua simple en la que se puede programar sin un entrenamiento extenso. Los conceptos fundamentales de la tecnología de Java se aprenden rápidamente, así, los programadores pueden ser productivos desde el principio. El lenguaje de programación Java es diseñado dentro del grupo de lenguajes orientado a objetos, siendo la tecnología de desarrollo orientado a objetos la corriente principal que se ha gestado después de más de 30 años de la programación. Con Java los programadores usan y acceden a librerías de objetos ya probados. Dichas librerías extienden el comportamiento y funcionalidad de datos básicos a través de: entradas y salidas, interfaces de red o interfaces graficas. Estas librerías pueden a su vez extenderse para proporcionar nuevos comportamientos. Aunque C++ se rechazó como lenguaje para la solución que dio origen a Java, el lenguaje Java no se alejó del de C++ y conservó muchas de las características de objetos usados por este mismo; causando esto que Java sea familiar a un programador de C++ y pueda emigrar fácilmente hacia él. Seguro y robusto Java se diseñó para crear un software altamente confiable. Proporciona una extensa verificación en tiempo de compilación, seguida de un segundo nivel de verificación en tiempo de ejecución. Java es diseñado para que se ejecute en diferentes plataformas y ambientes de producción, por lo cual la seguridad se convierte de vital importancia, Java no permite construir aplicaciones que invadan el exterior de la aplicación, los programas de Java no se pueden atacar por código de puertas traseras, virus, etc. El modelo de administración de la memoria es extremadamente simple, los objetos se crean por un nuevo operador, no hay tipo de datos definidos explícitamente, no existe manejo de apuntadores y se cuenta con un recolector de basura (garbage collection), memoria no usada de forma automática. Arquitectura neutra y portable Como se ha mencionado, la tecnología Java fue diseñada para desarrollar aplicaciones que funcionaran sin problemas en diferentes tipos de redes, diferentes sistemas operativos, etc. Para solucionar este problema el compilador de Java genera un bytecode formato intermedio y neutro, indiferente de la arquitectura que se puede transportar eficientemente. La característica de neutralidad del bytecode es apenas una porción de lo que hace verdaderamente portable a un sistema. Java determina y específica los tamaños de sus tipos de datos y del comportamiento de sus operadores aritméticos; de este modo se garantiza que los programas se ejecuten de igual forma sin incompatibilidades por pasar de una arquitectura de hardware o software a otra. 8
La plataforma que hace a Java un lenguaje de arquitectura neutra y portable se conoce como la Maquina Virtual de Java (JVM). Existe documentación y una referencia amplia de las especificaciones para una maquina virtual. Alto desempeño Java alcanza su mayor desempeño adoptando el esquema de funcionamiento: el run-time interprete no necesita realizar comprobaciones; el recolector de basura funciona como un hilo independiente que se ejecuta en background y con prioridad baja, asegurando que se encuentre memoria disponible cuando se necesite. En Java los cálculos o procesamientos extensos pueden ser diseñados y reescritos en código nativo, conectándose a la tecnología Java para mejorar el desempeño cuantas veces sea necesario. Interpretado, Multitarea, y dinámico Las aplicaciones de red actuales, tales como el navegador HotJava para Internet, necesitan comúnmente hacer varias operaciones o tareas al mismo tiempo. Java proporciona los medios para construir aplicaciones con muchos hilos de ejecución concurrentes gracias a la capacidad multithreading (multitarea), dando así una gran interactividad para el usuario final. Java soporta la multitarea en el nivel de lenguaje con la adición de una sofisticada sincronización primitiva: la librería del lenguaje proporciona la clase Thread (hilo) y el sistema de run-time proporciona un sistema de monitoreo y condiciones para controlar los bloqueos. Mientras que el compilador de Java es cerrado y estricto en su comprobación estática en tiempo de compilación, el lenguaje y sistema de run-time es totalmente dinámico al momento de ligar las clases, a su vez sólo liga las clases necesarias. [1] Simple Distribuido Multitarea Orientado a objetos Portable De alto rendimiento De arquitectura neutra e independiente Robusto Seguro 3. Qué es entonces la tecnología JAVA? Java como tecnología está compuesto por: Un lenguaje de programación Un ambiente de desarrollo Un ambiente de aplicación Un ambiente de despliegue 9
Algunas consideraciones de Java La Maquina Virtual de Java es una maquina imaginaria que trata de simular las implementaciones de software de una real. La JVM brinda las especificaciones de una maquina de hardware, de esta manera se logra que los programas realizados en Java se independicen de la plataforma específica de hardware. La JVM se podría pensar como un puente entre el Hardware real y el código bytecode generado en la compilación. El Garbage Collection es el encargado de administrar la memoria en Java en tiempo de ejecución, de esta manera el programador no se preocupa por la administración de la memoria en las diferentes etapas de desarrollo. En Java, la seguridad en el código se logra a través de la Java Runtime Environment (JRE). El JRE ejecuta el código compilado para una JVM y realiza la carga de clases (a través del cargador de clases), la verificación del código (a través del verificador de bytecodes) y, por último, la ejecución de código. El cargador de clases es el responsable de colocar en memoria las clases necesarias por un programa Java; éste adiciona seguridad en el momento de la carga, no permite la ejecución de virus, troyanos, etc. Cómo funciona Java? Todo el código es escrito en archivos de texto plano que terminan con extensión.java. Estos archivos se conocen con el nombre de fuentes y son compilados en archivos.class por el compilador javac. Un archivo.class no contiene el código nativo que es entendido por el procesador; en lugar de esto, contiene el bytecode que es entendido por la maquina virtual (JVM). Al ejecutar una aplicación en Java, ésta es entonces lanzada y puesta en funcionamiento con una maquina virtual desarrollada para la plataforma apropiada. La maquina virtual de Java está disponible en muchos sistemas operativos, de este modo, los mismos archivos.class que contienen el bytecode se pueden utilizar de una plataforma a otra. 10
Algunas maquinas virtuales tienen funcionalidades diferentes o realizan pasos adicionales en tiempo de ejecución para mejorar el rendimiento de las aplicaciones. La plataforma Java. Una plataforma es el ambiente de hardware o de software en el cual un programa funciona. Hemos mencionado ya algunas de las plataformas más populares como el Sistema Operativo (OS) de Microsoft Windows, Linux, Solaris, y el OS de Mac. La mayoría de las plataformas se pueden describir como una combinación del sistema operativo y del hardware subyacente. La plataforma de Java se diferencia de la mayoría de las otras plataformas porque es una plataforma basada en software solamente y que funciona por encima de otras plataformas basadas en hardware. La plataforma de Java tiene dos componentes: La máquina virtual de Java Las interfaces de programación de aplicaciones Java (API) Como se ha visto a lo largo del documento, la maquina virtual de Java es la base para la plataforma Java y ésta se encuentra por encima de las plataformas basadas en hardware. El API es una colección de componentes de software que brindan muchos beneficios. Dentro de las librerías se encuentran diferentes tipos de clases e interfaces; las librerías son conocidas con el nombre paquetes. [2] 11
REFERENCIAS [1] James Gosling (1996), The Java Language Environment. En version online: http://java.sun.com/docs/white/langenv/ [2] Sun Microsystems, The Java Tutorials. En versión online: http://java.sun.com/docs/books/tutorial/ Tutorial de Java en SUN 12