TEMA 1 ORIGENES DEL LENGUAJE JAVA 1....

26
Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________ TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓN Internet, la red de redes mas grande del planeta ha venido evolucionando a ritmos muy acelerados, en sus inicios el correo electrónico fue la sensación. En la actualidad sigue siendo una herramienta fundamental en las comunicaciones, pero se han venido desarrollando otras herramientas y tecnologías como el hipertexto, los cuales vienen a ser objetos de información los cuales pueden contener textos, gráficos, audio, vídeo además de vínculos a otros hipertextos. La World Wide Web se encarga de la transferencia de los hipertextos utilizando el protocolo HTTP, hasta aquí Internet había crecido y madurado un poco, cada vez eran mas los sites donde se podían encontrar paginas web mostrando información de todo tipo, pero había un detalle: las paginas eran estáticas, y de pronto Sun Microsystems anuncia un nuevo producto asegurando que JAVA, así se llamaba, iba revolucionar Internet, las paginas Web se convertirían en dinámicas e interactivas. El avance de la tecnología informática y de las telecomunicaciones ha hecho posible que estemos viviendo tiempos en donde la globalización de la información, nos permita alcanzar uno de los grandes sueños de la humanidad: “Tener igualdad de condiciones para acceder al conocimiento”, y esto se ha venido logrando gracias a Internet. 2. QUÉ ES JAVA? Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems. Sun describe al lenguaje Java de la siguiente manera: Simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutral, portable, de alto rendimiento, multitarea y dinámico. Sun admite totalmente que lo dicho anteriormente es una cadena de halagos por parte suya, pero el hecho es que todo ello describe al lenguaje Java. Java permite hacer cosas excitantes con las páginas Web que antes no eran posibles. De manera que en este momento la gran interactividad que proporciona Java marca la diferencia en las páginas Web. Imagina un Web donde puedes jugar un juego, como el fútbol, tú y otras personas que están en lugares remotos forman parte de un equipo y otras más del contrario, verías a los jugadores animados en la pantalla obedeciendo las instrucciones de las personas que están jugando al juego desde sitios remotos. Además las puntuaciones quedarían registradas. O un Web con una aplicación en donde el usuario pueda hacer transacciones y estas se actualicen en tiempo real. O un sitio que ofrezca pequeñas aplicaciones como hojas de cálculo o calculadoras para uso de los visitantes. O uno que muestre figuras 3D, tales como moléculas o dinosaurios que pueden ser rotados con un click del ratón. ________________________________________________________________________________________ Proyecto de Software 21

Transcript of TEMA 1 ORIGENES DEL LENGUAJE JAVA 1....

Page 1: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

TEMA 1 ORIGENES DEL LENGUAJE JAVA

1. INTRODUCCIÓN Internet, la red de redes mas grande del planeta ha venido evolucionando a ritmos muy acelerados, en sus inicios el correo electrónico fue la sensación. En la actualidad sigue siendo una herramienta fundamental en las comunicaciones, pero se han venido desarrollando otras herramientas y tecnologías como el hipertexto, los cuales vienen a ser objetos de información los cuales pueden contener textos, gráficos, audio, vídeo además de vínculos a otros hipertextos. La World Wide Web se encarga de la transferencia de los hipertextos utilizando el protocolo HTTP, hasta aquí Internet había crecido y madurado un poco, cada vez eran mas los sites donde se podían encontrar paginas web mostrando información de todo tipo, pero había un detalle: las paginas eran estáticas, y de pronto Sun Microsystems anuncia un nuevo producto asegurando que JAVA, así se llamaba, iba revolucionar Internet, las paginas Web se convertirían en dinámicas e interactivas. El avance de la tecnología informática y de las telecomunicaciones ha hecho posible que estemos viviendo tiempos en donde la globalización de la información, nos permita alcanzar uno de los grandes sueños de la humanidad: “Tener igualdad de condiciones para acceder al conocimiento”, y esto se ha venido logrando gracias a Internet. 2. QUÉ ES JAVA? Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems. Sun describe al lenguaje Java de la siguiente manera: Simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutral, portable, de alto rendimiento, multitarea y dinámico. Sun admite totalmente que lo dicho anteriormente es una cadena de halagos por parte suya, pero el hecho es que todo ello describe al lenguaje Java. Java permite hacer cosas excitantes con las páginas Web que antes no eran posibles. De manera que en este momento la gran interactividad que proporciona Java marca la diferencia en las páginas Web. Imagina un Web donde puedes jugar un juego, como el fútbol, tú y otras personas que están en lugares remotos forman parte de un equipo y otras más del contrario, verías a los jugadores animados en la pantalla obedeciendo las instrucciones de las personas que están jugando al juego desde sitios remotos. Además las puntuaciones quedarían registradas. O un Web con una aplicación en donde el usuario pueda hacer transacciones y estas se actualicen en tiempo real. O un sitio que ofrezca pequeñas aplicaciones como hojas de cálculo o calculadoras para uso de los visitantes. O uno que muestre figuras 3D, tales como moléculas o dinosaurios que pueden ser rotados con un click del ratón.

________________________________________________________________________________________ Proyecto de Software 21

Page 2: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Java también aumenta el contenido multimedia de un sitio, ofreciendo animaciones fluidas, gráficos mejorados, sonido y vídeo, fuera de lo necesario para enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y no solamente lo que se ha mencionado sino también que el lenguaje java es un lenguaje muy robusto que nos permite desarrollar cualquier tipo de proyecto ya sea en una base de datos o aplicaciones por puertos entre ellos. 3. BREVE HISTORIA DE JAVA A finales de la década de los 80 Sun Microsystems inicia un proyecto de investigación encabezado por James Gosling con el propósito de desarrollar un lenguaje de programación para dispositivos electrónicos como tostadoras, hornos microondas y asistentes digitales personales. Gosling y su equipo de investigación llegaron a la conclusión de que el software para dispositivos de consumo tiene algunos requerimientos de diseño únicos. Por ejemplo, el software necesita ser capaz de trabajar en nuevos chips de computadora. Cuando los chips son introducidos, los fabricantes más de una vez los cambian por otros por ser más baratos o introducir nuevos mecanismos. El software también necesita ser extremadamente inteligente, porque cuando un producto del consumidor falla, el fabricante usualmente tiene que reemplazar todo el dispositivo y no el componente que originó el fallo. Gosling y su equipo también descubrieron que existían lenguajes de programación como C y C++ con los cuales no se podía realizar la tarea de hacer un software que fuera independiente de la arquitectura en donde se este ejecutando. Un programa escrito en C o C++ debe ser compilado para un chip de computadora particular. Cuando se cambia de chip el programa debe ser recompilado. La complejidad de C y C++ también hace extremadamente dificultoso escribir software fiable. Como resultado de lo dicho anteriormente, en 1990 Gosling comenzó a diseñar un nuevo lenguaje de programación que fuera mas apropiado para dispositivos que utilizan software electrónico. Este lenguaje fue conocido originalmente como Oak. Fue pequeño, de fiar e independiente de la arquitectura. En 1993 cuando el equipo de Java continuaba trabajando en el diseño del nuevo lenguaje, la Word Wide Web apareció y tomó a todos por sorpresa. El equipo de Java pensó que un lenguaje de arquitectura neutral sería ideal para programar en la Internet, porque un programa correría en todos los diferentes tipos de computadoras conectadas a Internet. Y fue un hecho; todas las metas alcanzadas con las investigaciones anteriores coincidentemente sirvieron idealmente para la programación en Internet. En ese momento el desarrollo de Java se tornó en un asunto de mayor importancia para Sun. El equipo escribió un navegador Web llamado HotJava, que fue el primero en soportar applets de Java. Un applet es un pequeño programa que puede ser incrustado en una página Web. Puedes incluir un applet en un documento HTML para proporcionar interactividad y dar vida a una página Web.

________________________________________________________________________________________ Proyecto de Software 22

Page 3: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

HotJava demostró el poder del lenguaje Java y lo puso de moda entre los programadores y el resto de la gente. Y lo demás es historia. Los programadores comenzaron con la versión Alpha de Java que Sun puso a disposición de toda la gente, creando las clasificaciones de applets más maravillosas. La experiencia de Sun y la retroalimentación por parte de los usuarios ayudaron a refinar el lenguaje y la interfaz de programación de aplicaciones (API). Al mismo tiempo que Sun sacó la versión Beta de el lenguaje, Netscape anunció que la version 2.0 del Web browser, Netscape Navigator soportaría applets de Java. Esto sirvió para incrementar el fuerte interés en la tecnología Java, en el mundo de la computación y en Internet. Con compañías como IBM, SGI y Oracle licenciando la tecnología Java de Sun se puede estar seguro de que más productos de software y hardware incorporarán la tecnología Java. 4. CARACTERÍSTICAS DEL LENGUAJE JAVA Las características principales que nos ofrece Java respecto a cualquier otro lenguaje de programación, son: 4.1 Simple Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las características menos usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó para ser parecido a C++ y así facilitar un rápido y fácil aprendizaje. Java elimina muchas de las características de otros lenguajes como C++, para mantener reducidas las especificaciones del lenguaje y añadir características muy útiles como el garbage collector (reciclador de memoria dinámica). No es necesario preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grandes, lo que reduce la fragmentación de la memoria. Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al eliminar muchas de las características de éstos, entre las que destacan: Aritmética de punteros No existen referencias Registros (struct) Definición de tipos (typedef) Macros (#define) Necesidad de liberar memoria (free)

________________________________________________________________________________________ Proyecto de Software 23

Page 4: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que las clases son algo parecido. 4.2 Orientado a objetos Java implementa la tecnología básica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta las tres características propias del paradigma de la orientación a objetos: encapsulación, herencia y polimorfismo. Las plantillas de objetos son llamadas, como en C++, clases y sus copias, instancias. Estas instancias, como en C++, necesitan ser construidas y destruidas en espacios de memoria. Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución dinámica de métodos. Esta característica deriva del lenguaje Objective C, propietario del sistema operativo Next. En C++ se suele trabajar con librerías dinámicas (DLLs) que obligan a recompilar la aplicación cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es resuelto por Java mediante una interfaz específica llamada RTTI (RunTime Type Identification) que define la interacción entre objetos excluyendo variables de instancias o implementación de métodos. Las clases en Java tienen una representación en el runtime que permite a los programadores interrogar por el tipo de clase y enlazar dinámicamente la clase con el resultado de la búsqueda. 4.3 Distribuido Java se ha construido con extensas capacidades de interconexión TCP/IP. Existen librerías de rutinas para acceder e interactuar con protocolos como http y ftp. Esto permite a los programadores acceder a la información a través de la red con tanta facilidad como a los archivos locales. La verdad es que Java en sí no es distribuido, sino que proporciona las librerías y herramientas para que los programas puedan ser distribuidos, es decir, que se corran en varias máquinas, interactuando. 4.4 Robusto Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de ejecución. La comprobación de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaración explícita de métodos, reduciendo así las posibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte del programador de la liberación o corrupción de memoria. También implementa los arrays auténticos, en vez de listas enlazadas de punteros, con comprobación de límites, para evitar la posibilidad de sobreescribir o corromper memoria resultado de punteros que señalan a zonas equivocadas. Estas características reducen drásticamente el tiempo de desarrollo de aplicaciones en Java.

________________________________________________________________________________________ Proyecto de Software 24

Page 5: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Además, para asegurar el funcionamiento de la aplicación, realiza una verificación de los byte-codes, que son el resultado de la compilación de un programa Java. Es un código de máquina virtual que es interpretado por el intérprete Java. No es el código máquina directamente entendible por el hardware, pero ya ha pasado todas las fases del compilador: análisis de instrucciones, orden de operadores, etc., y ya tiene generada la pila de ejecución de órdenes. Java proporciona, pues:

Comprobación de punteros Comprobación de límites de arrays Excepciones Verificación de byte-codes

4.5 Arquitectura neutral Para establecer Java como parte integral de la red, el compilador Java compila su código a un archivo objeto de formato independiente de la arquitectura de la máquina en que se ejecutará. Cualquier máquina que tenga el sistema de ejecución (run-time) puede ejecutar ese código objeto, sin importar en modo alguno la máquina en que ha sido generado. Actualmente existen sistemas run-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple y probablemente haya grupos de desarrollo trabajando en el porting a otras plataformas.

El código fuente Java se "compila" a un código de bytes de alto nivel independiente de la máquina. Este código (byte-codes) está diseñado para ejecutarse en una máquina hipotética que es implementada por un sistema run-time, que sí es dependiente de la máquina.

________________________________________________________________________________________ Proyecto de Software 25

Page 6: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

En una representación en que tuviésemos que indicar todos los elementos que forman parte de la arquitectura de Java sobre una plataforma genérica, obtendríamos una figura como la siguiente:

En ella podemos ver que lo verdaderamente dependiente del sistema es la Máquina Virtual Java (JVM) y las librerías fundamentales, que también nos permitirían acceder directamente al hardware de la máquina. Además, habrá APIs de Java que también entren en contacto directo con el hardware y serán dependientes de la máquina, como ejemplo de este tipo de APIs podemos citar: Java 2D: gráficos 2D y manipulación de imágenes Java Media Framework : Elementos críticos en el tiempo: audio, video... Java Animation: Animación de objetos en 2D Java Telephony: Integración con telefonía Java Share: Interacción entre aplicaciones multiusuario Java 3D: Gráficos 3D y su manipulación 4.6 Seguro La seguridad en Java tiene dos facetas. En el lenguaje, características como los punteros o el casting implícito que hacen los compiladores de C y C++ se eliminan para prevenir el acceso ilegal a la memoria. Cuando se usa Java para crear un navegador, se combinan las características del lenguaje con protecciones de sentido común aplicadas al propio navegador. El lenguaje C, por ejemplo, tiene lagunas de seguridad importantes, como son los errores de alineación. Los programadores de C utilizan punteros en conjunción con operaciones aritméticas. Esto le permite al programador que un puntero referencie a un lugar conocido de la memoria y pueda sumar (o restar) algún valor, para referirse a otro lugar de la memoria. Si otros programadores conocen nuestras estructuras de datos pueden extraer información confidencial de nuestro

________________________________________________________________________________________ Proyecto de Software 26

Page 7: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

sistema. Con un lenguaje como C, se pueden tomar números enteros aleatorios y convertirlos en punteros para luego acceder a la memoria: printf( "Escribe un valor entero: " ); scanf( "%u",&puntero ); printf( "Cadena de memoria: %s\n",puntero ); Otra laguna de seguridad u otro tipo de ataque, es el Caballo de Troya. Se presenta un programa como una utilidad, resultando tener una funcionalidad destructiva. Por ejemplo, en UNIX se visualiza el contenido de un directorio con el comando ls. Si un programador deja un comando destructivo bajo esta referencia, se puede correr el riesgo de ejecutar código malicioso, aunque el comando siga haciendo la funcionalidad que se le supone, después de lanzar su carga destructiva. Por ejemplo, después de que el caballo de Troya haya enviado por correo el /etc/shadow a su creador, ejecuta la funcionalidad de ls persentando el contenido del directorio. Se notará un retardo, pero nada inusual. El código Java pasa muchos tests antes de ejecutarse en una máquina. El código se pasa a través de un verificador de byte-codes que comprueba el formato de los fragmentos de código y aplica un probador de teoremas para detectar fragmentos de código ilegal -código que falsea punteros, viola derechos de acceso sobre objetos o intenta cambiar el tipo o clase de un objeto-. Si los byte-codes pasan la verificación sin generar ningún mensaje de error, entonces sabemos que:

• El código no produce desbordamiento de operandos en la pila • El tipo de los parámetros de todos los códigos de operación son conocidos

y correctos. • No ha ocurrido ninguna conversión ilegal de datos, tal como convertir

enteros en punteros. • El acceso a los campos de un objeto se sabe que es legal: public, private,

protected. • No hay ningún intento de violar las reglas de acceso y seguridad

establecidas El Cargador de Clases también ayuda a Java a mantener su seguridad, separando el espacio de nombres del sistema de archivos local, del de los recursos procedentes de la red. Esto limita cualquier aplicación del tipo Caballo de Troya, ya que las clases se buscan primero entre las locales y luego entre las procedentes del exterior. Las clases importadas de la red se almacenan en un espacio de nombres privado, asociado con el origen. Cuando una clase del espacio de nombres privado accede a otra clase, primero se busca en las clases predefinidas (del sistema local) y

________________________________________________________________________________________ Proyecto de Software 27

Page 8: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

luego en el espacio de nombres de la clase que hace la referencia. Esto imposibilita que una clase suplante a una predefinida. En resumen, las aplicaciones de Java resultan extremadamente seguras, ya que no acceden a zonas delicadas de memoria o de sistema, con lo cual evitan la interacción de ciertos virus. Java no posee una semántica específica para modificar la pila de programa, la memoria libre o utilizar objetos y métodos de un programa sin los privilegios del kernel del sistema operativo. Además, para evitar modificaciones por parte de los crackers de la red, implementa un método ultraseguro de autentificación por clave pública. El Cargador de Clases puede verificar una firma digital antes de realizar una instancia de un objeto. Por tanto, ningún objeto se crea y almacena en memoria, sin que se validen los privilegios de acceso. Es decir, la seguridad se integra en el momento de compilación, con el nivel de detalle y de privilegio que sea necesario. Dada, pues la concepción del lenguaje y si todos los elementos se mantienen dentro del estándar marcado por Sun, no hay peligro. Java imposibilita, también, abrir ningún archivo de la máquina local (siempre que se realizan operaciones con archivos, éstas trabajan sobre el disco duro de la máquina de donde partió el applet), no permite ejecutar ninguna aplicación nativa de una plataforma e impide que se utilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra máquina para hacer peticiones o realizar operaciones con otra. Además, los intérpretes que incorporan los navegadores de la Web son aún más restrictivos. Bajo estas condiciones (y dentro de la filosofía de que el único ordenador seguro es el que está apagado, desenchufado, dentro de una cámara acorazada en un bunker y rodeado por mil soldados de los cuerpos especiales del ejército), se puede considerar que Java es un lenguaje seguro y que los applets están libres de virus. Respecto a la seguridad del código fuente, no ya del lenguaje, JDK proporciona un desemsamblador de byte-code, que permite que cualquier programa pueda ser convertido a código fuente, lo que para el programador significa una vulnerabilidad total a su código. Utilizando javap no se obtiene el código fuente original, pero sí desmonta el programa mostrando el algoritmo que se utiliza, que es lo realmente interesante. La protección de los programadores ante esto es utilizar llamadas a programas nativos, externos (incluso en C o C++) de forma que no sea descompilable todo el código; aunque así se pierda portabilidad. Esta es otra de las cuestiones que Java tiene pendientes. 4.7 Portable Más allá de la portabilidad básica por ser de arquitectura independiente, Java implementa otros estándares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y además, enteros de 32 bits en complemento a 2. Además, Java construye sus interfaces de usuario a través de un sistema abstracto de ventanas de forma que las ventanas puedan ser implantadas en entornos Unix, Pc o Mac.

________________________________________________________________________________________ Proyecto de Software 28

Page 9: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

4.8 Interpretado El intérprete Java (sistema run-time) puede ejecutar directamente el código objeto. Enlazar (linkar) un programa, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores con Java pasarán más tiempo desarrollando y menos esperando por el ordenador. No obstante, el compilador actual del JDK es bastante lento. Por ahora, que todavía no hay compiladores específicos de Java para las diversas plataformas, Java es más lento que otros lenguajes de programación, como C++, ya que debe ser interpretado y no ejecutado como sucede en cualquier programa tradicional. Se dice que Java es de 10 a 30 veces más lento que C, y que tampoco existen en Java proyectos de gran envergadura como en otros lenguajes. La verdad es que ya hay comparaciones ventajosas entre Java y el resto de los lenguajes de programación, y una ingente cantidad de folletos electrónicos que supuran fanatismo en favor y en contra de los distintos lenguajes contendientes con Java. Lo que se suele dejar de lado en todo esto, es que primero habría que decidir hasta que punto Java, un lenguaje en pleno desarrollo y todavía sin definición definitiva, está maduro como lenguaje de programación para ser comparado con otros; como por ejemplo con Smalltalk, que lleva más de 20 años en cancha. La verdad es que Java para conseguir ser un lenguaje independiente del sistema operativo y del procesador que incorpore la máquina utilizada, es tanto interpretado como compilado. Y esto no es ningún contrasentido, me explico, el código fuente escrito con cualquier editor se compila generando el byte-code. Este código intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones máquinas propias de cada plataforma y no tiene nada que ver con el p-code de Visual Basic. El byte-code corresponde al 80% de las instrucciones de la aplicación. Ese mismo código es el que se puede ejecutar sobre cualquier plataforma. Para ello hace falta el run-time, que sí es completamente dependiente de la máquina y del sistema operativo, que interpreta dinámicamente el byte-code y añade el 20% de instrucciones que faltaban para su ejecución. Con este sistema es fácil crear aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista el run-time correspondiente al sistema operativo utilizado. 4.9 Multithreaded Al ser multithreaded (multihilvanado, en mala traducción), Java permite muchas actividades simultáneas en un programa. Los threads (a veces llamados, procesos ligeros), son básicamente pequeños procesos o piezas independientes de un gran proceso. Al estar los threads contruidos en el lenguaje, son más fáciles de usar y más robustos que sus homólogos en C o C++. El beneficio de ser multithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento en tiempo real. Aunque el comportamiento en tiempo real está limitado a las capacidades del sistema operativo subyacente (Unix, Windows, etc.), aún supera a los entornos de flujo único de programa (single-threaded) tanto en facilidad de desarrollo como en rendimiento.

________________________________________________________________________________________ Proyecto de Software 29

Page 10: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Cualquiera que haya utilizado la tecnología de navegación concurrente, sabe lo frustrante que puede ser esperar por una gran imagen que se está trayendo. En Java, las imágenes se pueden ir trayendo en un thread independiente, permitiendo que el usuario pueda acceder a la información en la página sin tener que esperar por el navegador. 4.10 Dinámico Java se beneficia todo lo posible de la tecnología orientada a objetos. Java no intenta conectar todos los módulos que comprenden una aplicación hasta el tiempo de ejecución. Las librerías nuevas o actualizadas no paralizarán las aplicaciones actuales (siempre que mantengan el API anterior).

Java también simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una aplicación Java sobre la red y encuentra una pieza de la aplicación que no sabe manejar, tal como se ha explicado en párrafos anteriores, Java es capaz de traer automáticamente cualquiera de esas piezas que el sistema necesita para funcionar. Java, para evitar que los módulos de byte-codes o los objetos o nuevas clases, haya que estar trayéndolos de la red cada vez que se necesiten, implementa las opciones de persistencia, para que no se eliminen cuando de limpie la caché de la máquina.

________________________________________________________________________________________ Proyecto de Software 30

Page 11: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

TEMA 2 JAVA VS OTROS LENGUAJES DE POO

1. INTRODUCCIÓN La sintaxis de Java resulta muy familiar a los programadores de C++, debido mayoritariamente a que Java proviene de C++. Sin embargo Java pretende mejorar a C++ en muchos aspectos (sobre todo en los aspectos orientados a objeto del lenguaje), aunque prohíbe muchas de las tareas por las que C++ fue tan extendido. Se observa que las diferencias han sido diseñadas como mejoras del lenguaje, ya que uno de los aspectos más criticado (y defendido) de C++ es su capacidad para hacer cosas "no orientadas a objetos", así como acceder a los recursos de las máquinas (lo que le permitía atacar sistemas, siendo uno de los lenguajes más difundidos entre los programadores de virus). En este apéndice pretendemos mostrar aquellas diferencias significativas, para que los programadores familiarizados con C++ puedan programar en Java, conociendo sus posibilidades y limitaciones. 2. DIFERENCIAS SINTÁTICAS a) Elementos similares Uso de bibliotecas (paquetes): Como no existen macros como #include, se utiliza import. Operador de herencia: La herencia en Java se especifica con la palabra clave extends, en lugar del operador :: de C++. Constantes: En lugar de const de C++ las variables constantes se declaran como static final. b) Elementos equivalentes Miembros estáticos: No es necesaria declaración previa (fuera de las clases) de los miembros estáticos (static). Métodos inline: En Java no existen (hay que incluir el cuerpo de los métodos junto a su definición), aunque los compiladores Java suelen intentar expandir en línea (a modo de los métodos inline) los métodos declarados como final. Métodos virtuales: Todos los métodos no estáticos (static) se consideran virtual en Java.

________________________________________________________________________________________ Proyecto de Software 31

Page 12: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Forward: No existe en Java. Simplemente se llama el método, y el compilador se encarga de buscarlo. Clases anidadas: Aunque Java no permite anidar clases, sí que se puede modelizar este concepto mediante los paquetes Java y la composición. No existen "amigos" (friend): Es su lugar se considera amigas a todas las clases y elementos que componen un paquete. c) Elementos añadidos Comentarios: Java soporta los dos tipos de comentarios de C++, e incorpora un tercero, con la sintaxis /** comentario */, para la documentación automática. Operador >>> : Java añade este operador para desplazamientos a la derecha sin signo. Iniciación: Todos las variables de tipo simple y las referencias a objeto se inician a un valor 0 (o equivalente), y null para las referencias a objeto. Referencia super: En Java super hace referencia a la superclase (clase padre) de la clase actual. Dicha clase sólo puede ser una, porque Java solo soporta herencia simple. d) Elementos suprimidos goto: No existe en Java, aunque con break y continue, combinados con etiquetas de bloque, se puede suplir. Condiciones: Deben utilizarse expresiones booleanas y nunca números. Argumentos por defecto: Java no los soporta. 3. DIFERENCIAS DE DISEÑO a) Tipos de datos Tipos simples: Soporta los mismos que C++, añadiendo boolean (true/false), y ampliando el tipo char, para soportar caracteres Unicode de 16 bits. Punteros: En Java no hay punteros, permitiendo así programación segura. En su lugar se crean las referencias a objeto, que pueden ser reasignadas (como si fueran un puntero a objeto de C++).

________________________________________________________________________________________ Proyecto de Software 32

Page 13: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Vectores: Son objetos de sólo lectura, con un método length() para averiguar su longitud, y que lanzan una excepción si se intenta acceder a un elemento fuera del vector. Clases: Todo debe de estar incluído en clases; no existen enumeraciones (enum) ni registros (struct). Elementos globales: No existen variables o funciones globales, aunque se puede utilizar static para simularlas. b) Diseño de las clases Cuerpo de los métodos: Todos los cuerpos de las clases han de estar codificados en las definiciones de las clases. No se pueden separa como se hace en C++ mediante ficheros de cabecera (".h"). Constructores: Aunque existen constructores, como en C++, no existen constructores copia, puesto que los argumentos son pasados por referencia. Destructores: No existen destructores en Java, ya que tiene recolección automática de basura, aunque en su lugar se pueden escribir métodos finalize(), que serán ejecutados cuando el recolector de basura de Java destruya el objeto. Árbol de herencia: En Java todas las clases se relacionan en un único árbol de herencia, en cuya cúspide se encuentra la clase Object, con lo que todas las clases heredan de ella. En C++ sin embargo se pueden declarar clases que no tengan padre. Herencia no restrictiva: Al heredar, no se puede reducir las ocultaciones del padre: En C++ sí se podría ampliar la visibilidad de uno de los elementos heredados. En todo caso sí se puede restringir. Herencia simple de clases: No existe la herencia múltiple de clases. Aún así se puede implementar una herencia múltiple utilizando interfaces, dado que ellas sí la soportan. Sobrecarga de métodos: Es exactamente igual que la de C++. Sobrecarga de operadores: No existe. En los objetos String el operador + y += se permiten para la comparación de cadenas. c) Nuevos diseños Plantillas (templates): En Java no se soportan plantillas p clases genéricas de C++, aunque existen una serie de clases en la API de Java que tratan objetos genéricos (clase Object) como Vector o Stack.

________________________________________________________________________________________ Proyecto de Software 33

Page 14: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Interfaces (interface): Que son unas especies de clases abstractas con métodos abstractos, y que permiten herencia múltiple, utilizando la palabra reservada implements. Diferente gestión de excepciones: Todas las excepciones de Java heredan de la clase Throwable, que las dota de una interfaz común. 4. DIFERENCIAS DE EJECUCIÓN a) Aspectos modificados Cadenas: Las cadenas entrecomilladas se convierten en objetos String, no en vectores estáticos de caracteres. Instanciación: Los objetos se crean en el montículo (new) y nunca en la pila (malloc), y los tipos simples no permiten new (excepto los vectores de tipos simples, iguales que los de C++). Intérprete: Los intérpretes Java son unas 20 veces más lentos que los de C, aunque esta diferencia se está reduciendo con lo compiladores JIT(Just In Time) para Java que están apareciendo en el mercado. Bibliotecas estándar: En C++ existía casi una biblioteca por plataforma (si existía) para hacer cosas como: Trabajo en red, conexión a bases de datos, uso de múltiples hilos de control, uso de objetos distribuídos o compresión. Java incorpora bibliotecas estándar multiplataforma para todas estas tareas en su API. Excepciones por fallos de descriptores: Java lanza excepciones cuando hay errores en el acceso a un descriptor, permitiendo al programador gestionar dichos fallos, y recuperar al programa de ellos. Gestión de errores al compilar: Además comprobar el lanzamiento de excepciones en tiempo de compilación, comprueba el cumplimiento del lanzamiento de excepciones por los métodos sobreescritos. b) Aspectos eliminados Preprocesador: Java no tiene preprocesador, por lo que las macros (#include, #define,...) no existen. Acceso directo al hardware: En Java está restringido, aunque para eso permite la utilización de métodos nativos, escritos para la plataforma (normalmente C/C++). En cualquier caso las applets no pueden utilizar estos métodos nativos, sólo las aplicaciones Java pueden hacerlo.

________________________________________________________________________________________ Proyecto de Software 34

Page 15: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

c) Aspectos introducidos Multiples hilos de control (multithreating): Java permite la utilización de múltiples hilos de control y la ejecución en paralelo (y sincronizada) de múltiples tareas, mediante la clase Thread. Applets Java: Este tipo de aplicaciones son seguras, distribuíbles por Internet y ejecutables por los navegadores, aunque tienen restricciones (como la escritura en disco). Extracción automática de documentación: Un nuevo tipo de comentario (/**com_doc*/) permite a los programadores extraer de manera automática comentarios de sus fuentes, generando automáticamente documentación estandarizada. JavaBeans: Mediante esta biblioteca se permite crear elementos visuales multiplataforma, algo impensable en C++. 5. COMPARATIVA SOBRE CARACTERÍSTICAS DE LA POO En este apartado se va a comparar Java con los lenguajes C++ y Smalltalk (primer lenguaje que presentaba un modelo de objeto).

Característica Java Smalltalk C++

Sencillez Sí Sí No

Robustez Sí Sí No

Seguridad Sí Algo No

Interpretado Sí Sí No

Dinamicidad Sí Sí No

Portabilidad Sí Algo No

Neutralidad Sí Algo No

Threads Sí No No

Garbage Colection Sí Sí No

Excepciones Sí Sí Algunas

Representación Alta Media Alta

Tabla 1: Comparación entre Java, SmallTalk y C++

________________________________________________________________________________________ Proyecto de Software 35

Page 16: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

TEMA 3 PRIMEROS PASOS EN JAVA

1. TIPOS DE APLICACIONES EN JAVA Como cualquier otro lenguaje, Java se usa para crear aplicaciones. Pero, además Java 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. A continuación se verá en detalle lo mínimo que se puede hacer en ambos casos, lo que permitirá presentar la secuencia de edición, compilación, ejecución en Java, que será imprescindible a la hora de estudiar detalles más concretos de Java, porque los ejemplos que se muestren serán mejor comprendidos. 2. UNA MINI APLICACIÓN EN JAVA La aplicación más pequeña posible es la que simplemente imprime un mensaje en la pantalla. Tradicionalmente, el mensaje suele ser "Hola Mundo!". Esto es justamente lo que hace el siguiente fragmento de código:

// Aplicación HolaMundo de ejemplo // class HolaMundoApp { public static void main( String args[] ) { System.out.println( "Hola Mundo!" ); } }

Hay que ver en detalle la aplicación anterior, línea a línea. Esas líneas de código contienen los componentes mínimos para imprimir Hola Mundo! en la pantalla. Es un ejemplo muy simple, que no instancia objetos de ninguna otra clase; sin embargo, accede a otra clase incluida en el JDK (J2SE). // Aplicación HolaMundo de ejemplo // Estas dos primeras líneas son comentarios. Hay tres tipos de comentarios en Java, // es un comentario orientado a línea. class HolaMundoApp { Esta línea declara la clase HolaMundoApp. El nombre de la clase especificado en el archivo fuente se utiliza para crear un archivo nombredeclase.class en el directorio en el que se compila la aplicación. En este caso, el compilador creará un archivo llamado HolaMundoApp.class.

________________________________________________________________________________________ Proyecto de Software 36

Page 17: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

public static void main( String args[] ) { Esta línea especifica un método que el intérprete Java busca para ejecutar en primer lugar. Igual que en otros lenguajes, Java utiliza una palabra clave main para especificar la primera función a ejecutar. En este ejemplo tan simple no se pasan argumentos. public significa que el método main() puede ser llamado por cualquiera, incluyendo el intérprete Java. static es una palabra clave que le dice al compilador que main se refiere a la propia clase HolaMundoApp y no a ninguna instancia de la clase. De esta forma, si alguien intenta hacer otra instancia de la clase, el método main() no se instanciaría. void indica que main() no devuelve nada. Esto es importante ya que Java realiza una estricta comprobación de tipos, incluyendo los tipos que se ha declarado que devuelven los métodos. args[] es la declaración de un array de Strings. Estos son los argumentos escritos tras el nombre de la clase en la línea de comandos: >java HolaMundoApp arg1 arg2 ... System.out.println( "Hola Mundo!" ); Esta es la funcionalidad de la aplicación. Esta línea muestra el uso de un nombre de clase y método. Se usa el método println() de la clase out que está en el paquete System. A una variable de tipo class se puede acceder sin necesidad de instanciar ningún objeto de esa clase. Por ello ha de ser un tipo básico o primitivo, o bien puede ser una referencia que apunta a otro objeto. En este caso, la variable out es una referencia que apunta a un objeto de otro tipo, aquí una instancia de la clase PrintStream (un objeto PrintStream), que es automáticamente instanciado cuando la clase System es cargada en la aplicación. Esto es algo semejante al hecho de que los objetos stream de entrada/salida, cin y cout son automáticamente instanciados y enlazados a los dispositivos estándar de entrada y salida cuando un programa C++ comienza su ejecución. El método println() toma una cadena como argumento y la escribe en el stream de salida estándar; en este caso, la ventana donde se lanza la aplicación. La clase PrintStream tiene un método instanciable llamado println(), que lo hace presentar en la salida estándar del Sistema el argumento que se le pase. En este caso, se utiliza la variable o instancia de out para acceder al método. } }

________________________________________________________________________________________ Proyecto de Software 37

Page 18: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Finalmente, se cierran las llaves que limitan el método main() y la clase HolaMundoApp. 3. COMPILACIÓN Y EJECUCIÓN DE HOLAMUNDO A continuación se puede ver el resultado de esta primera y sencilla aplicación Java en pantalla. Se genera un archivo con el código fuente de la aplicación, se compilará y se utilizará el intérprete Java para ejecutarlo. 3.1 Archivos Fuente Java Los archivos fuente en Java terminan con la extensión ".java". Crear un archivo utilizando cualquier editor de texto ascii que tenga como contenido el código de las ocho líneas de nuestra mínima aplicación, y salvarlo en un archivo con el nombre de HolaMundoApp.java. Para crear los archivos con código fuente Java no es necesario un procesador de textos, aunque puede utilizarse siempre que tenga salida a archivo de texto plano o ascii, sino que es suficiente con cualquier otro editor. 3.2 Compilación El compilador javac se encuentra en el directorio bin por debajo del directorio java, donde se haya instalado el JDK (J2SE). Este directorio bin, si se han seguido las instrucciones de instalación, debería formar parte de la variable de entorno PATH del sistema. Si no es así, tendría que revisar la Instalación del JDK. El compilador de Java traslada el código fuente Java a byte-codes (archivos que terminan con la extensión “.class”), que son los componentes que entiende la Máquina Virtual Java que está incluida en los navegadores con soporte Java y en appletviewer. Una vez creado el archivo fuente HolaMundoApp.java, se puede compilar con la línea siguiente: >javac HolaMundoApp.java Si no se han cometido errores al teclear ni se han tenido problemas con el path al archivo fuente ni al compilador, no debería aparecer mensaje alguno en la pantalla, y cuando vuelva a aparecer el prompt del sistema, se debería ver un archivo HolaMundoApp.class nuevo en el directorio donde se encuentra el archivo fuente. Si ha habido algún problema, en Problemas de compilación al final de esta sección, hemos intentado reproducir los que más frecuentemente se suelen dar, se pueden consultar por si pueden aportar un poco de luz al error que haya aparecido.

________________________________________________________________________________________ Proyecto de Software 38

Page 19: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

3.3 Ejecución Para ejecutar la aplicación HolaMundoApp, hemos de recurrir al intérprete java, que también se encuentra en el directorio bin, bajo el directorio en donde se haya instalado el JDK. Se ejecutará la aplicación con la línea: >java HolaMundoApp y debería aparecer en pantalla la respuesta de Java: Hola Mundo! El símbolo > representa al prompt (indicador) del sistema, y se utilizará aquí para presentar las respuestas que devuelva el sistema como resultado de la ejecución de los comandos que se introduzcan por teclado o para indicar las líneas de comandos a introducir. Cuando se ejecuta una aplicación Java, el intérprete Java busca e invoca al método main() de la clase cuyo nombre coincida con el nombre del archivo .class que se indique en la línea de comandos. En el ejemplo, se indica al Sistema Operativo que arranque el intérprete Java y luego se indica al intérprete Java que busque y ejecute el método main() de la aplicación Java almacenada en el archivo HolaMundoApp.class. 3.4 Problemas de compilación A continuación se encuentra una lista de los errores más frecuentes que se presentan a la hora de compilar un archivo con código fuente Java, tomando como base los errores provocados sobre la mínima aplicación Java que se está utilizando como ejemplo, pero también podría generalizarse sin demasiados problemas. >javac: Command not found No se ha establecido correctamente la variable PATH del sistema para el compilador javac. El compilador javac se encuentra en el directorio bin, que cuelga del directorio donde se haya instalado el JDK (Java Development Kit). HolaMundoApp.java:3: Method printl(java.lang.String) not found in class java.io.PrintStream. System.out.printl( "HolaMundo! ); ^ Error tipográfico, el método es println no printl. In class HolaMundoApp: main must be public and static Error de ejecución, se olvidó colocar la palabra static en la declaración del método main de la aplicación.

________________________________________________________________________________________ Proyecto de Software 39

Page 20: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

Can´t find class HolaMundoApp Este es un error muy sutil. Generalmente significa que el nombre de la clase es distinto al del archivo que contiene el código fuente, con lo cual el archivo nombre_archivo.class que se genera es diferente del que cabría esperar. Por ejemplo, si en el archivo de código fuente de la aplicación HolaMundoApp.java se coloca en vez de la declaración actual de la clase HolaMundoApp, la línea: class HolaMundoapp { Se creará un archivo HolaMundoapp.class, que es diferente del HolaMundoApp.class, que es el nombre esperado de la clase; la diferencia se encuentra en la a minúscula y mayúscula.

________________________________________________________________________________________ Proyecto de Software 40

Page 21: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

TEMA 4 EL KIT DE DESARROLLO DE JDK

1. CÓMO Y DÓNDE OBTENER EL JDK? El primer paso será descargar (download) el JDK (Java Developers Kit) o actualmente el J2SE (Java 2 Estándar Edition), el cual esta disponible para las siguientes plataformas:

• SPARC Solaris • Intel x86 Solaris • Windows NT/95/98/2000/XP (Intel x86) • Macintosh

En la siguiente URL: http://Java.sun.com Si su plataforma de desarrollo es Windows 95, pueden bajarse el JDK desde: ftp://ftp.rcp.net.pe/pub/networks/win95/webedit Ahora si tienen alguna plataforma como AIX, OS2, Windows 3.x, pueden revisar la documentación de la URL: http://ncc.hursley.ibm.com/Javainfo en donde encontraran mayor información sobre compiladores (Just in Time -JIT). 2. EL ENTORNO DE DESARROLLO DE JAVA Existen distintos programas comerciales que permiten desarrollar código Java. La compañía Sun, creadora de Java, distribuye gratuitamente el Java(tm) Development Kit (JDK). Se trata de un conjunto de programas y librerías que permiten desarrollar, compilar y ejecutar programas en Java. Incorpora además la posibilidad de ejecutar parcialmente el programa, deteniendo la ejecución en el punto deseado y estudiando en cada momento el valor de cada una de las variables (es el denominado Debugger). Cualquier programador con un mínimo de experiencia sabe que una parte muy importante (muchas veces la mayor parte) del tiempo destinado a la elaboración de un programa se destina a la detección y corrección de errores. Existe también una versión reducida del JDK, denominada JRE (Java Runtime Environment) destinada únicamente a ejecutar código Java (no permite compilar). Los IDEs (Integrated Developmen Environment), tal y como su nombre indica, son entornos de desarrollo integrados.

________________________________________________________________________________________ Proyecto de Software 41

Page 22: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

En un mismo programa es posible escribir el código Java, compilarlo y ejecutarlo sin tener que cambiar de aplicación. Algunos incluyen una herramienta para realizar Debug gráficamente, frente a la versión que incorpora el JDK basada en la utilización de una consola (denominada habitualmente ventana de comandos de MS-DOS, en Windows NT/95/98/2000/XP) bastante difícil y pesada de utilizar. Estos entornos integrados permiten desarrollar las aplicaciones de forma mucho más rápida, incorporando en muchos casos librerías con componentes ya desarrollados, los cuales se incorporan al proyecto o programa. Como inconvenientes se pueden señalar algunos fallos de compatibilidad entre plataformas y archivos resultantes de mayor tamaño que los basados en clases estándar. 3. QUÉ ES EL JDK? El JDK, es un conjunto de herramientas de desarrollo el cual consta de: 3.1 El compilador de Java Se trata de una de las herramientas de desarrollo incluidas en el JDK. Realiza un análisis de sintaxis del código escrito en los archivos fuente de Java (con extensión *.java). Si no encuentra errores en el código genera los archivos compilados (con extensión *.class). En otro caso muestra la línea o líneas erróneas. En el JDK de Sun dicho compilador se llama javac.exe. Tiene numerosas opciones, algunas de las cuales varían de una versión a otra. Se aconseja consultar la documentación de la versión del JDK utilizada para obtener una información detallada de las distintas posibilidades. 3.2 La Java Virtual Machine Tal y como se ha comentado al comienzo, la existencia de distintos tipos de procesadores y computadores llevó a los ingenieros de Sun a la conclusión de que era muy importante conseguir un software que no dependiera del tipo de procesador utilizado. Se plantea la necesidad de conseguir un código capaz de ejecutarse en cualquier tipo de máquina. Una vez compilado no debería ser necesaria ninguna modificación por el hecho de cambiar de procesador o de ejecutarlo en otra máquina. La clave consistió en desarrollar un código “neutro” el cual estuviera preparado para ser ejecutado sobre una “máquina hipotética o virtual”, denominada Java Virtual Machine (JVM). Es esta JVM quien interpreta este código neutro convirtiéndolo a código particular de la CPU o chip utilizada. Se evita tener que realizar un programa diferente para cada CPU o plataforma. La JVM es el intérprete de Java. Ejecuta los “bytecodes” (archivos compilados con extensión *.class) creados por el compilador de Java (javac.exe). Tiene numerosas opciones entre las que destaca la posibilidad de utilizar el denominado JIT (Just-In-Time Compiler), que puede mejorar entre 10 y 20 veces la velocidad de ejecución de un programa.

________________________________________________________________________________________ Proyecto de Software 42

Page 23: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

3.3 Las variables PATH y CLASSPATH El desarrollo y ejecución de aplicaciones en Java exige que las herramientas para compilar (javac.exe) y ejecutar (java.exe) se encuentren accesibles. El computador, desde una ventana de comandos de MS-DOS, sólo es capaz de ejecutar los programas que se encuentran en los directorios indicados en la variable PATH del computador. Si se desea compilar o ejecutar código en Java en estos casos el directorio donde se encuentran estos programas (java.exe y javac.exe) deberán encontrarse en el PATH. Tecleando set PATH en una ventana de comandos de MS-DOS se muestran los nombres de directorios incluidos en dicha variable de entorno. Java utiliza además una nueva variable de entorno denominada CLASSPATH, la cual determina dónde buscar tanto las clases o librerías de Java (el API de Java) como otras clases de usuario. A partir de la versión 1.1.4 del JDK no es necesario indicar esta variable, salvo que se desee añadir conjuntos de clases de usuario que no vengan con dicho JDK. La variable CLASSPATH puede incluir la ruta de directorios o archivos *.zip o *.jar en los que se encuentren los archivos *.class. En el caso de los archivos *.zip hay que indicar que los archivos en él incluidos no deben estar comprimidos. En el caso de archivos *.jar existe una herramienta (jar.exe), incorporada en el JDK, que permite generar estos archivos a partir de los archivos compilados *.class. Los archivos *.jar son archivos comprimidos y por lo tanto ocupan menos espacio que los archivos *.class por separado o que el archivo *.zip equivalente. También es posible utilizar la opción –classpath en el momento de llamar al compilador javac.exe o al intérprete java.exe. Los archivos *.jar deben ponerse con el nombre completo en el CLASSPATH: no basta poner el PATH o directorio en el que se encuentra. Por ejemplo, si se desea compilar y ejecutar el archivo ContieneMain.java, y éste necesitara la librería de clases G:\MyProject\OtherClasses.jar, además de las incluidas en el CLASSPATH, la forma de compilar y ejecutar sería: >javac -classpath .\;G:\MyProject\OtherClasses.jar ContieneMain.java >java -classpath .\;G:\MyProject\OtherClasses.jar ContieneMain Se aconseja consultar la ayuda correspondiente a la versión que se esté utilizando, debido a que existen pequeñas variaciones entre las distintas versiones del JDK. Cuando un archivo filename.java se compila y en ese directorio existe ya un archivo filename.class, se comparan las fechas de los dos archivos. Si el archivo filename.java es más antiguo que el filename.class no se produce un nuevo archivo filename.class. Esto sólo es válido para archivos *.class que se corresponden con una clase public.

________________________________________________________________________________________ Proyecto de Software 43

Page 24: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

En resumen se puede decir que tiene las siguientes herramientas. appletviewer.exe Es el visor de applets de Java. El appletviewer descarga uno o más documentos HTML especificados por la URL en la línea de comando. Descarga todos los applets referenciados en cada documento y muestra estos. Cada uno en su propia ventana. Si ninguno de los documentos mostrados tiene una marca <APPLET>, appletviewer no hace nada. Opciónes: -debug Inicia el Java debugger jdb, permitiéndote depurar el applet en el documento. Java.exe Es el intérprete de Java ejecuta byte-codes creados por Javac, el compilador de Java. El argumento nombre_de_clase es el nombre de la clase a ser ejecutada y argumentos son los parámeros pasados a la clase. Sintaxis: Java [opciónes] nombre_de_clase <argumentos> Java_g [opciónes] nombre_de_clase <argumentos> Opciónes: -debug Permite que el jdb (Java debugger) se conecte a si mismo a la sesión de Java. Cuando -debug es especificado en la línea de comandos, Java muestra una contraseña, la cual debe ser usada cuando comienza la sesión de depuración. -cs, Compara la fecha de modificación del archivo de la clase. -checksource Con la del archivo fuente. Cuando la clase es cargada, si el archivo fuente tiene una fecha mas reciente que la del archivo de la clase entonces el archivo fuente es recompilado y los byte-codes resultantes vueltos a cargar. -classpath Especifica el camino que Java usa para buscar las clases. -path Sobreescribe el establecido por defecto o la variable de entorno CLASSPATH si esta ha sido establecida anteriormente. Los Directorios en la variable CLASSPATH son separados con punto y coma (;). Hasta aquí el formato general para el path es: .;<tu_camino> Por ejemplo:

________________________________________________________________________________________ Proyecto de Software 44

Page 25: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

C:\users\avh\classes\;C:\jdk\classes -v, -verbose Hace que Java imprima un mensaje en la salida estándar cada vez que un archivo de clase es cargado. -verify Ejecuta el verificador de todo el código que es cargado en remote el sistema via un classloader. verifyremote es el valor por defecto para el interprete. Javac.exe Javac, es el compilador del lenguaje Java, es decir compila los archivos (*.java) en byte-codes, archivos (*.class), el compilador Javac ha sido escrito en el mismo Java. Por defecto Javac, genera los archivos (*.class), en el mismo directorio del archivo fuente (*.Java) Cuando un archivo fuente de Java hace referencia a una clase que no esta definida en alguno de los archivos fuente del comando de línea, entonces Javac hace uso del Classpath, por defecto el Classpath, solo contiene las clases del sistema. Sintaxis: Javac [opciónes] archivos Opciónes: -classpath ruta Aquí ruta, le dice a classpath a donde tiene que ir a buscar las clases especificadas en el código fuente. Javac -d [ruta de clases] [ruta de fuentes] Ejemplo: >Javac -d c:\Java\clases c:\Java\fuentes\work1.Java Javadoc.exe Javadoc genera documentación API en formato HTML para el paquete especificado o para los archivos fuentes individuales en Java en la línea de comandos. Sintaxis: Javadoc [opciónes] nombre_de_paquete Javadoc [opciónes] nombre_de_archivo Opciónes: -classpath path El path que Javap usa para encontrar las clases nombradas en la línea de comandos.

________________________________________________________________________________________ Proyecto de Software 45

Page 26: TEMA 1 ORIGENES DEL LENGUAJE JAVA 1. INTRODUCCIÓNvirtual.usalesiana.edu.bo/web/contenido/dossier/22011/917.pdfpara enganchar aplicaciones de ayuda dentro de sus navegadores Web. Y

Unidad II: Introducción y Fundamentos de Java ________________________________________________________________________________________

-d directory Especifica un directorio en donde Javadoc almacena los archivos HTML que genera. Por defecto es el directorio actual. Javap.exe Javah desensambla el archivo de clases especificado por los nombres de clases en la línea de comandos e imprime una versión humanamente comprensible de esas clases. Sintaxis: Javap [opciónes] nombre de_clase Opciónes: -c Imprime las instrucciónes de la maquína virtual de Java para cada uno de los métodos en cada una de las clases especificadas. Esta opción desensambla todos los métodos incluyendo los privados y protegidos. -p Imprime métodos privados y protegidos y variables de la clase especificada además de las publicas. jdb.exe jdb es un depurador para clases de Java. Este esta basado en una línea de comandos de texto y tiene una sintaxis de comandos como la del dbx en UNIX o depuradores gdb.

________________________________________________________________________________________ Proyecto de Software 46