manual java 01

Upload: alejandro-huapaya-sanchez

Post on 10-Apr-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/8/2019 Manual Java 01

    1/43

    LENGUAJE DE PROGRAMACIN : JAVA 1 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    1.1 Origen de Java

    Sun Microsystems, lder en servidores para Internet, uno de cuyos lemas desde hace muchotiempo es "the network is the computer" (lo que quiere dar a entender que el verdadero ordenador

    es la red en su conjunto y no cada mquina individual), es quien ha desarrollado el lenguaje Java,en un intento de resolver simultneamente todos los problemas que se le plantean a losdesarrolladores de software por la proliferacin de arquitecturas incompatibles, tanto entre lasdiferentes mquinas como entre los diversos sistemas operativos y sistemas de ventanas quefuncionaban sobre una misma mquina, aadiendo la dificultad de crear aplicaciones distribuidasen una red como Internet.

    He podido leer ms de cinco versiones distintas sobre el origen, concepcin y desarrollo de Java,desde la que dice que este fue un proyecto que rebot durante mucho tiempo por distintosdepartamentos de Sun sin que nadie le prestara ninguna atencin, hasta que finalmente encontrsu nicho de mercado en la aldea global que es Internet; hasta la ms difundida, que justifica a Javacomo lenguaje de pequeos electrodomsticos.

    Hace algunos aos, Sun Microsystems decidi intentar introducirse en el mercado de la electrnicade consumo y desarrollar programas para pequeos dispositivos electrnicos. Tras unoscomienzos dudosos, Sun decidi crear una filial, denominada FirstPerson Inc., para dar margen demaniobra al equipo responsable del proyecto.

    El mercado inicialmente previsto para los programas de FirstPerson eran los equipos domsticos:microondas, tostadoras y, fundamentalmente, televisin interactiva. Este mercado, dada la falta depericia de los usuarios para el manejo de estos dispositivos, requera unos interfaces mucho mscmodos e intuitivos que los sistemas de ventanas que proliferaban en el momento.

    Otros requisitos importantes a tener en cuenta eran la fiabilidad del cdigo y la facilidad dedesarrollo. James Gosling, el miembro del equipo con ms experiencia en lenguajes de

    programacin, decidi que las ventajas aportadas por la eficiencia de C++ no compensaban elgran coste de pruebas y depuracin. Gosling haba estado trabajando en su tiempo libre en unlenguaje de programacin que l haba llamado Oak, el cual, an partiendo de la sintaxis de C++,intentaba remediar las deficiencias que iba observando.

    Los lenguajes al uso, como C o C++, deben ser compilados para un chip, y si se cambia el chip,todo el software debe compilarse de nuevo. Esto encarece mucho los desarrollos y el problema esespecialmente acusado en el campo de la electrnica de consumo. La aparicin de un chip msbarato y, generalmente, ms eficiente, conduce inmediatamente a los fabricantes a incluirlo en lasnuevas series de sus cadenas de produccin, por pequea que sea la diferencia en precio ya que,multiplicada por la tirada masiva de los aparatos, supone un ahorro considerable. Por tanto,Gosling decidi mejorar las caractersticas de Oak y utilizarlo.

    El primer proyecto en que se aplic este lenguaje recibi el nombre de proyectoGreen y consista en un sistema de control completo de los aparatos electrnicos yel entorno de un hogar. Para ello se construy un ordenador experimentaldenominado *7 (Star Seven). El sistema presentaba una interfaz basada en larepresentacin de la casa de forma animada y el control se llevaba a cabomediante una pantalla sensible al tacto. En el sistema apareca Duke, la actualmascota de Java.

    Posteriormente se aplic a otro proyecto denominado VOD (Video On Demand) en el que seempleaba como interfaz para la televisin interactiva. Ninguno de estos proyectos se convirtinunca en un sistema comercial, pero fueron desarrollados enteramente en un Java primitivo yfueron como su bautismo de fuego.

  • 8/8/2019 Manual Java 01

    2/43

    LENGUAJE DE PROGRAMACIN : JAVA 2 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Una vez que en Sun se dieron cuenta de que a corto plazo la televisin interactiva no iba a ser ungran xito, urgieron a FirstPerson a desarrollar con rapidez nuevas estrategias que produjeranbeneficios. No lo consiguieron y FirstPerson cerr en la primavera de 1994.

    Pese a lo que pareca ya un olvido definitivo, Bill Joy, cofundador de Sun y uno de losdesarrolladores principales del Unix de Berkeley, juzg que Internet podra llegar a ser el campo dejuego adecuado para disputar a Microsoft su primaca casi absoluta en el terreno del software, yvio en Oak el instrumento idneo para llevar a cabo estos planes. Tras un cambio de nombre ymodificaciones de diseo, el lenguaje Java fue presentado en sociedad en agosto de 1995.

    Lo mejor ser hacer caso omiso de las historias que pretenden dar carta de naturaleza a laclarividencia industrial de sus protagonistas; porque la cuestin es si independientemente de suorigen y entorno comercial, Java ofrece soluciones a nuestras expectativas. Porque tampocovamos a desechar la penicilina aunque haya sido su origen fruto de la casualidad.

    1.2 Caractersticas de Java

    Las caractersticas principales que nos ofrece Java respecto a cualquier otro lenguaje deprogramacin, son:

    Simple

    Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las caractersticas menosusadas y ms confusas de stos. C++ es un lenguaje que adolece de falta de seguridad, pero C yC++ son lenguajes ms difundidos, por ello Java se dise para ser parecido a C++ y as facilitarun rpido y fcil aprendizaje.

    Java elimina muchas de las caractersticas de otros lenguajes como C++, para mantener reducidas

    las especificaciones del lenguaje y aadir caractersticas muy tiles como el garbage collector(reciclador de memoria dinmica). No es necesario preocuparse de liberar memoria, el recicladorse encarga de ello y como es un thread de baja prioridad, cuando entra en accin, permite liberarbloques de memoria muy grandes, lo que reduce la fragmentacin de la memoria.

    Java reduce en un 50% los errores ms comunes de programacin con lenguajes como C y C++ aleliminar muchas de las caractersticas de stos, entre las que destacan:

    aritmtica de punteros

    no existen referencias

    registros (struct)

    definicin de tipos (typedef)

    macros (#define)

    necesidad de liberar memoria (free)

    Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que lasclases son algo parecido.

    Adems, el intrprete completo de Java que hay en este momento es muy pequeo, solamente

    ocupa 215 Kb de RAM.

  • 8/8/2019 Manual Java 01

    3/43

    LENGUAJE DE PROGRAMACIN : JAVA 3 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Orientado a objetos

    Java implementa la tecnologa bsica de C++ con algunas mejoras y elimina algunas cosas paramantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con

    interfaces a esos objetos. Soporta las tres caractersticas propias del paradigma de la orientacin aobjetos: encapsulacin, herencia y polimorfismo. Las plantillas de objetos son llamadas, como enC++, clases y sus copias, instancias. Estas instancias, como en C++, necesitan ser construidas ydestruidas en espacios de memoria.

    Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolucin dinmica demtodos. Esta caracterstica deriva del lenguaje Objective C, propietario del sistema operativoNext. En C++ se suele trabajar con libreras dinmicas (DLLs) que obligan a recompilar laaplicacin cuando se retocan las funciones que se encuentran en su interior. Este inconveniente esresuelto por Java mediante una interfaz especfica llamada RTTI (RunTime Type Identification) quedefine la interaccin entre objetos excluyendo variables de instancias o implementacin demtodos. Las clases en Java tienen una representacin en el runtime que permite a losprogramadores interrogar por el tipo de clase y enlazar dinmicamente la clase con el resultado dela bsqueda.

    Distribuido

    Java se ha construido con extensas capacidades de interconexin TCP/IP. Existen libreras derutinas para acceder e interactuar con protocolos como http y ftp. Esto permite a losprogramadores acceder a la informacin a travs de la red con tanta facilidad como a los ficheroslocales.

    La verdad es que Java en s no es distribuido, sino que proporciona las libreras y herramientaspara que los programas puedan ser distribuidos, es decir, que se corran en varias mquinas,interactuando.

    Robusto

    Java realiza verificaciones en busca de problemas tanto en tiempo de compilacin como en tiempode ejecucin. La comprobacin de tipos en Java ayuda a detectar errores, lo antes posible, en elciclo de desarrollo. Java obliga a la declaracin explcita de mtodos, reduciendo as lasposibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte delprogramador de la liberacin o corrupcin de memoria.

    Tambin implementa los arrays autnticos, en vez de listas enlazadas de punteros, concomprobacin de lmites, para evitar la posibilidad de sobrescribir o corromper memoria resultadode punteros que sealan a zonas equivocadas. Estas caractersticas reducen drsticamente el

    tiempo de desarrollo de aplicaciones en Java.

    Adems, para asegurar el funcionamiento de la aplicacin, realiza una verificacin de los byte-codes, que son el resultado de la compilacin de un programa Java. Es un cdigo de mquinavirtual que es interpretado por el intrprete Java. No es el cdigo mquina directamente entendiblepor el hardware, pero ya ha pasado todas las fases del compilador: anlisis de instrucciones, ordende operadores, etc., y ya tiene generada la pila de ejecucin de rdenes.

    Java proporciona, pues:

    Comprobacin de punteros . Comprobacin de lmites de arrays . Excepciones .Verificacin de byte-codes

  • 8/8/2019 Manual Java 01

    4/43

    LENGUAJE DE PROGRAMACIN : JAVA 4 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Arquitectura neutral

    Para establecer Java como parte integral de la red, el compilador Java compila su cdigo a unfichero objeto de formato independiente de la arquitectura de la mquina en que se ejecutar.

    Cualquier mquina que tenga el sistema de ejecucin (run-time) puede ejecutar ese cdigo objeto,sin importar en modo alguno la mquina en que ha sido generado. Actualmente existen sistemasrun-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple yprobablemente haya grupos de desarrollo trabajando en el porting a otras plataformas. El cdigofuente Java se "compila" a un cdigo de bytes de alto nivel independiente de la mquina. Estecdigo (byte-codes) est diseado para ejecutarse en una mquina hipottica que esimplementada por un sistema run-time, que s es dependiente de la mquina.

    En una representacin en que tuvisemos que indicar todos los elementos que forman parte de laarquitectura de Java sobre una plataforma genrica, obtendramos una figura como la siguiente:

  • 8/8/2019 Manual Java 01

    5/43

    LENGUAJE DE PROGRAMACIN : JAVA 5 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    En ella podemos ver que lo verdaderamente dependiente del sistema es la Mquina Virtual Java(JVM) y las libreras fundamentales, que tambin nos permitiran acceder directamente al hardware

    de la mquina. Adems, habr APIs de Java que tambin entren en contacto directo con elhardware y sern dependientes de la mquina, como ejemplo de este tipo de APIs podemos citar:

    Java 2D: grficos 2D y manipulacin de imgenes

    Java Media Framework : Elementos crticos en el tiempo: audio, video...

    Java Animation: Animacin de objetos en 2D

    Java Telephony: Integracin con telefona

    Java Share: Interaccin entre aplicaciones multiusuario

    Java 3D: Grficos 3D y su manipulacin

    Seguro

    La seguridad en Java tiene dos facetas. En el lenguaje, caractersticas como los punteros o elcasting implcito que hacen los compiladores de C y C++ se eliminan para prevenir el acceso ilegala la memoria. Cuando se usa Java para crear un navegador, se combinan las caractersticas dellenguaje con protecciones de sentido comn aplicadas al propio navegador.

    El lenguaje C, por ejemplo, tiene lagunas de seguridad importantes, como son los errores dealineacin. Los programadores de C utilizan punteros en conjuncin con operaciones aritmticas.

    Esto le permite al programador que un puntero referencie a un lugar conocido de la memoria ypueda sumar (o restar) algn valor, para referirse a otro lugar de la memoria. Si otrosprogramadores conocen nuestras estructuras de datos pueden extraer informacin confidencial denuestro sistema. Con un lenguaje como C, se pueden tomar nmeros enteros aleatorios yconvertirlos 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 programacomo una utilidad, resultando tener una funcionalidad destructiva. Por ejemplo, en UNIX sevisualiza el contenido de un directorio con el comando ls. Si un programador deja un comandodestructivo bajo esta referencia, se puede correr el riesgo de ejecutar cdigo malicioso, aunque elcomando siga haciendo la funcionalidad que se le supone, despus de lanzar su carga destructiva.

    Por ejemplo, despus de que el caballo de Troya haya enviado por correo el /etc/shadow a sucreador, ejecuta la funcionalidad de ls presentando el contenido del directorio. Se notar unretardo, pero nada inusual.

    El cdigo Java pasa muchos tests antes de ejecutarse en una mquina. El cdigo se pasa a travsde un verificador de byte-codes que comprueba el formato de los fragmentos de cdigo y aplica un

    probador de teoremas para detectar fragmentos de cdigo ilegal -cdigo que falsea punteros, violaderechos de acceso sobre objetos o intenta cambiar el tipo o clase de un objeto-.

  • 8/8/2019 Manual Java 01

    6/43

    LENGUAJE DE PROGRAMACIN : JAVA 6 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Si los byte-codes pasan la verificacin sin generar ningn mensaje de error, entonces sabemosque:

    El cdigo no produce desbordamiento de operandos en la pila El tipo de los parmetros de todos los cdigos de operacin son conocidos y correctos. No ha ocurrido ninguna conversin 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 ningn intento de violar las reglas de acceso y seguridad establecidas

    El Cargador de Clases tambin ayuda a Java a mantener su seguridad, separando el espacio denombres del sistema de ficheros local, del de los recursos procedentes de la red. Esto limitacualquier aplicacin del tipo Caballo de Troya, ya que las clases se buscan primero entre laslocales y luego entre las procedentes del exterior.

    Las clases importadas de la red se almacenan en un espacio de nombres privado, asociado con elorigen. Cuando una clase del espacio de nombres privado accede a otra clase, primero se busca en lasclases predefinidas (del sistema local) y luego en el espacio de nombres de la clase que hace lareferencia. Esto imposibilita que una clase suplante a una predefinida.En resumen, las aplicaciones de Java resultan extremadamente seguras, ya que no acceden a zonasdelicadas de memoria o de sistema, con lo cual evitan la interaccin de ciertos virus. Java no posee unasemntica especfica para modificar la pila de programa, la memoria libre o utilizar objetos y mtodos deun programa sin los privilegios del kernel del sistema operativo. Adems, para evitar modificaciones porparte de los crackers de la red, implementa un mtodo ultraseguro de autentificacin por clave pblica.El Cargador de Clases puede verificar una firma digital antes de realizar una instancia de un objeto. Portanto, ningn objeto se crea y almacena en memoria, sin que se validen los privilegios de acceso. Esdecir, la seguridad se integra en el momento de compilacin, con el nivel de detalle y de privilegio que

    sea necesario.Dada, pues la concepcin del lenguaje y si todos los elementos se mantienen dentro del estndarmarcado por Sun, no hay peligro. Java imposibilita, tambin, abrir ningn fichero de la mquina local(siempre que se realizan operaciones con archivos, stas trabajan sobre el disco duro de la mquina dedonde parti el applet), no permite ejecutar ninguna aplicacin nativa de una plataforma e impideque se utilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra mquina parahacer peticiones o realizar operaciones con otra. Adems, los intrpretes que incorporan losnavegadores de la Web son an ms restrictivos. Bajo estas condiciones (y dentro de la filosofa de queel nico ordenador seguro es el que est apagado, desenchufado, dentro de una cmara acorazada enun bunker y rodeado por mil soldados de los cuerpos especiales del ejrcito), se puede considerar queJava es un lenguaje seguro y que los applets estn libres de virus.

    Respecto a la seguridad del cdigo fuente, no ya del lenguaje, JDK proporciona undesemsamblador de byte-code, que permite que cualquier programa pueda serconvertido a cdigo fuente, lo que para el programador significa una vulnerabilidadtotal a su cdigo. Utilizando javap no se obtiene el cdigo fuente original, pero sdesmonta el programa mostrando el algoritmo que se utiliza, que es lo realmenteinteresante. La proteccin de los programadores ante esto es utilizar llamadas aprogramas nativos, externos (incluso en C o C++) de forma que no sea

    descompilable todo el cdigo; aunque as se pierda portabilidad. Esta es otra de las cuestiones que Javatiene pendientes.

    PortableMs all de la portabilidad bsica por ser de arquitectura independiente, Java implementa otrosestndares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y adems,enteros de 32 bits en complemento a 2. Adems, Java construye sus interfaces de usuario a travs de

  • 8/8/2019 Manual Java 01

    7/43

    LENGUAJE DE PROGRAMACIN : JAVA 7 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    un sistema abstracto de ventanas de forma que las ventanas puedan ser implantadas en entornos Unix,Pc o Mac.Interpretado

    El intrprete Java (sistema run-time) puede ejecutar directamente el cdigo objeto. Enlazar (linkar) unprograma, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores conJava pasarn ms tiempo desarrollando y menos esperando por el ordenador. No obstante, elcompilador actual del JDK es bastante lento. Por ahora, que todava no hay compiladores especficos deJava para las diversas plataformas, Java es ms lento que otros lenguajes de programacin, 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 ms lento que C, y que tampoco existen en Java proyectos degran envergadura como en otros lenguajes. La verdad es que ya hay comparaciones ventajosas entreJava y el resto de los lenguajes de programacin, y una ingente cantidad de folletos electrnicos quesupuran fanatismo en favor y en contra de los distintos lenguajes contendientes con Java. Lo que sesuele dejar de lado en todo esto, es que primero habra que decidir hasta que punto Java, un lenguajeen pleno desarrollo y todava sin definicin definitiva, est maduro como lenguaje de programacin para

    ser comparado con otros; como por ejemplo con Smalltalk, que lleva ms de 20 aos en cancha.

    La verdad es que Java para conseguir ser un lenguaje independiente del sistema operativoy del procesador que incorpore la mquina utilizada, es tanto interpretado como compilado.Y esto no es ningn contrasentido, me explico, el cdigo fuente escrito con cualquier editorse compila generando el byte-code. Este cdigo intermedio es de muy bajo nivel, pero sinalcanzar las instrucciones mquina propias de cada plataforma y no tiene nada que ver conel p-code de Visual Basic. El byte-code corresponde al 80% de las instrucciones de la

    aplicacin. Ese mismo cdigo es el que se puede ejecutar sobre cualquier plataforma. Para ello hacefalta el run-time, que s es completamente dependiente de la mquina y del sistema operativo, queinterpreta dinmicamente el byte-code y aade el 20% de instrucciones que faltaban para su ejecucin.Con este sistema es fcil crear aplicaciones multiplataforma, pero para ejecutarlas es necesario queexista el run-time correspondiente al sistema operativo utilizado.

    MultithreadedAl ser multithreaded (multihilvanado, en mala traduccin), Java permite muchas actividades simultneasen un programa. Los threads (a veces llamados, procesos ligeros), son bsicamente pequeos procesoso piezas independientes de un gran proceso. Al estar los threads contruidos en el lenguaje, son msfciles de usar y ms robustos que sus homlogos en C o C++.

    El beneficio de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento entiempo real. Aunque el comportamiento en tiempo real est limitado a las capacidades del sistemaoperativo subyacente (Unix, Windows, etc.), an supera a los entornos de flujo nico de programa(single-threaded) tanto en facilidad de desarrollo como en rendimiento.

    Cualquiera que haya utilizado la tecnologa de navegacin concurrente, sabe lo frustrante que puede seresperar por una gran imagen que se est trayendo. En Java, las imgenes se pueden ir trayendo en unthread independiente, permitiendo que el usuario pueda acceder a la informacin en la pgina sin tenerque esperar por el navegador.DinamicoJava se beneficia todo lo posible de la tecnologa orientada a objetos. Java no intenta conectar todos losmdulos que comprenden una aplicacin hasta el tiempo de ejecucin. Las librera nuevas oactualizadas no paralizarn las aplicaciones actuales (siempre que mantengan el API anterior).

    Java tambin simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una aplicacinJava sobre la red y encuentra una pieza de la aplicacin que no sabe manejar, tal como se ha explicado

    en prrafos anteriores, Java es capaz de traer automticamente cualquiera de esas piezas que elsistema necesita para funcionar.

  • 8/8/2019 Manual Java 01

    8/43

    LENGUAJE DE PROGRAMACIN : JAVA 8 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Java, para evitar que los mdulos de byte-codes o los objetos o nuevas clases, haya que estartrayndolos de la red cada vez que se necesiten, implementa las opciones de persistencia, para que nose eliminen cuando de limpie la cach de la mquina.Cul es la ventaja de todo esto?Qu se gana con Java?

    Primero: No debes volver a escribir el cdigo si quieres ejecutar el programa en otra mquina.Un solo cdigo funciona para todos los browsers compatibles con Java o donde se tenga unaMquina Virtual de Java (Mac's, PC's, Sun's, etc).

    Segundo: Java es un lenguaje de programacin orientado a objetos, y tiene todos los beneficiosque ofrece esta metodologa de programacion (ms adelante doy una pequea introduccin a lafilosofa de objetos).

    Tercero: Un browser compatible con Java deber ejecutar cualquier programa hecho en Java,esto ahorra a los usuarios tener que estar insertando "plug-ins" y dems programas que a veces

    nos quitan tiempo y espacio en disco. Cuarto: Java es un lenguaje y por lo tanto puede hacer todas las cosas que puede hacer un

    lenguaje de programacin: Clculos matemticos, procesadores de palabras, bases de datos,aplicaciones grficas, animaciones, sonido, hojas de clculo, etc.

    Quinto: Si lo que me interesa son las pginas de Web, ya no tienen que ser estticas, se lepueden poner toda clase de elementos multimedia y permiten un alto nivel de interactividad, sintener que gastar en paquetes carsimos de multimedia.

    Todo esto suena muy bonito pero tambien se tienen algunas limitantes:

    La velocidad. Los programas hechos en Java no tienden a ser muy rpidos, supuestamente se est

    trabajando en mejorar esto. Como los programas de Java son interpretados nunca alcanzan lavelocidad de un verdadero ejecutable.

    Java es un lenguaje de programacin. Esta es otra gran limitante, por ms que digan que esorientado a objetos y que es muy fcil de aprender sigue siendo un lenguaje y por lo tantoaprenderlo no es cosa fcil. Especialmente para los no programadores.

    Java es nuevo. En pocas palabras todava no se conocen bien todas sus capacidades.

    Pero en general Java posee muchas ventajas y se pueden hacer cosas muy interesantes con esto.Hay que prestar especial atencin a lo que est sucediendo en el mundo de la computacin, a

    pesar de que Java es relativamente nuevo, posee mucha fuerza y es tema de moda en cualquier mediocomputacional. Muchas personas apuestan a futuro y piensan en Java. La pregunta es : Estarn en lo

  • 8/8/2019 Manual Java 01

    9/43

    LENGUAJE DE PROGRAMACIN : JAVA 9 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    correcto? La verdad es que no se, pero este manual no es para filosofar sobre el futuro del lenguaje sinopara aprender a programarlo.

    1.3 HotJavaHotJava, en pocas palabras, es un navegador con soporte Java (Java-enabled), desarrollado en Java.Como cualquier navegador de Web, HotJava puede decodificar HTML estndar y URLs estndares,aunque no soporta completamente el estndar HTML 3.0. La ventaja sobre el resto de navegadores, sinsoporte Java, es que puede ejecutar programas Java sobre la red. La diferencia con Netscape, es quetiene implementado completamente los sistemas de seguridad que propone Java, esto significa quepuede escribir y leer en el disco local, aunque esto hace disminuir la seguridad, ya que se puedengrabar en nuestro disco programas que contengan cdigo malicioso e introducirnos un virus, porejemplo. No obstante, el utilizar esta caracterstica de HotJava es decisin del usuario.

    1.4 Java para aplicaciones corporativasJava actualmente est en boca de todos, Java e Intranet son las palabras de moda. Pero, surge la

    pregunta de si esta es una buena tecnologa para desarrollar aplicaciones corporativas. Y la respuestaes afirmativa y voy a proponer argumentos para esa afirmacin. En donde la red sea algo crtico, Javafacilita tremendamente la vida de la programacin corporativa.Durante aos, las grandes empresas se han convencido de que la "red" corporativa es la arteria pordonde fluye la sangre que mantiene vivo su negocio. Desde el gran servidor de sus oficinas centrales,hasta los servidores de las delegaciones, las estaciones de trabajo de los programadores y lamarabunta de PCs, la informacin va fluyendo de unos a otros. Para muchas compaas, la Red es laEmpresa.Si esta red no se mantiene sana, los pedidos no llegan, el inventario no se actualiza, el software no sedesarrolla adecuadamente, los clientes no estn satisfechos y, fundamentalmente, el dinero no entra. Lanecesidad de diagnosticar y reducir la arterioesclerosis de la red, hace que se estn inyectandocontinuamente nuevas metodologas que subsanen este grave problema.

    Es Java la medicina? Est claro que cuando vemos un cepillo animado limpiando los dientes, cubosmovindose en 3-D, o una banda de gatos locos en applets de Java, nos convencemos de que es ellenguaje idneo para Internet. Pero, qu pasa con las aplicaciones corporativas, sera una buenatecnologa all donde la red es el punto crtico? Vamos a intentar responder comparando lascapacidades de Java contra la lista de necesidades de la red corporativa.Desarrollo rpido de aplicacionesHace aos, se deca que los programadores pronto desapareceran. Los generadores automticos deprogramas, eliminaran a los generadores humanos y el mundo sera un lugar mejor para vivir.Desafortunadamente, quienes decan esto no tuvieron en cuenta una acelerada demanda de softwarede calidad para muy diferentes aplicaciones. Sin embargo, la tecnologa de objetos pronto vino a intentar

    facilitar la tarea, adoptando el modelo de "generar parte de un programa", as, generando la parte bsicade un programa (los objetos), se podra conectar con otras partes para proporcionar diferentes utilidadesal usuario.El lenguaje C++ es una buena herramienta, pero no cumple totalmente la premisa. Visual Basic yNextStep, se acercan cada vez ms al poder de los objetos. Java facilita la creacin de entornos dedesarrollo-aplicaciones de modo similar, pero adems es flexible, poderoso y efectivo. Losprogramadores ahora disponen de herramientas de programacin de calidad beta, que apuntan haciaesa meta, como son el Java WorkShop de SunSoft, el entorno Java de Borland, el Caf de Symantec, ypronto, herramientas ms sofisticadas como Netcode o FutureTense. Esto proporciona una granprogresin a los entornos de desarrollo Java.Aplicaciones efectivas y eficientes

    Las aplicaciones que se crean en grandes empresas deben ser ms efectivas que eficientes; es decir,conseguir que el programa funcione y el trabajo salga adelante es ms importante que el que lo hagaeficientemente. Esto no es una crtica, es una realidad de la programacin corporativa. Al ser un

  • 8/8/2019 Manual Java 01

    10/43

    LENGUAJE DE PROGRAMACIN : JAVA 10 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    lenguaje ms simple que cualquiera de los que ahora estn en el cajn de los programadores, Javapermite a stos concentrarse en la mecnica de la aplicacin, en vez de pasarse horas y horasincorporando APIs para el control de las ventanas, controlando minuciosamente la memoria,sincronizando los ficheros de cabecera y corrigiendo los agnicos mensajes del linker. Java tiene su

    propio toolkit para interfaces, maneja por s mismo la memoria que utilice la aplicacin, no permiteficheros de cabecera separados (en aplicaciones puramente Java) y solamente usa enlace dinmico.Muchas de las implementaciones de Java actuales son puros intrpretes. Los byte-codes soninterpretados por el sistema run-time de Java, la Mquina Virtual Java (JVM), sobre el ordenador delusuario. Aunque ya hay ciertos proveedores que ofrecen compiladores nativos Just-In-Time (JIT). Si laMquina Virtual Java dispone de un compilador instalado, las secciones (clases) del byte-code de laaplicacin se compilarn hacia la arquitectura nativa del ordenador del usuario.

    Los programas Java en ese momento rivalizarn con el rendimiento de programas en C++. Loscompiladores JIT no se utilizan en la forma tradicional de un compilador; los programadores no compilany distribuyen binarios Java a los usuarios. La compilacin JIT tiene lugar a partir del byte-code Java, enel sistema del usuario, como una parte (opcional) del entorno run-time local de Java.

    Muchas veces, los programadores corporativos, ansiosos porexprimir al mximo la eficiencia de su aplicacin, empiezan ahacerlo demasiado pronto en el ciclo de vida de la aplicacin.Java permite algunas tcnicas innovadoras de optimizacin. Porejemplo, Java es inherentemente multithreaded, a la vez queofrece posibilidades de multithread como la clase Thread ymecanismos muy sencillos de usar de sincronizacin; Java en sutiliza threads. Los desarrolladores de compiladores inteligentespueden utilizar esta caracterstica de Java para lanzar un threadque compruebe la forma en que se est utilizando la aplicacin.Ms especficamente, este thread podra detectar qu mtodos deuna clase se estn usando con ms frecuencia e invocar asucesivos niveles de optimizacin en tiempo de ejecucin de la

    aplicacin. Cuanto ms tiempo est corriendo la aplicacin o el applet, los mtodos estarn cada vezms optimizados (Guava de Softway es de este tipo).Si un compilador JIT est embebido en el entorno run-time de Java, el programador no se preocupa dehacer que la aplicacin se ejecute ptimamente. Siempre he pensado que en los Sistemas Operativostendra que aplicarse esta filosofa; un optimizador progresivo es un paso ms hacia esta idea.Portabilidad para programador y programaEn una empresa de relativo tamao hay una plyade diferente de ordenadores. Probablemente nosencontremos con estaciones de trabajo Sun para el desarrollo de software, hordas de PCs para cadaempleado, algn Mac en el departamento de documentacin, una estacin de trabajo HP enadministracin y una estacin SGI en la sala de demos. Desarrollar aplicaciones corporativas para ungrupo tan diferente de plataformas en excesivamente complejo y caro. Hasta ahora era complicadoconvencer a los programadores de cada arquitectura que utilizasen un API comn para reducir el coste

    de las aplicaciones.Con un entorno run-time de Java portado a cada una de las arquitecturas de las plataformas presentesen la empresa y una buena librera de clases ("packages" en Java), los programadores puedenentenderse y encontrar muy interesante trabajar con Java. Esta posibilidad har tender a losprogramadores hacia Java, justo donde otros intentos anteriores con entornos universales (como Galaxyo XVT) han fracasado. Estos APIs eran simplemente inadecuados, no orientados a redes y,verdaderamente, pesados.Una vez que los programas estn escritos en Java, otro lado interesante del asunto es que losprogramadores tambin son portables. El grupo de programadores de la empresa puede ahoraenfrentarse a un desarrollo para cualquiera de las plataformas. La parte del cliente y del servidor de unaaplicacin estarn ahora escritas en el mismo lenguaje. Ya no ser necesario tener un grupo que

    desarrolle en Solaris en del departamento de I+D, programadores trabajando sobre Visual Basic en eldepartamento de documentacin y programadores sobre GNU en proyectos especiales; ahora todosellos podrn estar juntos y formar el grupo de software de la empresa.

  • 8/8/2019 Manual Java 01

    11/43

    LENGUAJE DE PROGRAMACIN : JAVA 11 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Costes de desarrolloEn contraste con el alto coste de los desarrollos realizados sobre estaciones de trabajo, el coste decreacin de una aplicacin Java es similar al de desarrollar sobre un PC.

    Desarrollar utilizando un software caro para una estacin de trabajo(ahora barata) es un problema en muchas empresas. La eficienciadel hardware y el poco coste de mantenimiento de una estacin detrabajo Sun, por ejemplo, resulta muy atractivo para las empresas;pero el coste adicional del entorno de desarrollo con C++ esprohibitivo para la gran mayora de ellas. La llegada de Java eIntranet reducen considerablemente estos costes. Las herramientasJava ya no estn en el entorno de precios de millones de pesetas,sino a los niveles confortables de precio de las herramientas de PCs.Y con el crecimiento cada da mayor de la comunidad dedesarrolladores de software freeware y shareware que incluso

    proporcionan el cdigo fuente, los programadores corporativos tienen un amplio campo donde moverse

    y muchas oportunidades de aprender y muchos recursos a su disposicin.El xito que Internet ha proporcionado a los equipos de software corporativos es un regalo. El precio delsoftware es ahora el mismo para un poderoso equipo corriendo Unix que para un PC. Incluso Netscapetiene al mismo precio la versin Unix de su servidor Web SuiteSpot que la versin PC/NT. Esta es lafilosofa de precios que parece ser ser la que se siga con las herramientas basadas en Java.Mantenimiento y soporte

    Un problema bien conocido que ocurre con el software corporativoes la demanda de cuidados y realimentacin. Java no es,ciertamente, la cura para la enfermedad del mantenimiento, perotiene varias caractersticas que harn la vida del enfermero msfcil.

    Uno de los componentes del JDK es javadoc. Si se usan ciertasconvenciones en el cdigo fuente Java (como comenzar uncomentario con /** y terminarlo con */), javadoc se puede fcilmentegenerar pginas HTML con el contenido de esos comentarios, quepueden visualizarse en cualquier navegador. La documentacin del

    API de Java ha sido creada de este modo. Esto hace que el trabajo de documentar el cdigo de nuevasclases Java sea trivial.Otro gran problema del desarrollador corporativo es la creacin y control de makefiles. Leerse unmakefile es como estar leyendo la historia de empresa. Normalmente se pasan de programador aprogramador, quitando la informacin que no es esencial, siempre que se puede. Esto hace que muchosde los makefiles de las aplicaciones contengan docenas de libreras, una mirada de ficheros de

    cabecera y ultra-confusos macros. Es como mirar en el estmago de la ballena de Jons.Java reduce las dependencia de complejos makefiles drsticamente. Primero, no hay ficheros decabecera. Java necesita que todo el cdigo fuente de una clase se encuentre en un solo fichero. Javatiene la inteligencia de make en el propio lenguaje para simplificar la compilacin de byte-codes.Por ejemplo:

    public class pepe { // Fichero: pepe.javaGuitarra flamenca ;}public class guitarra { // Fichero: guitarra.java}

    % javac -verbose pepe.java[parsed pepe.java in 720ms][loaded C:\JAVA\BIN\..\classes\java\lang\Object.class in 220ms]

  • 8/8/2019 Manual Java 01

    12/43

    LENGUAJE DE PROGRAMACIN : JAVA 12 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    [checking class pepe][parsed .\\Guitarra.java in 50ms][wrote pepe.class][checking class Guitarra]

    [wrote .\\Guitarra.class][done in 2300ms]El compilador Java se da cuenta de que necesita compilar el fichero guitarra.java. Ahora vamos aforzarlo a que recompile pepe.java sin cambiar guitarra.java, podremos comprobar que el compilador debyte-code Java no recompila innecesariamente el fichero guitarra.java.

    % javac -verbose pepe.java[parsed pepe.java in 440ms][loaded C:\JAVA\BIN\..\classes\java\lang\Object.class in 160ms][checking class pepe][loaded .\\Guitarra.java in 0ms][wrote pepe.class][done in 1860ms]

    Ahora, si modificamos guitarra.java (aadiendo, por ejemplo, otro miembro a la clase) y compilamospepe.java, el compilador Java se dar cuenta de que debe recompilar tanto pepe.java comoguitarra.java% javac -verbose pepe.java[parsed pepe.java in 710ms][loaded C:\JAVA\BIN\..\classes\java\lang\Object.class in 220ms][checking class pepe][parsed .\\Guitarra.java in 0ms][wrote pepe.class][checking class Guitarra][wrote .\\Guitarra.class]

    [done in 2640ms]En el libro Just Java de Peter van der Linden hay un captulo excelente acerca del compilador de Java,si tienes oportunidad, no dejes de leerlo.AprendizajeSi la empresa est llena de programadores de C++ con alguna experiencia en el manejo de libreragrficas, aprendern rpidamente lo esencial de Java. Si el equipo de ingenieros no conoce C++, peromaneja cualquier otro lenguaje de programacin orientada a objetos, les llevar pocas semanas dominarla base de Java. Lo que s que no es cierto es que haya que aprender C++ antes de aprender Java.Si los ingenieros de la empresa no conocen ningn lenguaje orientado a objetos, s que tienen queaprender los fundamentos de esta tecnologa antes de nada, y luego aplicarlos a la programacin con

    Java. El anlisis y diseo orientado a objetos debe ser comprendido antes de intentar nada con Java.Los programadores de Java sin un fondo de conocimientos de OOA/D producirn cdigo pobre.Adems, los libros sobre Java crecen como la espuma, ya hay ms de 25 publicados, y si buscas"Progamming in Java" en la Red, encontrars 312 Web sites, y 30 ms dedicados a "Learning Java". Ysi esto, evidentemente, no es el sustituto de un instructor humano, hay ya varias empresas que ofrecenenseanza de Java, entre ellas, Sun.

    2. INSTALACIN DEL JDK

    Actualmente ya hay entornos de desarrollo integrados completos para Java, diferentes del

    JDK de Sun. Symantec dispone de un compilador de Java para Windows 95 y Windows NT,con las ventajas del aumento de velocidad de proceso y capacidades multimedia que estoproporciona, Symantec Caf. Borland tambin est trabajando en ello y la nueva versin de

  • 8/8/2019 Manual Java 01

    13/43

    LENGUAJE DE PROGRAMACIN : JAVA 13 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    su entorno de desarrollo soporta Java. Sun ha lanzado la versin comercial de su propio entorno dedesarrollo para Java, el Java Workshop, enteramente escrito en Java. Y Microsoft ha puesto en elmercado Visual J++, que sigue el estilo de todas sus herramientas de desarrollo.

    No obstante, trataremos solamente el JDK, que hasta el momento es lo ms conocido. El entorno bsicodel JDK de Java que proporciona Sun est formado por herramientas en modo texto, que son: java,intrprete que ejecuta programas en byte-code. javac, compilador de Java que convierte el cdigofuente en byte-code. javah, crea ficheros de cabecera para implementar mtodos para cualquier clase.javap, es un descompilador de byte-code a cdigo fuente Java. javadoc, es un generador automtico dedocumentos HTML a partir del cdigo fuente Java. javaprof, es un profiler para aplicaciones de un solothread. HotJava, es un navegador Web escrito completamente en Java.

    El entorno habitual pues, consiste en un navegador que pueda ejecutarapplets, un compilador que convierta el cdigo fuente Java a byte-code y elintrprete Java para ejecutar los programas. Estos son los componenetesbsicos para desarrollar algo en Java. No obstante se necesita un editor paraescribir el cdigo fuente, y no son estrictamente necesarias otras

    herramientas como el debugger, un entorno visual, la documentacin o unvisualizador de jerarqua de clases. Tan es as, que disponiendo delnavegador Netscape 2.0 no se necesita ni tan siquiera el JDK (a peticin devarios amigos que disfrutan del uso de Linux pero no disponen de soporteELF para poder utilizar el JDK portado por Randy Chapman, les indicarcomo conseguir utilizar el compilador embebido en Netscape).2.1 Windows

    La versin del JDK para Windows es un archivo autoextraible. Se necesitan alrededor de 6 Mb deespacio libre en disco. Ejecutar el fichero, que desempaquetar el contenido del archivo. El directoriodonde se instale no es importante, pero supondremos que se instala en el raiz del disco C:, en cuyocaso los archivos colgarn de c:\java. Es necesario aadir c:\java\bin a la variable de entorno PATH.

    Adems de los ficheros java, el JDK incluye dos libreras dinmicas, MSVCRT20.DLL y MFC30.DLL,que se instalarn en el directorio de Java. Si tienes ninguna copia de estos ficheros en tu ordenador(probablemente en el directorio system de Windows) copia estos ficheros en el directorio c:\java\bin. Siestos ficheros ya estn en tu ordenador, elimina las copias extra que instala el JDK.

    2.2 SolarisLa versin del JDK para Solaris es un fichero tar comprimido. Se necesitan alrededor de 9 Mb de discopara descomprimir el JDK, aunque el doble de espacio sera una cifra ms cmoda. Ejecutar lossiguientes comandos:% uncompress JDK-beta-solaris2-sparc.tar.Z% tar xvf JDK-beta-solaris2-sparc-tar

    Puedes descomprimir el archivo en tu directorio home, o, si tienes privilegios de supervisor, en algnsitio ms conveniente de /usr/local para que todos los usuarios tengan acceso a los ficheros. Sinembargo, los privilegios del supervisor no son necesarios para instalar y ejecutar Java. Por simplicidad,supondr que has descomprimido el JDK en /usr/local, aunque el path completo donde se haga no tienerelevancia (tambin es posible colocarlo en /opt que es donde residen todas las aplicaciones de Solaris).Si lo has colocado en un sitio diferente, simplemente sustituye /usr/local por ese directorio (si lo hasdescomprimido en tu home, puedes utilizar ~/java y ~/hotjava, en vez del path completo).Es necesario aadir /usr/local/java/bin a la variable de entorno PATH. Utiliza el siguiente comando(suponiendo que tengas el shell csh o tcsh):set path=($PATH /usr/local/java/bin)

    Tambin puedes aadir esta lnea al final del fichero .profile y .cshrc, y ya tienes el sistema listo paraejecutar applets. Si quieres desembarazarte de la ventana que aparece cada vez que lances el

  • 8/8/2019 Manual Java 01

    14/43

    LENGUAJE DE PROGRAMACIN : JAVA 14 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    appletviewer con la licencia de Sun, crea un directorio que se llame .hotjava en el directorio java/bin y yano volvers a verla.

    2.3 LinuxNecesitas un kernel que soporte binarios ELF, por lo tanto tu Linux debe ser la versin 1.2.13 o superior,las anteriores tienen un bug que hacen que javac no funcione. Necesitas tambin Netscape, versin2.0b4 o posterior. Sobre la versin 1.2.13 del kernel de Linux, hay que seguir los pasos que indico paraconseguir que JDK funcione:

    Bajarse el JDK, linux.jdk-1.0-try4.static-motif.tar.gz y

    linux.jdk-1.0 try1.common.tar.gz a/usr/local, descomprimirlo y hacer 'tar xvf'

    En el fichero .java_wrapper (si no existe, crearlo) cambiar las variable J_HOME y PRG, paraque queden como:

    J_HOME=/usr/local/javaPRG=/usr/local/java/bin

    Bajarse la librera libc.5.2.18.bin.tar.gz a /, descomprimirla, hacer 'tar xvf'.

    Asegurarse de que /lib/libc.so.5 es un link simblico a este nuevo fichero.Si no lo es, hacer el /lib'ln -s libc.so.5.2.18 libc.so.5'

    Bajarse ld-so.1.7.14.tar.gz a un directorio temporal, descomprimirlo y hacer 'tar xvf'.

    Ejecutar 'instldso.sh' y eliminar el directorio temporal.

    Aadir /usr/local/java a la variable de entorno PATH. Si se desea que est fijada para todos losusuarios, incorporar el directorio a la varible PATH que se fija en el fichero /etc/profile.

    Bajarse netscape-v202-export.i486-unknown-linux.tar.z a usr/local/netscape, descomprimirlo yhacer 'tar xvf'

    Crear un link en /usr/local/bin a /usr/local/netscape/netscape

    Esto debera ser suficiente para compilar cualquier cosa en Java/Linux. En caso de tener problemas, esel momento de recurrir a las FAQ.Siguiendo los pasos indicados ya se puede ejecutar el ejemplo del Tic-Tac-Toe que propone la hoja de

    instalacin que Sun ha incluido en todas sus versiones y que en Linux consistira en cambiarse aldirectorio de la demo:

  • 8/8/2019 Manual Java 01

    15/43

    LENGUAJE DE PROGRAMACIN : JAVA 15 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    % cd /usr/local/java/demo/TicTacToeejecutar el visualizador de applets sobre la pgina html:

    % appletviewer example1.htmly a jugar a las tres en raya. Por cierto, que el algoritmo que usa el ordenador est falseado por lo que esposible ganarle.

    2.4 Compilacin sin JDKParece raro, pero se puede conseguir. Lo nico necesario es el navegador Netscape 2.0. Estenavegador, junto con la mquina virtual Java (JVM) y el sistema run-time, tiene un compilador Java.Si no se dispone del Java Development Kit (JDK), que no est disponible para todas las plataformas,pero s de la versin de Netscape para nuestra plataforma, aqu van los pasos a seguir para utilizar elcompilador de Java embebido en Netscape.

    Como necesito partir de algn punto para tomarlo como referencia, voy a suponer que estamos sobreLinux y que vamos a prescindir del JDK de Randy Chapman. Lo que habra que hacer sera lo siguiente.

    Primero. Instalar Netscape en el ordenador. Asegurarse de entender perfectamente y leersehasta el final el fichero README, para seguir las instrucciones especficas de la instalacin deNetscape en la plataforma y que Netscape funcione perfectamente. En nuestro caso, en quevamos a intentar compilar cdigo Java con Netscape sobre Linux, la pieza clave es la situacindel fichero moz2_0.zip, que en mi mquina est en /usr/local/netscape/java/classes.

    Segundo. Extraer de una copia cualquiera del JDK (aunque sea de otra plataforma), el ficherojava/lib/classes.zip y guardarlo en el mismo sitio que el fichero moz2_0.zip; esta localizacin noes necesaria, pero simplifica la estructura.

    Tercero. Fijar la variable de entorno CLASSPATH para que Netscape pueda encontrar suspropias clases adems de las clases del Java de Sun. Asegurarse de incluir el "directorioactual", para poder compilar a la vez que se usan los ficheros .zip de Netscape y Sun. Porejemplo:

    setenv CLASSPATH.:/usr/local/netscape/java/classes/moz2_0.zip :/usr/local/netscape/java/classes/classes.zip

    Cuarto. Compilar el cdigo Java (applet o aplicacin) con el comando: netscape -javasun.tools.javac.Main [fichero].java (sustituir el nombre del fichero con el cdigo Java en vez de[fichero]). Esto convertir el cdigo fuente Java en byte-code, generndose el archivo[fichero].class.

    Quinto. Comprobar si se puede ejecutar la aplicacin con el comando:

    netscape -java [clase](sustituir el nombre de la clase de la aplicacin -la que contiene la rutina main-

    en vez de [clase]).

  • 8/8/2019 Manual Java 01

    16/43

    LENGUAJE DE PROGRAMACIN : JAVA 16 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Sexto. Si se ha compilado un applet Java, construir una pgina html que lo utilice paravisualizarlo con el navegador en su forma normal. O tambin se puede visualizar utilizando elappletviewer, ejecutando:

    netscape -java sun.applet.AppletViewer [clase]Desgraciadamente, la sentencia anterior no parece funcionar en todos lossistemas. Hay amigos mos que no han sido capaces de visualizar applets coneste mtodo.Para aprovechar el tiempo, se puede crear un script que recoja los pasos 3, 4 y 6. Si estamos utilizandoel csh, el contenido del script sera:#/bin/csh -f setenv CLASSPATH.:/usr/local/netscape/java/classes/moz2_0.zip:/usr/local/netscape/java/classes/classes.zip

    netscape -java sun.tools.javac.Main $1y lo almacenaramos como javac. Se ha de hacer el script ejecutable y cambiar /bin/csh por el pathcompleto donde est situado el csh. De forma semejante podemos definir el intrprete java y elappletviewer, sustituyendo la lnea adecuada de llamada a Netscape.

    3. CONCEPTOS BSICOS DE JAVA

    3.1 Programacin en JavaCuando se programa en Java, se coloca todo el cdigo en mtodos, de la misma forma que se escribenfunciones en lenguajes como C.

    ComentariosEn Java hay tres tipos de comentarios:// comentarios para una sola lnea/* comentarios de una oms lneas*//** comentario de documentacin, de una o ms lneas*/Los dos primeros tipos de comentarios son los que todo

    programador conoce y se utilizan del mismo modo. Los comentarios de documentacin, colocadosinmediatamente antes de una declaracin (de variable o funcin), indican que ese comentario ha de sercolocado en la documentacin que se genera automticamente cuando se utiliza la herramienta deJava, javadoc. Dichos comentarios sirven como descripcin del elemento declarado permitiendo generaruna documentacin de nuestras clases escrita al mismo tiempo que se genera el cdigo.En este tipo de comentario para documentacin, se permite la introduccin de algunos tokens opalabras clave, que harn que la informacin que les sigue aparezca de forma diferente al resto en ladocumentacin.IdentificadoresLos identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el programadornecesite identificar o usar.

  • 8/8/2019 Manual Java 01

    17/43

    LENGUAJE DE PROGRAMACIN : JAVA 17 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    En Java, un identificador comienza con una letra, un subrayado (_) o un smbolo de dlar ($). Lossiguientes caracteres pueden ser letras o dgitos. Se distinguen las maysculas de las minsculas y nohay longitud mxima.

    Seran identificadores vlidos:identificadornombre_usuarioNombre_Usuario_variable_del_sistema$transacciony su uso sera, por ejemplo:int contador_principal;char _lista_de_ficheros;float $cantidad_en_Ptas;

    Palabras claveLas siguientes son las palabras clave que estn definidas en Java y que no se pueden utilizar como

    indentificadores:abstract continue for new switchboolean default goto null synchronizedbreak do if package thisbyte double implements private threadsafebyvalue else import protected throwcase extends instanceof public transientcatch false int return truechar final interface short tryclass finally long static voidconst float native super while

    Palabras ReservadasAdems, el lenguaje se reserva unas cuantas palabras ms, pero que hasta ahora no tienen uncometido especfico. Son:cast future generic inneroperator outer rest var

    LiteralesUn valor constante en Java se crea utilizando una representacin literal de l. Java utiliza cinco tipos deelementos: enteros, reales en coma flotante, booleanos, caracteres y cadenas, que se pueden poner encualquier lugar del cdigo fuente de Java. Cada uno de estos literales tiene un tipo correspondiente

    asociado con l.Enteros:byte 8 bits complemento a dosshort 16 bits complemento a dosint 32 bits complemento a doslong 64 bits complemento a dosPor ejemplo: 21 077 0xDC00Reales en coma flotante:float 32 bits IEEE 754double 64 bits IEEE 754Por ejemplo: 3.14 2e12 3.1E12

    Booleanos:true

  • 8/8/2019 Manual Java 01

    18/43

    LENGUAJE DE PROGRAMACIN : JAVA 18 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    falseCaracteres:Por ejemplo: a \t \u???? [????] es un nmero unicode

    Cadenas:Por ejemplo: "Esto es una cadena literal"ArraysSe pueden declarar en Java arrays de cualquier tipo:char s[ ];int iArray[ ];Incluso se pueden construir arrays de arrays:int tabla[ ][ ] = new int[4][5];

    Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar desbordamientos y lacorrupcin de memoria.En Java un array es realmente un objeto, porque tiene redefinido el operador []. Tiene una funcinmiembro: length. Se puede utilizar este mtodo para conocer la longitud de cualquier array.int a[ ][ ] = new int[10][3];a.length; /* 10 */a[0].length; /* 3 */Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco:int lista[ ] = new int[50];

    o se puede crear ya el array con sus valores iniciales:

    String nombres[ ] = {"Juan","Pepe","Pedro","Maria"};Esto que es equivalente a:String nombres[ ];nombres = new String[4];nombres[0] = new String( "Juan" );nombres[1] = new String( "Pepe" );

    nombres[2] = new String( "Pedro" );nombres[3] = new String( "Maria" );No se pueden crear arrays estticos en tiempo de compilacin:int lista[50]; // generar un error en tiempo de compilacinTampoco se puede rellenar un array sin declarar el tamao con el operador new:int lista[ ];for( int i=0; i < 9; i++ )lista[i] = i;Es decir, todos los arrays en Java son estticos. Para convertir un array en el equivalente a un arraydinmico en C/C++, se usa la clase vector, que permite operaciones de insercin, borrado, etc. en el

    array.Operadores

  • 8/8/2019 Manual Java 01

    19/43

    LENGUAJE DE PROGRAMACIN : JAVA 19 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Los operadores de Java son muy parecidos en estilo y funcionamiento a los de C. En la siguiente tablaaparecen los operadores que se utilizan en Java, por orden de precedencia:. [ ] ()

    ++ --! ~ instanceof

    * / %+ -> >>>< > = == !=& ^ |&& ||? := op= (*= /= %= += -= etc.) ,Los operadores numricos se comportan como esperamos:

    int + int = intLos operadores relacionales devuelven un valor booleano.

    Para las cadenas, se pueden utilizar los operadores relacionales para comparaciones adems de + y +=para la concatenacin:String nombre = "nombre" + "Apellido";El operador = siempre hace copias de objetos, marcando los antiguos para borrarlos, y ya se encargarel garbage collector de devolver al sistema la memoria ocupada por el objeto eliminado.SeparadoresSlo hay un par de secuencias con otros caracteres que pueden aparecer en el cdigo Java; son los

    separadores simples, que van a definir la forma y funcin del cdigo. Los separadores admitidos enJava son:() - parntesis. Para contener listas de parmetros en la definicin y llamada a mtodos. Tambin seutiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear lasconversiones de tipo.{} - llaves. Para contener los valores de matrices inicializadas automticamente. Tambin se utiliza paradefinir un bloque de cdigo, para clases, mtodos y mbitos locales.[ ] - corchetes. Para declarar tipos matriz. Tambin se utiliza cuando se referencian valores de matriz.; - punto y coma. Separa sentencias.

    , - coma. Separa identificadores consecutivos en una declaracin de variables. Tambin se utiliza paraencadenar sentencias dentro de una sentencia for.. - punto. Para separar nombres de paquete de subpaquetes y clases. Tambin se utiliza para separaruna variable o mtodo de una variable de referencia.

    3.2 Control de FlujoMuchas de las sentencias de control del flujo del programa se han tomado del C:Sentencias de Salto

    if/elseif( Boolean ) {sentencias;

  • 8/8/2019 Manual Java 01

    20/43

    LENGUAJE DE PROGRAMACIN : JAVA 20 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    }else {sentencias;}

    switchswitch( expr1 ) {case expr2:sentencias;break;case expr3:sentencias;break;default:sentencias;break;

    }

    Sentencias de BucleBucles forfor( expr1 inicio; expr2 test; expr3 incremento ) {sentencias;}El siguiente trocito de cdigo Java que dibuja varias lneas en pantalla alternando sus colores entre rojo,azul y verde. Este fragmento sera parte de una funcin Java (mtodo):

    int contador;for( contador=1; contador

  • 8/8/2019 Manual Java 01

    21/43

    LENGUAJE DE PROGRAMACIN : JAVA 21 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    sentencias;}while( Boolean );

    Excepcionestry-catch-throw

    try {sentencias;} catch( Exception ) {sentencias;}Java implementa excepciones para facilitar la construccin de cdigo robusto. Cuando ocurre un erroren un programa, el cdigo que encuentra el error lanza una excepcin, que se puede capturar yrecuperarse de ella. Java proporciona muchas excepciones predefinidas.

    Control General del Flujobreak [etiqueta]continue [etiqueta]return expr;etiqueta: sentencia;En caso de que nos encontremos con bucles anidados, se permite el uso de etiquetas para poder salirsede ellos, por ejemplo:uno: for( ){dos: for( ){

    continue; // seguira en el bucle internocontinue uno; // seguira en el bucle principalbreak uno; // se saldra del bucle principal}}En el cdigo de una funcin siempre hay que ser consecuentes con la declaracin que se haya hechode ella. Por ejemplo, si se declara una funcin para que devuelva un entero, es imprescindible que secoloque un return final para salir de esa funcin, independientemente de que haya otros en medio delcdigo que tambin provoquen la salida de la funcin. En caso de no hacerlo se generar un Warning, yel cdigo Java no se puede compilar con Warnings.int func()

    {if( a == 0 )return 1;return 0; // es imprescindible porque se retorna un entero}

    3.3 ClasesLas clases son lo ms simple de Java. Todo en Java forma parte de una clase, es una clase o describecomo funciona una clase. El conocimiento de las clases es fundamental para poder entender losprogramas Java.Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto.Todos los mtodos se definen dentro del bloque de la clase, Java no soporta funciones o variables

    globales. Esto puede despistar a los programadores de C++, que pueden definir mtodos fuera delbloque de la clase, pero esta posibilidad es ms un intento de no separarse mucho y ser compatible con

  • 8/8/2019 Manual Java 01

    22/43

    LENGUAJE DE PROGRAMACIN : JAVA 22 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    C, que un buen diseo orientado a objetos. As pues, el esqueleto de cualquier aplicacin Java se basaen la definicin de una clase.Todos los datos bsicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos.

    En C la unidad fundamental son los ficheros con cdigo fuente, en Java son las clases. De hecho sonpocas las sentencias que se pueden colocar fuera del bloque de una clase. La palabra clave import(equivalente al #include) puede colocarse al principio de un fichero, fuera del bloque de la clase. Sinembargo, el compilador reemplazar esa sentencia con el contenido del fichero que se indique, queconsistir, como es de suponer, en ms clases.Tipos de ClasesHasta ahora slo se ha utilizado la palabra clave public para calificar el nombre de las clases que hemosvisto, pero hay tres modificadores ms. Los tipos de clases que podemos definir son:abstractUna clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que seutiliza como clase base para la herencia.

    finalUna clase final se declara como la clase que termina una cadena de herencia. No se puede heredar deuna clase final. Por ejemplo, la clase Math es una clase final.publicLas clases public son accesibles desde otras clases, bien sea directamente o por herencia. Sonaccesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes,primero tienen que ser importadas.synchronizableEste modificador especifica que todos los mtodos definidos en la clase son sincronizados, es decir, queno se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocarlos flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan

    modificar las mismas variables sin que haya problemas de que se sobreescriban.

    3.4 Variables y Mtodos de InstanciaUna clase en Java puede contener variables y mtodos. Las variables pueden ser tipos primitivos comoint, char, etc. Los mtodos son funciones.Por ejemplo, en el siguiente trozo de cdigo podemos observarlo:

    public MiClase {int i;public MiClase() {i = 10;

    }public void Suma_a_i( int j ) {i = i + j;}}La clase MiClase contiene una variable (i) y dos mtodos,MiClase que es el constructor de la clase y Suma_a_i( int j ).

    Ambito de una variableLos bloques de sentencias compuestas en Java se delimitan con dos llaves. Las variables de Java sloson vlidas desde el punto donde estn declaradas hasta el final de la sentencia compuesta que laengloba. Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio

    conjunto de declaraciones de variables locales. Sin embargo, no se puede declarar una variable con elmismo nombre que una de mbito exterior.

  • 8/8/2019 Manual Java 01

    23/43

    LENGUAJE DE PROGRAMACIN : JAVA 23 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    El siguiente ejemplo intenta declarar dos variables separadas con el mismo nombre. En C y C++ sondistintas, porque estn declaradas dentro de mbitos diferentes. En Java, esto es ilegal.Class Ambito {

    int i = 1; // mbito exterior{ // crea un nuevo mbitoint i = 2; // error de compilacin}}Mtodos y ConstructoresLos mtodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. Elconstructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase.Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales querealizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dicha clase.Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean

    (instancian) todos los mtodos y variables, y se llama al constructor de la clase:MiClase mc;mc = new MiClase();La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no

    consume memoria, simplemente es una declaracin de tipo. Despus de serinstanciado un nuevo objeto mc, el valor de i en el objeto mc ser igual a 10. Sepuede referenciar la variable (de instancia) i con el nombre del objeto:

    mc.i++; // incrementa la instancia de i de mc

    Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera

    sintaxis para llamar al mtodo Suma_a_i() utilizando el nuevo nombre de clasemc:

    mc.Suma_a_i( 10 );y ahora la variable mc.i vale 21.

    FinalizadoresJava no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automticamentetodos los objetos que se salen del alcance. No obstante proporciona un mtodo que, cuando seespecifique en el cdigo de la clase, el reciclador de memoria (garbage collector) llamar:

    // Cierra el canal cuando este objeto es recicladoprotected void finalize() {close();}3.5 Alcance de Objetos y Reciclado de MemoriaLos objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no seva a utilizar ms, debera liberar el espacio que ocupaba en la memoria de forma que las aplicacionesno la agoten (especialmente las grandes).En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automaticgarbage collector (recolector automtico de basura). Este thread monitoriza el alcance de los objetos ymarca los objetos que se han salido de alcance. Veamos un ejemplo:String s; // no se ha asignado todavia

    s = new String( "abc" ); // memoria asignadas = "def"; // se ha asignado nueva memoria// (nuevo objeto)

  • 8/8/2019 Manual Java 01

    24/43

    LENGUAJE DE PROGRAMACIN : JAVA 24 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Ms adelante veremos en detalle la clase String, pero una breve descripcin de lo que hace esto es;crear un objeto String y rellenarlo con los caracteres "abc" y crear otro (nuevo) String y colocarle loscaracteres "def".

    En esencia se crean dos objetos:Objeto String "abc"Objeto String "def"Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido dealcance. No hay forma de acceder a l. Ahora se tiene un nuevo objeto llamado s y contiene "def". Esmarcado y eliminado en la siguiente iteracin del thread reciclador de memoria.

    3.6 HerenciaLa Herencia es el mecanismo por el que se crean nuevos objetos definidos en trminos de objetos yaexistentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una

    especializacin de Ave.class Pato extends Ave {int numero_de_patas;}La palabra clave extends se usa para generar una subclase (especializacin) de un objeto. Una Pato esuna subclase de Ave. Cualquier cosa que contenga la definicin de Ave ser copiada a la clase Pato,adems, en Pato se pueden definir sus propios mtodos y variables de instancia. Se dice que Patoderiva o hereda de Ave.Adems, se pueden sustituir los mtodos proporcionados por la clase base. Utilizando nuestro anteriorejemplo de MiClase, aqu hay un ejemplo de una clase derivada sustituyendo a la funcin Suma_a_i():

    import MiClase;public class MiNuevaClase extends MiClase {public void Suma_a_i( int j ) {i = i + ( j/2 );}}Ahora cuando se crea una instancia de MiNuevaClase, el valor de i tambin se inicializa a 10, pero lallamada al mtodo Suma_a_i() produce un resultado diferente:MiNuevaClase mnc;mnc = new MiNuevaClase();mnc.Suma_a_i( 10 );

    En Java no se puede hacer herencia mltiple. Por ejemplo, de la clase aparato con motor y de la claseanimal no se puede derivar nada, sera como obtener el objeto toro mecnico a partir de una mquinamotorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar losmtodos, es decir, pasar la funcionalidad del toro de verdad al toro mecnico, con lo cual no seranecesaria la herencia mltiple sino simplemente la comparticin de funcionalidad que se encuentraimplementada en Java a travs de interfaces.

    3.7 Control de AccesoCuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que sequiere para las variables de instancia y los mtodos definidos en la clase:

    publicpublic void CualquieraPuedeAcceder(){}

  • 8/8/2019 Manual Java 01

    25/43

    LENGUAJE DE PROGRAMACIN : JAVA 25 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos.

    protectedprotected void SoloSubClases(){}

    Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instanciaprotegidos.

    privateprivate String NumeroDelCarnetDeIdentidad;Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. Noson accesibles desde las subclases.friendly (sin declaracin especfica)

    void MetodoDeMiPaquete(){}

    Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaranfriendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete,pero no por los externos al paquete. Es lo mismo que protected.

    Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, ytambin, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodosprotegidos de ese paquete. Para evitarlo, se deben declarar como private protected, lo que hace que yafuncione como en C++ en donde slo se puede acceder a las variables y mtodos protegidos de lasclases derivadas.

    3.8 Variables y Mtodos EstticosEn un momento determinado se puede querer crear una clase en la que el valor de una variable de

    instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partirde esa clase. Es decir, que exista una nica copia de la variable de instancia. Se usar para ello lapalabra clave static.class Documento extends Pagina {static int version = 10;}El valor de la variable version ser el mismo para cualquier objeto instanciado de la clase Documento.Siempre que un objeto instanciado de Documento cambie la variable version, sta cambiar para todoslos objetos.De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo puedaacceder a las variables de instancia no estticas:

    class Documento extends Pagina {static int version = 10;int numero_de_capitulos;static void annade_un_capitulo() {numero_de_capitulos++; // esto no funciona}static void modifica_version( int i ) {version++; // esto si funciona}}

    La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las

    reglas de acceso al intentar acceder desde un mtodo esttico a una variable no esttica.

  • 8/8/2019 Manual Java 01

    26/43

    LENGUAJE DE PROGRAMACIN : JAVA 26 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Todas las clases que se derivan, cuando se declaran estticas, comparten la misma pgina devariables; es decir, todos los objetos que se generen comparten la misma zona de memoria. Lasfunciones estticas se usan para acceder solamente a variables estticas.

    class UnaClase {int var;UnaClase(){var = 5;}UnaFuncion(){var += 5;}}

    En el cdigo anterior, si se llama a la funcin UnaFuncion a travs de un puntero a funcin, no se podra

    acceder a var, porque al utilizar un puntero a funcin no se pasa implcitamente el puntero al propioobjeto (this). Sin embargo, s se podra acceder a var si fuese esttica, porque siempre estara en lamisma posicin de memoria para todos los objetos que se creasen de UnaClase.

    3.9 this Y superAl acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros dela propia clase. Volviendo al ejemplo de MiClase, se puede aadir otro constructor de la forma siguiente:

    public class MiClase {int i;public MiClase() {i = 10;

    }// Este constructor establece el valor de ipublic MiClase( int valor ) {this.i = valor; // i = valor}public void Suma_a_i( int j ) {i = i + j;}

    }Aqu this.i se refiere al entero i en la clase MiClase.Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede

    hacer referencia al mtodo padre con la palabra clave super:import MiClase;public class MiNuevaClase extends MiClase {public void Suma_a_i( int j ) {i = i + ( j/2 );super.Suma_a_i( j );}}En el siguiente cdigo, el constructor establecer el valor de i a 10, despus lo cambiar a 15 yfinalmente el mtodo Suma_a_i() de la clase padre (MiClase) lo dejar en 25:

    MiNuevaClase mnc;mnc = new MiNuevaClase();mnc.Suma_a_i( 10 );

  • 8/8/2019 Manual Java 01

    27/43

  • 8/8/2019 Manual Java 01

    28/43

    LENGUAJE DE PROGRAMACIN : JAVA 28 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Las clases que quieran utilizar el interface VideoClip utilizarn la palabra implements y proporcionarn elcdigo necesario para implementar los mtodos que se han definido para el interface:

    class MiClase implements VideoClip {

    void play() {}void bucle() {}void stop() {}Al utilizar implements para el interface es como si se hiciese unaaccin de copiar-y-pegar del cdigo del interface, con lo cual no sehereda nada, solamente se pueden usar los mtodos.

    La ventaja principal del uso de interfaces es que una clase interface puede ser implementada porcualquier nmero de clases, permitiendo a cada clase compartir el interfaz de programacin sin tenerque ser consciente de la implementacin que hagan las otras clases que implementen el interface.class MiOtraClase implements VideoClip {void play() {}void bucle() {}void stop() {

    }

    3.12 Mtodos NativosJava proporciona un mecanismo para la llamada a funciones C y C++ desde nuestro cdigo fuente Java.Para definir mtodos como funciones C o C++ se utiliza la palabra clave native.public class Fecha {int ahora;public Fecha() {ahora = time();}

    private native int time();static {System.loadLibrary( "time" );}}Una vez escrito el cdigo Java, se necesitan ejecutar los pasos siguientes para poder integrar el cdigoC o C++:

    Utilizar javah para crear un fichero de cabecera (.h) Utilizar javah para crear un fichero de stubs, es decir, que contiene la declaracin de las

    funciones Escribir el cdigo del mtodo nativo en C o C++, es decir, rellenar el cdigo de la funcin,completando el trabajo de javah al crear el fichero de stubs

  • 8/8/2019 Manual Java 01

    29/43

    LENGUAJE DE PROGRAMACIN : JAVA 29 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Compilar el fichero de stubs y el fichero .c en una librera de carga dinmica (DLL en Windows'95 o libXX.so en Unix)

    Ejecutar la aplicacin con el appletviewer

    Ms adelante trataremos en profundidad los mtodos nativos, porque aaden una gran potencia a Java,al permitirle integrar a travs de librera dinmica cualquier algoritmo desarrollado en C o C++, lo cual,entre otras cosas, se utiliza como mtodo de proteccin contra la descompilacin completa del cdigoJava.3.13 PaquetesLa palabra clave package permite agrupar clases e interfaces. Los nombres de los paquetes sonpalabras separadas por puntos y se almacenan en directorios que coinciden con esos nombres. Porejemplo, los ficheros siguientes, que contienen cdigo fuente Java:

    Applet.java, AppletContext.java, AppletStub.java, AudioClip.javacontienen en su cdigo la lnea:

    package java.applet;

    Y las clases que se obtienen de la compilacin de los ficheros anteriores, se encuentran con el nombrenombre_de_clase.class, en el directorio:java/appletImportLos paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquetecomo ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clasesutilizando un asterisco.import java.Date;import java.awt.*;Si un fichero fuente Java no contiene ningn package, se coloca en el paquete por defecto sin nombre.Es decir, en el mismo directorio que el fichero fuente, y la clase puede ser cargada con la sentenciaimport:import MiClase;Paquetes de JavaEl lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema deentrada/salida general, herramientas y comunicaciones. En la versin actual del JDK, los paquetes Javaque se incluyen son:java.appletEste paquete contiene clases diseadas para usar con applets. Hay una clase Applet y tres interfaces:AppletContext, AppletStub y AudioClip.java.awtEl paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI(Interfaz Grfico de Usuario). Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu,Panel, TextArea y TextField.java.ioEl paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y

    FileOutputStream.java.lang

  • 8/8/2019 Manual Java 01

    30/43

    LENGUAJE DE PROGRAMACIN : JAVA 30 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception,System, Integer, Float, Math, String, etc.java.net

    Este paquete da soporte a las conexiones del protocolo TCP/IP y, adems, incluye las clases Socket,URL y URLConnection.

    java.utilEste paquete es una miscelnea de clases tiles para muchas cosas en programacin. Se incluyen,entre otras, Date (fecha), Dictionary (diccionario), Random (nmeros aleatorios) y Stack (pila FIFO).

    3.14 ReferenciasJava se asemeja mucho a C y C++. Esta similitud, evidentemente intencionada, es la mejor herramientapara los programadores, ya que facilita en gran manera su transicin a Java. Desafortunadamente,tantas similitudes hacen que no nos paremos en algunas diferencias que son vitales. La terminologautilizada en estos lenguajes, a veces es la misma, pero hay grandes diferencias subyacentes en su

    significado.C tiene tipos de datos bsicos y punteros. C++ modifica un poco este panorama y le aade los tiposreferencia. Java tambin especifica sus tipos primitivos, elimina cualquier tipo de punteros y tiene tiposreferencia mucho ms claros.Todo este maremgnum de terminologa provoca cierta consternacin, as que vamos a intentar aclararlo que realmente significa.Conocemos ya ampliamente todos los tipos bsicos de datos: datos base, integrados, primitivos einternos; que son muy semejantes en C, C++ y Java; aunque Java simplifica un poco su uso a losdesarrolladores haciendo que el chequeo de tipos sea bastante ms rgido. Adems, Java aade lostipos boolean y hace imprescindible el uso de este tipo booleano en sentencias condicionales.

    4. PROGRAMAS BSICOS EN JAVA

    4.1 Una mnima aplicacin en javaLa aplicacin ms pequea posible es la que simplemente imprimir un mensaje en la pantalla.Tradicionalmente, el mensaje suele ser "Hola Mundo!". Esto es justamente lo que hace el siguientefragmento de cdigo://// Aplicacin HolaMundo de ejemplo//

    class HolaMundoApp {public static void main( String args[] ) {System.out.println( "Hola Mundo!" ) ;}}

    HolaMundoVamos ver en detalle la aplicacin anterior, lnea a lnea. Esas lneas de cdigo contienen loscomponenetes mnimos para imprimir Hola Mundo! en la pantalla.//// Aplicacin HolaMundo de ejemplo

    //

  • 8/8/2019 Manual Java 01

    31/43

    LENGUAJE DE PROGRAMACIN : JAVA 31 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Estas tres primera lneas son comentarios. Hay tres tipos de comentarios en Java, // es un comentarioorientado a lnea.class HolaMundoApp {

    Esta lnea declara la clase HolaMundoApp. El nombre de la clase especificado en el fichero fuente seutiliza para crear un fichero nombredeclase.class en el directorio en el que se compila la aplicacin. Ennuestro caso, el compilador crear un fichero llamado HolaMundoApp.class.public static void main( String args[] ) {Esta lnea especifica un mtodo que el intrprete Java busca para ejecutar en primer lugar. Igual que enotros lenguajes, Java utiliza una palabra clave main para especificar la primera funcin a ejecutar. Eneste ejemplo tan simple no se pasan argumentos.public significa que el mtodo main puede ser llamado por cualquiera, incluyendo el intrprete Java.static es una palabra clave que le dice al compilador que main se refiere a la propia claseHolaMundoApp y no a ninguna instancia de la clase. De esta forma, si alguien intenta hacer otrainstancia de la clase, el mtodo main no se instanciara.

    void indica que main no devuelve nada. Esto es importante ya que Java realiza una estrictacomprobacin de tipos, incluyendo los tipos que se ha declarado que devuelven los mtodos.args[ ] es la declaracin de un array de Strings. Estos son los argumentos escritos tras el nombre de laclase en la lnea de comandos:%java HolaMundoApp arg1 arg2 ...System.out.println( "Hola Mundo!" );Esta es la funcionalidad de la aplicacin. Esta lnea muestra el uso de un nombre de clase y mtodo. Seusa el mtodo println() de la clase out que est en el paquete System.

    El mtodo println() toma una cadena como argumento y la escribe en el stream de salida estndar; eneste caso, la ventana donde se lanza la aplicacin.}}Finalmente, se cierran las llaves que limitan el mtodo main() y la clase HolaMundoApp.Compilacion y Ejecucion de HolaMundo

    Vamos a ver a continuacin como podemos ver el resultado de nuestra primeraaplicacin Java en pantalla. Generaremos un fichero con el cdigo fuente de laaplicacin, lo compilaremos y utilizaremos el intrprete java para ejecutarlo.

    Ficheros Fuente JavaLos ficheros fuente en Java terminan con la extensin ".java". Crear un fichero

    utilizando cualquier editor de texto ascii que tenga como contenido el cdigo de las ocho lneas denuestra mnima aplicacin, y salvarlo en un fichero con el nombre de HolaMundoApp.java. Para crearlos ficheros con cdigo fuente Java no es necesario un procesador de textos, aunque puede utilizarsesiempre que tenga salida a fichero de texto plano o ascii, sino que es suficiente con cualquier otro editor.CompilacinEl compilador javac se encuentra en el directorio bin por debajo del directorio java, donde se hayainstalado el JDK. Este directorio bin, si se han seguido las instrucciones de instalacin, debera formarparte de la variable de entorno PATH del sistema. Si no es as, tendra que revisar la Instalacin del

    JDK. El compilador de Java traslada el cdigo fuente Java a byte-codes, que son los componentes queentiende la Mquina Virtual Java que est incluida en los navegadores con soporte Java y enappletviewer.

  • 8/8/2019 Manual Java 01

    32/43

    LENGUAJE DE PROGRAMACIN : JAVA 32 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    Una vez creado el fichero fuente HolaMundoApp.java, se puede compilar con la lnea siguiente:%javac HolaMundoApp.java

    Si no se han cometido errores al teclear ni se han tenido problemas con el path al fichero fuente ni alcompilador, no debera aparecer mensaje alguno en la pantalla, y cuando vuelva a aparecer el promptdel sistema, se debera ver un fichero HolaMundoApp.class nuevo en el directorio donde se encuentra elfichero fuente.Si ha habido algn problema, en Problemas de compilacin al final de esta seccin, hemos intentadoreproducir los que ms frecuentemente se suelen dar, se pueden consultar por si pueden aportar unpoco de luz al error que haya aparecido.

    EjecucinPara ejecutar la aplicacin HolaMundoApp, hemos de recurrir al intrprete java, que tambin seencuentra en el directorio bin, bajo el directorio java. Se ejecutar la aplicacin con la lnea:

    %java HolaMundoAppy debera aparecer en pantalla la respuesta de Java:%Hola Mundo!El smbolo % representa al prompt del sistema, y lo utilizaremospara presentar las respuestas que nos ofrezca el sistema comoresultado de la ejecucin de los comandos que se indiquen enpantalla o para indicar las lneas de comandos a introducir.

    Problemas de compilacinA continuacin presentamos una lista de los errores ms frecuentes que se presentan a la hora decompilar un fichero con cdigo fuente Java, nos basaremos en errores provocados sobre nuestra

    mnima aplicacin Java de la seccin anterior, pero podra generalizarse sin demasiados problemas.

    %javac: Command not foundNo se ha establecido correctamente la variable PATH del sistema para el compilador javac. Elcompilador javac se encuentra en el directorio bin, que cuelga del directorio java, que cuelga deldirectorio 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 tipogrfico, el mtodo es println no printl.

    %In class HolaMundoApp: main must be public and static

    Error de ejecucin, se olvid colocar la palabra static en la declaracin del mtodo main de laaplicacin.

    %Cant find class HolaMundoApp

    Este es un error muy sutil. Generalmente significa que el nombre de la clase es distinto al del ficheroque contiene el cdigo fuente, con lo cual el fichero nombre_fichero.class que se genera es diferente del

  • 8/8/2019 Manual Java 01

    33/43

    LENGUAJE DE PROGRAMACIN : JAVA 33 de 43Tema INTRODUCCIN A JAVA Java Nivel inicial Rev. 04

    Elaborado por Ing. Alejandro Huapaya Snchez 01/09/08

    que cabra esperar. Por ejemplo, si en nuestro fichero de cdigo fuente de nuestra aplicacinHolaMundoApp.java colocamos en vez de la declaracin actual de la clase HolaMundoApp, la lnea:class HolaMundoapp {

    se crear un fichero HolaMundoapp.class, que es diferente del HolaMundoApp.class, que es el nombreesperado de la clase; la diferencia se encuentra en la a minscula y mayscula.4.2 El Visor de applets de Sun (appletviewer)El visualizador de applets (appletviewer) es una aplicacin que permite ver en funcionamiento applets,sin necesidad de la utilizacin de un navegador World-Wide-Web como HotJava, Microsoft Explorer oNescape. En adelante, recurriremos muchas veces a l, ya que el objetivo del tutorial es el lenguajeJava.Applet

    La definicin ms extendida de applet, muy bien resumida por PatrickNaughton, indica que un applet es "una pequea aplicacin accesible en unservidor Internet, que se transporta por la red, se instala automticamente y

    se ejecuta in situ como parte de un documento web". Claro que as ladefinicin establece el entorno (Internet, Web, etc.). En realidad, un appletes una aplicacin pretendidamente corta (nada impide que ocupe ms de ungigabyte, a no ser el pensamiento de que se va a transportar por la red y unamente sensata) basada en un formato grfico sin representacinindependiente: es decir, se trata de un elemento a embeber en otrasaplicaciones; es un componente en su sentido estricto.

    Un ejemplo en otro mbito de cosas podra ser el siguiente: Imaginemos una empresa, que cansada deempezar siempre a codificar desde cero, disea un formulario con los datos bsicos de una persona(nombre, direccin, etc.). Tal formulario no es un dilogo por s mismo, pero se podra integrar endilogos de clientes, proveedores, empleados, etc.

    El hecho de que se integre esttica (embebido en un ejecutable) o dinmicamente (intrpretes, DLLs,etc.) no afecta en absoluto a la esencia de su comportamiento como componente con que construirdilogos con sentido autnomo.Pues bien, as es un applet. Lo que ocurre es que, dado que no existe una base adecuada para soportaraplicaciones industriales Java en las que insertar nuestras miniaplicaciones (aunque todo se andar),los applets se han construido mayoritariamente, y con gran acierto comercial (parece), como pequeasaplicaciones interactivas, con movimiento, luces y sonido... en Internet.Llamadas a Applets con appletviewerUn applet es una mnima aplicacin Java diseada para ejecutarse en un navegador Web. Por tanto, nonecesita preocuparse por un mtodo main() ni en dnde se realizan las llamadas. El applet asume queel cdigo se est ejecutando desde dentro de un navegador.

    El appletviewer se asemeja al mnimo navegador. Espera como argumento el nombre del fichero htmlque debe cargar, no se le puede pasar directamente un programa Java. Este fichero html debe conteneruna marca que especifica el cdigo que cargar el appletviewer:El appletviewer crear un espa