Monografia Lenguaje Java

download Monografia Lenguaje Java

of 56

Transcript of Monografia Lenguaje Java

  • 7/23/2019 Monografia Lenguaje Java

    1/56

    MONOGRAFIA LENGUAJE JAVA

    INDICE POR TEMAS:1- 1- Introduccin.2- 2- Caractersticas.3- 3- Hot Java.

    4- 4- Java para aplicaciones corporativas: 4.1- Desarrollo rpido de aplicaciones.4.2- Portabilidad para programador y programa.4.3- Costos de desarrollo.4.4- Mantenimiento y soporte.4.5- Aprendizaje.

    5- 5- Lo necesario para trabajar con Java.6- 6- Como hacer un programa en Java.7- 7- La gramtica de Java: 7.1- Comentarios.

    7.2- Identificadores.8- 8- Las aplicaciones y los Applets.9- 9- Clases, mtodos, atributos y objetos de Java:

    9.1- 9.1- Tipos de clases.

    9.2- 9.2- Variables y mtodos deinstancia.9.3- 9.3- Mtodos y

    constructores.9.4- 9.4- Herencia.9.5- 9.5- Control de acceso.9.6- 9.6- Variables y mtodos

    estadsticos.9.7- Interfaces.

    10-10- Creacin a Applets sencillos.11-11- Grfico, texto y sonido.12-12- Animaciones simples y multithreading.13-13- Los eventos y la respuesta al usuario.14-14- Concepto de jerarqua de componentes del programa15-15- Como se utiliza Labels.16-16- Como se utiliza Buttons.17-17- Como se utiliza Checkboxes.18-18- Como se utiliza Choise Menu.19-19- Como se utiliza Text Fields.20-20- Como se utiliza Text Area.21-21- Como se utiliza Frames y Dialogs.22-22- Como se utiliza Lists.23- Como se utiliza Scrollbars24- Como se utiliza Canvas.25-25- Como se utiliza Panels.

    26- Como se utiliza Scroll Panes.27- Otros componentes.28- Layout Manager.29- Control de eventos (Event Handling).30- Ejemplos de los temas vistos.31- Paquetes de Java.32- Algunas referencias.

  • 7/23/2019 Monografia Lenguaje Java

    2/56

    1- INTRODUCCIN

    La empresa SUN MICROSYSTEMS, lder en servidores para Internet, ha desarrollado elLenguaje Java, para resolver simultneamente todos los problemas que se le plantean a loscreadores de software por la proliferacin de arquitecturas incompatibles, entre las diferentesmquinas y diversos sistemas operativos, y sistemas de ventanas que funcionaban sobre unamisma mquina, sumndose a esto la dificultad de crear aplicaciones distribuidas en una red

    como Internet.En la Argentina, muchas empresas estn usando o considerando el uso de Java, y en

    los avisos clasificados, cada vez ms requieren personal con conocimiento de este lenguaje.Este lenguaje nuevo ha causado sensacin, porque posee estricta orientacin a objetos, menortiempo de desarrollo, mayor portabilidad, ms seguridad, simplicidad en la distribucin desoftware, orientacin a redes, programacin multitarea, etc. Ocupa un lugar importante en lalista de lenguajes a tener en cuenta cundo se va a desarrollar aplicaciones, particularmente enel caso de aplicaciones de negocios que implican conexin a red, arquitecturas multiusuarios,cliente/servidor, o acceso desde internet.

    Tiene muchas posibilidades como lenguaje de aplicaciones comerciales y desarrollosdirigidos a la empresa. Posee innumerables ventajas, dos de ellas muy importantes son laindependencia de la plataforma y el diseo orientado a redes.

    En las empresas que se fueron informatizando desde hace un tiempo, es comnencontrar una mezcla de hardware y sistemas operativos. Por ejemplo servidores Unix conOracle en el sector administrativo, PCs con DOS, y Windows en las oficinas, y Macintosh en eldepartamento de diseo.

    Java tiene posibilidades de integracin de sistemas, porque permite que todos elloscorran las mismas aplicaciones, lo que disminuye el costo de desarrollo, mantenimiento yentrenamiento de los usuarios. Tambin ofrece la posibilidad de independizarse de losproveedores de hardware y adaptarse a la evolucin continua sin realizar inversiones enreingenieria de sistemas.

    En la reintegracin de los sistemas, la interconexin de equipos y las aplicaciones enred, Java cumple un rol fundamental. Es el lenguaje ideal para desarrollar aplicaciones en red.La posibilidad de ejecutar aplicaciones cliente/servidor, en las cuales varios usuarios utilizanlos mismos recursos de software del servidor, desde mquinas baratas o net computers,disminuye los costos de actualizacin del software, porque no hay que estar rastreando queversiones hay en cada mquina y perdiendo tiempo en actualizar cada una. Al no quedarlimitado dentro de la red interna de la empresa y abrir el acceso a internet, se beneficia a losusuarios de la empresa y a los clientes. Sin importar la ubicacin fsica ni el tiempo demaquina, los clientes pueden realizar consultas y compras por la red, los distribuidores puedenactualizar sus catlogos y listas de precios y un sin fin de otras posibilidades.

    Adems posee diversas funciones orientadas a la seguridad y que se encuentranincorporadas al lenguaje en forma nativa. Obviamente el uso de Java por si solo, no suprimelas debilidades que posee el sistema operativo subyacente, sea cual sea, pero permite estarcompletamente seguros en cuanto a las aplicaciones propias de este lenguaje. Dentro de losdesarrollos de Sun orientados a las empresas, que conforman lo que se denomina la JavaCommerce API, se tienen en cuenta los mecanismos de seguridad, la encriptacin de datos, los

    mtodos de pago a distancia, y el uso de tarjetas inteligentes que incorporan chips basados enJava.

  • 7/23/2019 Monografia Lenguaje Java

    3/56

    2- CARACTERSTICAS.

    Las caractersticas principales que ofrece Java respecto a cualquier otro lenguaje deprogramacin son las siguientes: Es simple, ofrece la funcionalidad de un lenguaje potente, pero sin las

    caractersticas menos usadas y ms confusas de estos. C++ es un lenguaje que carece defalta de seguridad, pero C y C++ son lenguajes mas difundidos, por eso Java se diseo

    para ser ms similar a C++ y facilitar un rpido y fcil aprendizaje. Java elimina muchas delas caractersticas de otros lenguajes como C++, para reducir las especificaciones dellenguaje y aadir caractersticas muy tiles como el garbage collector (reciclador dememoria dinmica). No es necesario preocuparse de liberar memoria, el reciclador seencarga de ello, y como es un thread de baja prioridad permite liberar bloques de memoriamuy grandes, lo que reduce la fragmentacin de la memoria. Java reduce en un 50% loserrores ms comunes de programacin con lenguaje como C y C++ al eliminar muchas delas caractersticas de estos, por ejemplo, aritmtica de punteros, no existen referencias,registros (struct), definicin de tipos (typedef), macros (# define), necesidad de liberarmemoria (free). Lo que hace es eliminar las palabras reservadas (struct typedef), ya quelas clases son algo parecido.

    Es orientado a objetos, implementa la tecnologa bsica de C++ con algunas

    mejoras y elimina algunas cosas para mantener la simplicidad del lenguaje, trabaja con susdatos como objetos y con interfaces a esos datos. Soporta las 3 caractersticas propias delparadigma de la orientacin objetos: encapsulacin, herencia y polimorfismo. Las plantillasde objetos son llamadas como en C++, clases y sus copias, instancias. Como en C++,necesitan ser construidas y destruidas en espacio de memoria. Java incorporafuncionalidades inexistentes en C++, como por ejemplo la resolucin dinmica de mtodo.Esta caracterstica proviene del lenguaje Objetive C, dueo del sistema operativo Next. EnC++ se suele trabajar con libreras dinmicas (DLLs) que obligan recompilar la aplicacincuando se retocan las funciones que se encuentran en su interior. Este inconveniente loresuelve Java mediante una interfaz especifica llamada RTTI (Rum Time TypeIdentification) que define la interaccin entre objetos excluyendo variables de instancias oimplementacin de mtodos. Las clases en Java tienen una representacin en el RunTime

    que permite a los programadores preguntar por el tipo de clase y enlazar dinmicamente laclase con el resultado de la bsqueda. Para que un lenguaje pueda considerarse orientadoa objetos debe soportar como mnimo las caractersticas de encapsulacin, herencia,polimorfismo, enlace

    Es distribudo; Java se ha construdo con extensas capacidades de interconexin

    TCP/IP. Existen libreras de rutina para acceder e interactuar con protocolos como http y ftp,lo cual permite a los programadores acceder a la informacin a travs de la red con tantafacilidad como a los ficheros locales. Java en si no es distribudo, sino que proporciona laslibreras y herramientas para que los programas puedan ser distribudos, es decir, que secorran en varias mquinas interactuando. Es robusto, realiza verificaciones, en busca de problemas, tanto en tiempo de

    compilacin como en tiempo de ejecucin. La comprobacin de tipos en Java ayuda a detectar

    errores en el ciclo de desarrollo, obliga a la declaracin explcita de mtodos, reduciendo lasposibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte deprogramador de la liberacin o corrupcin de memoria. Implementa los arrays autnticos, envez de listas enlazadas de punteros, con comprobacin de limites para evitar la posibilidad desobreescribir o corromper memoria, resultado de puntero, que sealan a zonas equivocadas.Estas caractersticas reducen fuertemente el tiempo de desarrollo de aplicaciones en Java. Paraasegurar el funcionamiento de la aplicacin, realiza una verificacin de los byte codes, que sonel resultado de la compilacin de un programa Java. Es un cdigo de mquina virtual que esinterpretado por el interprete Java. No es el cdigo mquina directamente entendible por elhardware, pero a pasado todas las fases del compilador, anlisis de instrucciones, orden deoperadores, etc., y ya tiene generada la pila de ejecucin de ordenes. Proporcionacomprobacin de punteros, comprobacin de limites de arrays, y verificacin de byte-codes. Tiene arquitectura neutral. Para establecer Java como parte integral de la red, el

    compilador Java compila su cdigo a un fichero objeto de formato independiente de laarquitectura de la mquina en que se ejecutara. Cualquier mquina que tenga el sistema deejecucin (run-time) puede ejecutar ese cdigo objeto sin importar la mquina en que ha sido

  • 7/23/2019 Monografia Lenguaje Java

    4/56

    generada. Existen sistemas run-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT,Linux, Irix, Aix, Mac, Apple, y hay grupos de desarrollos trabajando para otras plataformas. Elcdigo fuente Java se compila a un cdigo de bytes de alto nivel independiente de la mquina.Este cdigo (byte-codes) esta diseado para ejecutarse en una mquina hipottica que esimplementada por un sistema run-time que si es dependiente de la mquina. Lo dependientedel sistema es la Mquina Virtual Java (JVM) y las libreras fundamentales que nos permitiranacceder directamente al hardware de la mquina. Una mquina virtual es una capa lgica que

    hace creer al programa Java que se ejecuta en un ordenador real (con registros, memoria yprocesador), cuando en realidad solo se ve una reconstruccin lgica de un ordenador. Paraejecutar un programa Java compilado (que esta en p-codes), se debe contar con unaimplementacion de la mquina virtual especifica donde se desea ejecutar, la cual efecta latransformacin del p-code en un programa comprensible para la mquina. Adems habr APIsde Java que tambin entren en contacto directo con el hardware y sern dependientes de lamquina. Ejemplo de este tipo de APIs:

    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. Es seguro: la seguridad en Java tiene dos facetas. En el lenguaje, caractersticas

    como los punteros o el casting implcito que hacen los compiladores de C y C++ seeliminan para prevenir el acceso ilegal a la memoria. Cuando se usa Java para crear unnavegador, se combinan las caractersticas del lenguaje con protecciones de sentido comnaplicadas al propio navegador. El lenguaje C tiene lagunas de seguridad importantes, comoson los errores de alineacin. Los programadores de C utilizan punteros en conjuncin conoperaciones aritmticas que permite al programador que un puntero referencie a un lugarconocido la memoria y pueda sumar (o restar) algn valor, para referirse a otro lugar de lamemoria. Si otros programadores conocen nuestras estructuras de datos pueden extraerinformacin confidencial de nuestro sistema. Con un lenguaje como C, se pueden tomar

    nmeros enteros aleatorios y convertirlos en punteros para luego acceder a la memoria:printf("Escribe un valor entero: ");scanf("%u",&puntero );printf( ".

    Java imposibilita, tambin, abrir ningn fichero de la mquina local (siempre que se realizanoperaciones con archivos, stas trabajan sobre el disco duro de la mquina de donde parti elapplet), no permite ejecutar ninguna aplicacin nativa de una plataforma e impide que seutilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra mquina parahacer peticiones o realizar operaciones con otra. Cadena de memoria: %s\n",puntero );

    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 contenidode un directorio con el comando ls. Despus de que el caballo de Troya haya enviado porcorreo el /etc/shadow a su creador, ejecuta la funcionalidad de ls persentando el contenido deldirectorio. Se notar un retardo, pero nada inusual. El cdigo Java pasa muchos tests antes deejecutarse en una mquina. El cdigo se pasa a travs de un verificador de byte-codes quecomprueba el formato de los fragmentos de cdigo y aplica un probador de teoremas paradetectar fragmentos de cdigo ilegal -cdigo que falsea punteros, viola derechos de accesosobre objetos o intenta cambiar el tipo o clase de un objeto-.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 es conocido y

    correcto. 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

    http://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtmlhttp://www.monografias.com/trabajos14/nuevmicro/nuevmicro.shtml
  • 7/23/2019 Monografia Lenguaje Java

    5/56

    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 sealmacenan en un espacio de nombres privado, asociado con el origen. Cuando una clase delespacio de nombres privado accede a otra clase, primero se busca en las clases predefinidas(del sistema local) y 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 azonas delicadas de memoria o de sistema, con lo cual evitan la interaccin de ciertos virus.Java no posee una semntica especfica para modificar la pila del programa, la memoria libre outilizar objetos y mtodos de un programa sin los privilegios del kernel del sistema operativo.Adems, para evitar modificaciones por parte de los crackers de la red, implementa un mtodoultraseguro de autenticacin por clave pblica. El Cargador de Clases puede verificar una firmadigital antes de realizar una instancia de un objeto. Por tanto, ningn objeto se crea yalmacena en memoria, sin que se validen los privilegios de acceso. Es decir, la seguridad seintegra en el momento de compilacin, con el nivel de detalle y de privilegio que seanecesario. Java imposibilita, tambin, abrir ningn fichero de la mquina local (siempre que serealizan operaciones con archivos, stas trabajan sobre el disco duro de la mquina de donde

    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 mquinapara hacer peticiones o realizar operaciones con otra. Los interpretes que incorporan losnavegadores de la Web son aun ms restrictivos. Bajo dichas condiciones se puede considerarque Java es un lenguaje seguro y que los applets estn libres de virus. Respecto a la seguridaddel cdigo fuente, JDK proporciona un desensamblador de byte-code, que permite quecualquier programa pueda ser convertido a cdigo fuente, lo que para el programador significauna vulnerabilidad total a su cdigo. Utilizando Java no se tiene el cdigo fuente original, perodesmonta el programa mostrando el algoritmo que se utiliza. La proteccin de losprogramadores ante esto es utilizar llamadas a programas nativos, externos (incluso en C oC++) de forma que no sea descompilable todo el cdigo; aunque as se pierda portabilidad.Esta es otra de las cuestiones que Java tiene pendientes. Es portable, aparte de la portabilidad bsica por ser de arquitectura independiente,

    Java implementa otros estndares de portabilidad para facilitar el desarrollo. Los enteros sonsiempre enteros, y adems enteros de 32 bits en complemento a 2. Java construye susinterfaces de usuario a travs de un sistema abstracto de ventanas de forma que las ventanaspuedan ser implantadas en entornos Unix, Pc o Mac. Es interpretado; el interprete Java (sistema run-time) puede ejecutar directamente

    el cdigo objeto. Enlazar (linkar) un programa consume menos recursos que compilarlo, porque los desarrolladores con Java pasarn ms tiempo desarrollando y menos esperando por elordenador. El compilador actual del JDK es bastante lento, todava no hay compiladoresespecficos de Java para las diversas plataformas. Java es ms lento que otros lenguajes deprogramacin, como C++ ya que debe ser interpretado y no ejecutado como sucede encualquier programa tradicional. Se dice que Java es de 10 a 30 veces ms lento que C, y quetampoco existen en Java proyectos de gran envergadura como en otros lenguajes. Pero ya haycomparaciones ventajosas entre Java y el resto de los lenguajes de programacin. Habra quedecidir hasta que punto Java, un lenguaje en pleno desarrollo y todava sin definicindefinitiva, esta maduro como lenguaje de programacin para ser comparado con otros. Javapara conseguir ser lenguaje independiente del sistema operativo y del procesador queincorpore la mquina utilizada, es tanto interpretado como compilado. Esto no es ningncontrasentido, el cdigo fuente escrito con cualquier editor se compila generando el byte-code.Este cdigo intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones mquinaspropias de cada plataforma y no tiene nada que ver con el p-code de Visual Basic. El byte-codecorresponde al 80% de las instrucciones de las aplicaciones. Ese mismo codigo es el que sepuede ejecutar sobre cualquier plataforma. Para ello hace falta el run time, que si es

    completamente dependiente de la mquina y del sistema operativo, interpreta el byte-code yaade el 20% de instrucciones que faltaban para su ejecucin. Con este sistema es fcil crear

  • 7/23/2019 Monografia Lenguaje Java

    6/56

    aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista el run timecorrespondiente al sistema operativo utilizado. Es multithreaded, permite muchas actividades simultneas en un programa. Los

    threads (llamados procesos ligeros) son pequeos procesos o piezas independientes de ungran proceso. Al estar construidos en el lenguaje, son ms fciles de usar y ms robustos quesus homlogos en C o C++. El beneficio consiste en un mejor rendimiento interactivo y mejor

    comportamiento en tiempo real. Aunque el comportamiento en tiempo real esta limitado a lascapacidades del sistema operativo subyacente (Unix, Windows, etc.), aun supera a losentornos de flujo nico de programa (single-threaded) tanto en la facilidad de desarrollo comoen rendimiento. Cualquiera que haya utilizado la tecnologa de navegacin concurrente, sabe lofrustrante que puede ser esperar por una gran imagen que se est trayendo. En Java lasimgenes se pueden ir trayendo en un thread independiente, permitiendo que el usuario puedaacceder a la informacin en la pagina sin tener que esperar por el navegador. Es dinmico, Java se beneficia todo lo posible de la tecnologa orientada a objetos;

    no intenta conectar todos los mdulos que componen una aplicacin hasta el tiempo deejecucin. Las libreras nuevas o actualizadas no paralizarn las aplicaciones actuales (siempreque mantengan el API anterior). Tambin simplifica el uso de protocolos nuevos o

    actualizados. Si su sistema ejecuta alguna aplicacin Java sobre la red y encuentra una piezade la aplicacin que no sabe manejar, es capaz de traer automticamente cualquiera de esaspiezas que es sistema necesita para funcionar. Para evitar que los mdulos de byte-codes o losobjetos o nuevas clases, haya que estar trayndolos de la red cada vez que se necesitenimplementa las opciones de persistencia. Cul es la ventaja de todo esto?. Qu gano conJava? :1- 1- No volver a escribir el cdigo si quiero 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.)

    2- 2- Java es un lenguaje de programacin orientado a objetos y tiene todos los beneficiosque ofrece esta metodologa de programacin.

    3- 3- Un browser compatible con Java deber ejecutar cualquier programa hecho en Java,

    ahorra a los usuarios tener que estar insertando "plug-ins", y adems programas que aveces quitan tiempo y espacio en disco.4- 4- Java es un lenguaje y puede hacer todas las cosas que puede hacer un lenguaje deprogramacin: clculos matemticos, procesadores de palabras, bases de datos, aplicacionesgrficas, animaciones, sonidos, hojas de clculo, etc.5- 5- Si lo que interesa son las paginas web, ya no tienen que ser estticas, se les puedeponer toda clase de elementos multimedia y permiten un alto nivel de interactividad, sin tenerque gastar en paquetes carsimos de multimedia.Algunas limitantes:1- 1- La velocidad.2- 2- Los programas hechos en Java no tienden a ser muy rpidos, se est trabajando en

    mejorar esto. Como los programas de Java son interpretados nunca alcanzan la velocidadde un verdadero ejecutable.

    3- 3- Java es un lenguaje de programacin, esa es otra limitante; aprenderlo no es cosafcil, especialmente para los no programadores.4- 4- Es nuevo, todava no se conocen bien todas sus capacidades. En general poseemuchas ventajas, y se pueden hacer cosas muy interesantes, posee mucha fuerza.

  • 7/23/2019 Monografia Lenguaje Java

    7/56

    3- HOTJAVAEs un navegador con soporte Java (Java-enabled), desarrollado en Java. Como cualquiernavegador de Web, HotJava puede decodificar HTML estndar y URLs estndares, aunque nosoporta 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 que tiene implementado completamente los sistemas de seguridad que propone Java, esto

    significa que puede escribir y leer en el disco local, aunque esto hace disminuir la seguridad,ya que se pueden grabar en nuestro disco programas que contengan cdigo malicioso eintroducirnos un virus, por ejemplo. No obstante, el utilizar esta caracterstica de HotJava esdecisin del usuario.

    4- JAVA PARA APLICACIONES CORPORATIVASSurge la pregunta de si esta es una buena tecnologa para desarrollar aplicacionescorporativas. Y la respuesta es afirmativa, en donde la red sea algo crtico, Java facilitatremendamente la vida de la programacin corporativa.Durante aos, las grandes empresas se han convencido de que la "red" corporativa es la que

    mantiene vivo su negocio. Desde el gran servidor de sus oficinas centrales, hasta losservidores de las delegaciones, las estaciones de trabajo de los programadores y las Pcs, lainformacin va fluyendo de unos a otros. Para muchas compaas, la Red es la Empresa.Si esta red no se mantiene sana, los pedidos no llegan, el inventario no se actualiza, elsoftware no se desarrolla adecuadamente, los clientes no estn satisfechos y,fundamentalmente, el dinero no entra. La necesidad de diagnosticar y reducir los problemas dela red, hace que se estn implementando continuamente nuevas metodologas que subsaneneste grave problema.4.1- Desarrollo rpido de aplicacionesHace aos, se deca que los programadores pronto desapareceran. Los generadoresautomticos de programas, eliminaran a los generadores humanos y el mundo sera un lugarmejor para vivir. Desafortunadamente, quienes decan esto no tuvieron en cuenta unaacelerada demanda de software de calidad para muy diferentes aplicaciones. Sin embargo, latecnologa de objetos pronto vino a intentar facilitar la tarea, adoptando el modelo de "generarparte de un programa", as, generando la parte bsica de un programa (los objetos), se podraconectar con otras partes para proporcionar diferentes utilidades al usuario.El lenguaje C++ es una buena herramienta, pero no cumple totalmente la premisa. VisualBasic y NextStep, se acercan cada vez ms al poder de los objetos. Java facilita la creacin deentornos de desarrollo-aplicaciones de modo similar, pero adems es flexible, poderoso yefectivo. Los programadores ahora disponen de herramientas de programacin de calidad, queapuntan hacia esa meta, como son el Java WorkShop de SunSoft, el entorno Java de Borland,el Caf de Symantec, y pronto, herramientas ms sofisticadas como Netcode o FutureTense.Esto proporciona una gran progresin a los entornos de desarrollo Java.

    Aplicaciones efectivas y eficientesLas aplicaciones que se crean en grandes empresas deben ser ms efectivas que eficientes; esdecir, conseguir que el programa funcione y el trabajo salga adelante es ms importante queel que lo haga eficientemente. Esto es una realidad de la programacin corporativa. Al ser unlenguaje ms simple que cualquiera de los que ahora estn en el cajn de los programadores,Java permite a stos concentrarse en la mecnica de la aplicacin, en vez de pasarse horas yhoras incorporando APIs para el control de las ventanas, controlando minuciosamente lamemoria, sincronizando los ficheros de cabecera y corrigiendo los agnicos mensajes dellinker. Java tiene su propio toolkit para interfaces, maneja por s mismo la memoria que utilicela aplicacin, no permite ficheros 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

  • 7/23/2019 Monografia Lenguaje Java

    8/56

    ordenador del usuario. Aunque ya hay ciertos proveedores que ofrecen compiladores nativosJust-In-Time (JIT). Si la Mquina Virtual Java dispone de un compilador instalado, lassecciones (clases) del byte-code de la aplicacin se compilarn hacia la arquitectura nativa delordenador 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 nocompilan y distribuyen binarios Java a los usuarios. La compilacin JIT tiene lugar a partir del

    byte-code Java, en el sistema del usuario, como una parte (opcional) del entorno run-timelocal de Java.Muchas veces, los programadores corporativos, ansiosos por exprimir al mximo la eficienciade su aplicacin, empiezan a hacerlo demasiado pronto en el ciclo de vida de la aplicacin.Java permite algunas tcnicas innovadoras de optimizacin. Por ejemplo, Java esinherentemente multithreaded, a la vez que ofrece posibilidades de multithread como la claseThread y mecanismos muy sencillos de usar de sincronizacin; Java en s utiliza threads. Losdesarrolladores de compiladores inteligentes pueden utilizar esta caracterstica de Java paralanzar un thread que compruebe la forma en que se est utilizando la aplicacin. Msespecficamente, este thread podra detectar qu mtodos de una clase se estn usando conms frecuencia e invocar a sucesivos niveles de optimizacin en tiempo de ejecucin de laaplicacin. Cuanto ms tiempo est corriendo la aplicacin o el applet, los mtodos estarn

    cada vez ms optimizados.Si un compilador JIT est embebido en el entorno run-time de Java, el programador no sepreocupa de hacer que la aplicacin se ejecute ptimamente.

    4.2- Portabilidad para programador y programaEn una empresa de relativo tamao hay cantidades diferentes de ordenadores. Probablementenos encontremos con estaciones de trabajo Sun para el desarrollo de software, hordas de PCspara cada empleado, algn Mac en el departamento de documentacin, una estacin detrabajo HP en administracin y una estacin SGI en la sala de demos. Desarrollar aplicacionescorporativas para un grupo tan diferente de plataformas en excesivamente complejo y caro.Hasta ahora era complicado convencer a los programadores de cada arquitectura que utilicenun 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 plataformaspresentes en la empresa y una buena librera de clases ("packages" en Java), losprogramadores pueden entenderse y encontrar muy interesante trabajar con Java. Estaposibilidad har tender a los programadores hacia Java, justo donde otros intentos anteriorescon entornos universales (como Galaxy o XVT) han fracasado. Estos APIs eran simplementeinadecuados, 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 delservidor de una aplicacin estarn ahora escritas en el mismo lenguaje. Ya no ser necesariotener un grupo que desarrolle en Solaris en del departamento de I+D, programadorestrabajando sobre Visual Basic en el departamento de documentacin y programadores sobre

    GNU en proyectos especiales; ahora todos ellos podrn estar juntos y formar el grupo desoftware de la empresa.4.3- Costos de desarrolloEn contraste con el alto coste de los desarrollos realizados sobre estaciones de trabajo, elcosto de creacin 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 unproblema en muchas empresas. La eficiencia del hardware y el poco costo de mantenimientode una estacin de trabajo Sun, por ejemplo, resulta muy atractivo para las empresas; pero elcosto adicional del entorno de desarrollo con C++ es prohibitivo para la gran mayora de ellas.La llegada de Java e Intranet reducen considerablemente estos costos. Las herramientas Java

    ya no estn en el entorno de precios de millones de pesos, sino a los niveles confortables deprecio 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,

  • 7/23/2019 Monografia Lenguaje Java

    9/56

    los programadores corporativos tienen un amplio campo donde moverse y muchasoportunidades de aprender y muchos recursos a su disposicin.El xito que Internet ha proporcionado a los equipos de software corporativos es un regalo. Elprecio del software es ahora el mismo para un poderoso equipo corriendo Unix que para un PC.Incluso Netscape tiene al mismo precio la versin Unix de su servidor Web SuiteSpot que laversin PC/NT. Esta es la filosofa de precios que parece ser ser la que se siga con lasherramientas basadas en Java.

    4.4- Mantenimiento y soporteUn problema bien conocido que ocurre con el software corporativo es la demanda de cuidadosy realimentacin. Java no es, ciertamente, la solucin para el problema del mantenimiento,pero tiene varias caractersticas que la harn ms fcil.Uno de los componentes del JDK es javadoc. Si se usan ciertas convenciones en el cdigofuente Java (como comenzar un comentario con /** y terminarlo con */), javadoc se puedefcilmente generar pginas HTML con el contenido de esos comentarios, que puedenvisualizarse en cualquier navegador. La documentacin del API de Java ha sido creada de estemodo. Esto hace que el trabajo de documentar el cdigo de nuevas clases Java sea trivial.Otro gran problema del desarrollador corporativo es la creacin y control de makefiles. Leerse

    un makefile es como estar leyendo la historia de empresa. Normalmente se pasan deprogramador a programador, quitando la informacin que no es esencial, siempre que sepuede. Esto hace que muchos de los makefiles de las aplicaciones contengan docenas delibreras, una mirada de ficheros de cabecera y macros muy confusos.Java reduce la dependencia de complejos makefiles drsticamente. Primero, no hay ficheros decabecera. Java necesita que todo el cdigo fuente de una clase se encuentre en un solofichero. Java tiene la inteligencia de make en el propio lenguaje para simplificar la compilacinde 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][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. Ahoravamos a forzarlo a que recompile pepe.java sin cambiar guitarra.java, podremos comprobar

    que el compilador de byte-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) ycompilamos pepe.java, el compilador Java se dar cuenta de que debe recompilar tantopepe.java como guitarra.java% javac -verbose pepe.java

    [parsed pepe.java in 710ms][loaded C:\JAVA\BIN\..\classes\java\lang\Object.class in 220ms][checking class pepe]

  • 7/23/2019 Monografia Lenguaje Java

    10/56

    [parsed .\\Guitarra.java in 0ms][wrote pepe.class][checking class Guitarra][wrote .\\Guitarra.class][done in 2640ms]ejemplo extrado de:

    4.5- AprendizajeSi la empresa est llena de programadores de C++ con alguna experiencia en el manejo delibrera grficas, aprendern rpidamente lo esencial de Java. Si el equipo de ingenieros noconoce C++, pero maneja cualquier otro lenguaje de programacin orientada a objetos, lesllevar pocas semanas dominar la base de Java. Lo que s que no es cierto es que haya queaprender C++ antes de aprender Java.Si los ingenieros de la empresa no conocen ningn lenguaje orientado a objetos, s que tienenque aprender los fundamentos de esta tecnologa antes de nada, y luego aplicarlos a laprogramacin con Java. El anlisis y diseo orientado a objetos debe ser comprendido antes deintentar nada con Java. Los programadores de Java sin un fondo de conocimientos de OOA/Dproducirn cdigo pobre.

    5- LO NECESARIO PARA TRABAJAR EN JAVA

    Herramientas necesarias para desarrollar en Java: para desarrollar programas en Javaes suficiente con instalar el paquete JDK de Sun, que es de libre distribucin. En el site de Sunse encuentra toda clase de informacin relacionada con Java: ejemplos de programas escritosen Java, documentacin, bugs conocidos y su solucin, etc.6- COMO HACER UN PROGRAMA EN JAVA

    a- a- Aplicaciones: Escribir el programa fuente en cualquier editor y guardarlo con extensin.java.

    Compilar el fichero fuente mediante: javac.miPrograma.java. esto genera el

    fichero.class. Ejecutarlo (interpretar los byte-code): java.miPrograma.

    b- b- Applets: Escribir el programa fuente en cualquier editor y guardarlo con extensin.java

    Compilar el fichero fuente mediante: javac.miProgramaApplet.java

    Escribir la pagina web que contendr al applet y guardar el cdigo con extensin

    html el cdigo mnimo ser:

    - - lanzar un navegador y cargar la pgina html, o bien- - usar el programa provisto por Sun para ver applets:

    appletviewermiProgramaApplet.html

    un ejemplo de herramientas bsicas para comenzar a programar en lenguaje Java podra ser:1- 1- Editor de cdigo multilenguaje y con utilidades de edicin y deteccin automtica deerrores. Un buen editor con estas propiedades y ms es ED for Windows v3.80 peroexisten muchos otros.

  • 7/23/2019 Monografia Lenguaje Java

    11/56

    2- 2- JDK1.1.x, con el que podemos compilar y probar las aplicaciones y applets realizados.3- 3- Documentacin HTML de las clases Java.Es aconsejable trabajar con paquetes de componentes que no pertenecen a los bsicos deJava, como puede ser swing o symbeans. Estos componentes o beans proporcionan utilidadesy facilidades aadidas a paquete bsico de jdk.Otra posibilidad para desarrollar en Java es utilizar una herramienta Visual como Visual Caf oV++. Estas herramientas suponen un entorno integrado de programacin con mdulos editor,

    de diseo visual, compilador, depurador, etc. Proporcionan componentes especialmente tilesen diseo de interfaces grficas.

    7- 7- LA GRAMATICA DE JAVA.7.1- Comentarios: en 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, colocados inmediatamenteantes de una declaracin (de variable o funcin), indican que ese comentario ha de sercolocado en la documentacin que se genera automticamente cuando se utiliza laherramienta de Java, javadoc. Sirven como descripcin del elemento declarado permitiendogenerar una documentacin de nuestras clases escrita al mismo tiempo que se genera elcdigo.

    7.2- Identificadores: nombran variables, funciones, clases y objetos; cualquier cosa queel programador necesite identificar o usar. un identificador comienza con una letra, unsubrayado (_) o un smbolo de dlar ($). Los siguientes caracteres pueden ser letras odgitos. Se distinguen las maysculas de las minsculas y no hay longitud mxima.Ejemplos de identificadores vlidos:

    Identificador nombre_usuario Nombre_Usuario _variable_de_sistema$transaccion

    y su uso sera, por ejemplo:

    int contador_principal; char _lista_de_ficheros; float cantidad_en_Ptas;

    Palabra clave: las siguientes son palabras claves que estn definidas en Java y que no sepueden utilizar como identificadores:

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

  • 7/23/2019 Monografia Lenguaje Java

    12/56

    Palabras reservadas: el lenguaje se reserva unas cuantas palabras mas, pero que hastaahora no tienen un cometido especifico. Son:

    cast future generic inneroperator outer rest var

    Tags HTMLAtributos del tag

    Texto alternativo

  • 7/23/2019 Monografia Lenguaje Java

    13/56

    8- 8- LAS APLICACIONES Y LOS APPLETS

    Las caractersticas propias del lenguaje java hacen que adems de poder desarrollaraplicaciones que se ejecutan en el intrprete local, se puedan desarrollar mdulosdescargables a travs de una pagina web y ejecutables en la JVM (Java Virtual Machine)del navegador. Estos mdulos reciben el nombre de APPLETS. Ejemplos sencillos de cada

    tipo de desarrollo para apreciar las diferencias de estructura gramatical:

    1. Aplicaciones

    class EchoArgs{

    public static void main (String args[]){for ( int i = 0;i

  • 7/23/2019 Monografia Lenguaje Java

    14/56

    9- 9- CLASES, METODOS, ATRIBUTOS Y OBJETOS EN JAVA.El siguiente ejemplo muestra los conceptos ms importantes de los objetos de la OOP enJAVA:

    // Perro.javapackage java.testJavadoc;

    /***Este texto es un comentario sobre la clase Perro* @author MGO* @version 1* @see clase VerPerro*/class Perro{String raza;private String color;boolean perroLadrando;

    //private int numeroDeEdad;static int peso = 28; //kilogramosString nombreDelPropietario;

    // Metodo Constructor/** Metodo constructor*/Perro(String nombre)

    {this.nombreDelPropietario = nombre;}

    Perro( )

    {;}

    void ladrarPerro( ){if (perroLadrando == true)

    {System.out.println("El perro ya esta ladrando !");}

    else

    {perroLadrando = true;System.out.println("Guauguau. El perro acaba de ladrar");}

    }

    void describePerro( ){System.out.println("Descripcion de El Perro;");System.out.println("- raza: " + raza);System.out.println("- pelaje de color: " + color);System.out.println("- peso: " + peso + " kilogramos");if (perroLadrando == true)

    {System.out.println("- el perro esta ladrando");

  • 7/23/2019 Monografia Lenguaje Java

    15/56

    }

    else{System.out.println("- el perro esta durmiendo");}

    }/* Aadir:- dormirPerro- cortarPelo (declarar color private)- escribir main en la propia clase y como clase independiente- mtodo que devuelve un valor en vez de void -> devolver un objeto propio- variable esttica: al cambiarla, varan las de todas las instancias- mtodo constructor con parmetro Nombre del propietario

    Comentarios:- al no declarar que hereda de nadie, se asume que es de Object- comentarios

    - aritmtica de Strings, se suman- println es menos potente que en C- null y los valores por defecto- this- las referencias -> programa de ejemplo- la recogida de basura -> el programador no gestiona la memoria

    */public static void main(String args[]){Perro miPerro;miPerro = new Perro( );

    miPerro.raza = "AFGANO";miPerro.color = "blanco marfil";

    miPerro.describePerro( );System.out.println("-------------------");System.out.println("Hacer ladrar al perro...");miPerro.ladrarPerro( );System.out.println("-------------------");miPerro.describePerro( );System.out.println("-------------------");miPerro.ladrarPerro( );

    // Otro PerroPerro elPerroDeMiHermana = new Perro( );elPerroDeMiHermana.raza = "Labrador";System.out.println("-------------------");elPerroDeMiHermana.describePerro( );

    // Altera la variable estatica de la clase PerroPerro.peso = 15;elPerroDeMiHermana.describePerro( );miPerro.describePerro( );

    // NOTA: el color saldra null}

    }

    Ejemplo extrado de: www.monografias.com/trabajos/java/java.stml

  • 7/23/2019 Monografia Lenguaje Java

    16/56

    9.1 LOS TIPOS DE CLASESHasta ahora slo se ha utilizado la palabra clave public para calificar el nombre de las clasesque se ha visto, pero hay tres modificadores ms. Los tipos de clases que se pueden definirson:

    abstractUna clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se

    instancia, sino que se utiliza como clase base para la herencia.finalUna clase final se declara como la clase que termina una cadena de herencia. No se puedeheredar de una clase final. Por ejemplo, la clase Math es una clase final.publicLas clases public son accesibles desde otras clases, ya sea directamente o por herencia.Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desdeotros paquetes, primero tienen que ser importadas.synchronizable

    Este modificador especifica que todos los mtodos definidos en la clase son sincronizados, esdecir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema seencarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads

    diferentes se puedan modificar las mismas variables sin que haya problemas de que sesobreescriban.9.2 LAS VARIABLES Y LOS METODOS DE INSTANCIASUna clase en Java puede contener variables y mtodos. Las variables pueden ser tiposprimitivos como int, 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 laclase y Suma_a_i( int j ).

    9.3 LOS METODOS Y LOS 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

    que realizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dichaclase.Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, secrean (instancian) todos los mtodos y variables, y se llama al constructor de la clase:

    MiClase mc;mc = new MiClase();

    La palabra clave newse usa para crear una instancia de la clase. Antes de ser instanciada connew 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. Se puedereferenciar la variable (de instancia) i con el nombre del objeto:

    mc.i++; // incrementa la instancia de i de mcAl 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 clase mc:mc.Suma_a_i( 10 );

    y ahora la variable mc.i vale 21.

  • 7/23/2019 Monografia Lenguaje Java

    17/56

    9.4 LA HERENCIALa Herencia es el mecanismo por el que se crean nuevos objetos definidos en trminos deobjetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Ganso,que es una especializacin de Ave.

    class Ganso extends Ave {int numero_de_patas;

    }La palabra clave extends se usa para generar una subclase (especializacin) de un objeto. UnaGanso es una subclase de Ave. Cualquier cosa que contenga la definicin de Ave ser copiadaa la clase Ganso, adems, en Ganso se pueden definir sus propios mtodos y variables deinstancia. Se dice que Ganso deriva o hereda de Ave.Adems, se puede sustituir los mtodos proporcionados por la clase base. Utilizando nuestroanterior ejemplo de MiClase, un ejemplo de una clase derivada sustituyendo a la funcinSuma_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 la llamada 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 dela clase animal no se puede derivar nada, sera como obtener el objeto perro mecnico a partirde una mquina motorizada (aparato con motor) y un perro (animal). En realidad, lo que sepretende es copiar los mtodos, es decir, pasar la funcionalidad del perro de verdad al perromecnico, con lo cual no sera necesaria la herencia mltiple sino simplemente la comparticinde funcionalidad que se encuentra implementada en Java a travs de interfaces.9.5 EL CONTROL DE ACCESOCuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quierepara las variables de instancia y los mtodos definidos en la clase:

    publicpublic void CualquieraPuedeAcceder(){}Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instanciapblicos.protectedprotected void SoloSubClases(){}Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de

    instancia protegidos.privateprivate String NumeroDelCarnetDeIdentidad;Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro dela clase. No son 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 sedeclaran friendly (amigas), o sea que son accesibles por todos los objetos dentro delmismo 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 enC++, y tambin, en Java, por los paquetes (packages). Todas las clases de un paquete

    pueden ver los mtodos protegidos de ese paquete. Para evitarlo, se deben declarar comoprivate protected, lo que hace que ya funcione como en C++ en donde slo se puedeacceder a las variables y mtodos protegidos de las clases derivadas.

  • 7/23/2019 Monografia Lenguaje Java

    18/56

    9.6 LAS VARIABLES Y LOS METODOS ESTADISTICOSEn un momento determinado se puede querer crear una clase en la que el valor de unavariable de instancia sea el mismo (y que sea la misma variable) para todos los objetosinstanciados a partir de esa clase. Es decir, que exista una nica copia de la variable deinstancia. Se usar para ello la palabra clave static.

    class Documento extends Pagina {

    static int version = 10;}

    El valor de la variable versin ser el mismo para cualquier objeto instanciado de la claseDocumento. Siempre que un objeto instanciado de Documento cambie la variable versin, stacambiar para todos los objetos.De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodopueda acceder 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 unade las reglas de acceso al intentar acceder desde un mtodo esttico a una variable noesttica.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.Las funciones 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, nose podra acceder a var, porque al utilizar un puntero a funcin no se pasa implcitamente elpuntero al propio objeto (this). Sin embargo, s se podra acceder a var si fuese esttica,

    porque siempre estara en la misma posicin de memoria para todos los objetos que secreasen de UnaClase.9.7 LAS INTERFACESLos mtodos abstractos son tiles cuando se quiere que cada implementacin de la claseparezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los mtodosabstractos.Las interfaces proporcionan un mecanismo para abstraer los mtodos a un nivel superior.Una interface contiene una coleccin de mtodos que se implementan en otro lugar. Losmtodos de una clase son public, static y final.La principal diferencia entre interface y abstract es que una interface proporciona un

    mecanismo de encapsulacin de los protocolos de los mtodos sin forzar al usuario a utilizar laherencia.Por ejemplo:

  • 7/23/2019 Monografia Lenguaje Java

    19/56

    public interface VideoClip {// comienza la reproduccion del videovoid play();

    // reproduce el clip en un buclevoid bucle();

    // detiene la reproduccionvoid stop();

    }Las clases que quieran utilizar la interface VideoClip utilizarn la palabra implements yproporcionarn el cdigo necesario para implementar los mtodos que se han definido para lainterface:

    class MiClase implements VideoClip {void play() {

    }

    void bucle() {}

    void stop() {

    }Al utilizar implements para la interface es como si se hiciese una accin de copiar-y-pegar delcdigo de la interface, con lo cual no se hereda nada, solamente se pueden usar los mtodos.La ventaja principal del uso de interfaces es que una clase interface puede ser implementadapor cualquier nmero de clases, permitiendo a cada clase compartir la interfaz deprogramacin sin tener que ser consciente de la implementacin que hagan las otras clasesque implementen la interface.

    class MiOtraClase implements VideoClip {void play() {

    }

    void bucle() {}

    void stop() {}

    10- 10- LA CREACIN DE APPLETS SENCILLOS

    Se incrustan en las paginas web

    Se cargan dinmicamente de la red

    Son programas, luego problema de seguridad: restricciones

    Un applet no puede cargar libreras o definir mtodos nativos (programas en

    C por ejemplo) Como norma general no puede leer ni escribir ficheros en el ordenador en

    que se ejecuta. Si es necesario, se pueden escribir en el HD del ordenador host. No puede conectarse por red excepto al host del cual se cargo el applet

    No puede ejecutar ningn programa en el ordenador local

    No pueden lanzar programas en el equipo local

    Se supone que hay seguridad total, pero un muy buen hacker podra

    ocasionar problemas. Un applet puede invocar mtodos de otros applets que residan en la misma

    pagina Los applets cargados desde el sistema local (desde un directorio definido en

    CLASSPATH) no tienen, por defecto, ninguna de las restricciones de los appletscargados desde la red

    Se pueden leer algunas caractersticas del sistema local;

  • 7/23/2019 Monografia Lenguaje Java

    20/56

    PermitidasKey Meaning"file.separator" File separator (for example, "/")"java.class.version" Java class version number"java.vendor" Java vendor-specific string"java.vendor.url" Java vendor URL"java.version" Java version number

    "line.separator" Line separator"os.arch" Operating system architecture"os.name" Operating system name"path.separator" Path separator (for example, ":")

    Ejemplo de uso: String s = System.getProperty("os.name");

    No permitidasKey Meaning"java.class.path" Java classpath"java.home" Java installation directory"user.dir" User's current working directory

    "user.home" User home directory"user.name" User account name

    Cada N crea un objeto de la clase SecurityManager

    Se puede definir que restricciones se le aplican al applet. Si se violan, se

    produce una excepcion, que el programador puede tratar. Algunos applets paran su ejecucin al salir de la pagina, pero otros

    continuan Subclase de java.applet.Applet: por tanto hereda los mtodos y clases para

    manipular grficos, sonidos, etc... PUBLIC class miclase extends java.applet.Applet: solo la clase principal debe ser

    pblica por fuerza A diferencia de las aplicaciones main(), applets son algo ms complicados. Fases

    en la vida de un applet;Public void init() {...}:

    Ocurre cuando se carga por 1 vez el applet o al recargar. Crea objetos,estado inicial, carga imgenes o fuentes. Solo ocurre 1 vez en la vida deun applet.Public void start() {...}:

    Despus de init o de stop: por ejemplo si vamos a otra pgina y despusvolvemos. Ocurre 1 o ms veces por tanto

    Public void Stop() {...}:

    Contrapartida de start(). Cuando el usuario deja una pagina, losthreads lanzados se siguen ejecutandoDestroy() {...}

    No es destruccin como en C++. Sirve para dejar bien atadas loscosas, p.ej. matar threads.Similar a finalize(), que es para objetos individuales. Destroy() soloen applets.

    Public void paint(Graphics g)

    Applet crea una ventana y pinta en ella: texto, lineas, imgenes

    Paint puede ocurrir cientos de veces: cada vez que se mueve el navegador

    Toma argumento g pasado por N automticamente

    Incluir import java.awt.Graphics

    Ejemplo1:// CicloVidaApplet.java

  • 7/23/2019 Monografia Lenguaje Java

    21/56

    import java.awt.Graphics;import java.applet.Applet;

    public class CicloVidaApplet extends Applet{int contadorInit = 0;int contadorStart = 0;

    int contadorPaint = 0;int contadorStop = 0;int contadorDestroy = 0;

    public void init() {contadorInit++;}public void start() {contadorStart++;}public void paint(Graphics g)

    {contadorPaint++;g.drawString("Contador Init: " + contadorInit, 25,25);g.drawString("Contador Start: " + contadorStart, 25,50);g.drawString("Contador Paint: " + contadorPaint, 25,75);

    g.drawString("Contador Stop: " + contadorStop, 25,100);g.drawString("Contador Destroy: " + contadorDestroy, 25,125);}

    public void stop() {contadorStop++;}public void destroy() {contadorDestroy++;}}

    Ejemplo2:// BuenDiaSeoraApplet.javaimport java.awt.Graphics;import java.awt.Font;import java.awt.Color;

    public class BuenDiaSeoraApplet extends java.applet.Applet{Font f = new Font("Arial", Font.BOLD, 36);

    public void paint(Graphics g){g.setFont(f);g.setColor(Color.red);g.drawString("Buen dia seora",5,50);

    }}Crear BuenDiaSeoraApplet.HTML:

    En el applet Java: No hay init(), start(), destroy() sobreescritos.

    36 es el tamao

    posicion (x=5, y=50). El origen (0,0) es la esquina superior izquierda.

    Probar a cortar el texto No funciona. Hay que salir de N y volver a entrar

    Desactivando cach, tampoco funciona.

  • 7/23/2019 Monografia Lenguaje Java

    22/56

    En el HTML: Ejemplo anterior es el ms sencillo posible.

    El tag : extensin del lenguaje HTML para applets

    CODE es un atributo, el nombre del fichero class.

    El class debe estar en el mismo directorio. Para directorio especifico, CODEBASE

    (m tarde) WIDTH, HEIGTH son obligatorios. Dimensiones de la caja de applet. Si pequea,

    se recorta. Cerrar con

    Opcionalmente lnea siguiente a para N no Java ("Debera aparecer

    aqu un applet si el navegador es compatible con Java") Ms sobre el tag . Otros atributos;

    Texto alternativo

    * Parmetros: en aplicaciones, lnea de comandos iba a args[] en main().

    Applets no tiene lnea de comandos. Para pasarlos en applets se necesitan dos cosas; un tag especial en el HTML

    cdigo en el applet .java para recoger los parmetros

    Ej:

    yString nombreDeLaFuente = getParameter("fuente");Proteccion: se aade a continuacin;If(nombreDelaFuente == null)nombreDeLaFuente == "Courier";

    Los parmetros son siempre Strings. Si necesario valor numrico,

    tendremos que convertirEj:

    yint tamaoDeLetra;String tam = getParameter("tamao");

    If (tam == null)tamaoDeLetra = 20;}else tamaoDeLetra = Integer.parseInt(tam);

  • 7/23/2019 Monografia Lenguaje Java

    23/56

    // OtroBuenDiaSeoraApplet.javaimport java.awt.Graphics;import java.awt.Font;import java.awt.Color;

    public class OtroBuenDiaSeoraApplet extendsjava.applet.Applet

    {Font f = new Font("Arial", Font.BOLD, 36);String nombre; // nuevo

    // nuevopublic void init()

    {nombre = getParameter("Nombre");if (nombre == null) nombre = "Maurito";nombre = "Hola" + nombre + "!!!";}

    //

    public void paint(Graphics g){g.setFont(f);g.setColor(Color.red);g.drawString("Buen dia seora",5,50);}

    }

    Si se sumara "Hola " + etc... en paint, seria menos eficiente. En init(),solo se ejecuta 1 vez.

    Usar applets pblicos:

    O los cargamos localmente (dificultad: hay que bajar todas las clases,

    imgenes, sonidos, en misma jerarqua de directorios) O llamamos a la clase principal con su URL en CODE

    Las restricciones de seguridad:

    Son tan severas que los applets no pueden hacer nada demasiado serio sinautorizacin expresa (escribir, leer de disco, base de datos, procesador detextos). Al menos manteniendo la seguridad al 100%.

    11- 11- GRAFICOS, TEXTO Y SONIDO

    Grficos: coordenadas, lneas, puntos, crculos, valos, polgonoso imgenes GIF Texto: fuentes, tamaos

    Color: de fondo, de dibujo

    Grficos

    Lneas: g.drawline(10,10,50,50)Rectngulos:

    Cuadrados

    Esquinas redondeadas

    Con efecto 3D: borde en relieve

    Ej:

    g.drawRect(x,y,ancho,altura)g.fillRect(20,20,80,80)g.drawRoundRect(a,b,c,d,E,F) (ver p15121days)

  • 7/23/2019 Monografia Lenguaje Java

    24/56

    g.fillRoundRect(...)g.draw3Drect(20,20,60,60,true);

    Poligonos:

    Ej:

    int listaCoordX[] = {0,10,20,10,50,0};

    int listaCoordY[] = {0,20,30,60,40,0};int numeroPuntosPoligono = listaCoordX.length;g.drawPolygon(listaCoordX,listaCoordY,numeroPuntosPoligono);

    Con objetos;

    int listaCoordX[] = {0,10,20,10,50,0};int listaCoordY[] = {0,20,30,60,40,0};int numeroPuntosPoligono = listaCoordX.length;Polygon poligono = new Polygon(listaCoordX,listaCoordY,numeroPuntosPoligono);

    g.drawPolygon(poligono);// poligono.addPoint(20,30);// boolean estaDentro = poligono.contains(x,y);

    Ovalos: g.drawOval(a,b,c,d)

    Arcos: g.drawArc(a,b,c,d,e,f,g)

    Copiando reas de la pantalla

    g.copyAerea(origenX,origenY,ancho,altura,destinoX,destinoY)

    // Borrar un area. Se rellena con el color de fondo// Para borrar todo el applet;

    g.clearRect(0,0,size().width,size().heigth)// size() devuelve un objeto Dimension

    Texto y fuentes

    Clases Font y FontMetrics

    public Font(String nombre, int estilo, int tamao)

    Estilos; PLAIN, BOLD(negrita), ITALIC, BOLD+ITALICEj:

    Font f = new Font("Helvetica", Font.BOLD, 14);// Font f = new Font("Helvetica", Font.BOLD + Font.ITALIC, 14);g.setFont(f);g.drawString("Texto en Helvetica y negrita", 10, 10); public FontMetrics(Font fuente)

    Permite centrar un texto. Da medidas de las letras, ancho, distancia a la base,etc...

    Color

    De 24 bits. 3 componentes, espacio RGB

    0,0,0 es negro

    255,0,0 es rojo

    255,255,255 es blanco

    etc...

    colores predefinidos como constantes:

    Color.white, Color.yellow, Color.lightGray,etc..

    Ej:Color miColor = new Color(130,124,31);g.setColor(miColor); // empieza a dibujar con el nuevo color

  • 7/23/2019 Monografia Lenguaje Java

    25/56

    setBackground(Color.blue); // cambia el color de fondo del appletsetForegrounf(Color.black(; // cambia de golpe el color de todo lo dibujado

    // CajasDeColores.java

    import java.awt.Graphics;import java.awt.Color;

    public class CajasDeColores extends java.applet.Applet{public void paint(Graphics g)

    {int rojo,verde,azul;for (int j = 30; j < (size().height - 25); j += 30)

    {for (int i = 5; i < (size().width - 25); i += 30)

    {rojo = (int) Math.floor(Math.random() * 256);verde = (int) Math.floor(Math.random() * 256);

    azul = (int) Math.floor(Math.random() * 256);

    g.setColor(new Color(rojo,verde,azul));g.fillRect(i,j,25,25);g.setColor(Color.black);g.drawRect(i-1, j-1, 25, 25);}

    }}

    } Imgenes: clase Image, mtodo drawImage()

    // PintaFoto.javaimport java.applet.Applet;import java.awt.Graphics;import java.awt.Image;public class PintaFoto extends Applet{Image imagen;public void init()

    {imagen = getImage(getCodeBase(), "orb.gif"); //poner orb.gifen el directorio java !!}

    public void paint(Graphics g){int alturaImagen = imagen.getHeight(this);int anchuraImagen = imagen.getWidth(this);

    g.drawImage(imagen, 0, 0, this);g.drawImage(imagen, anchoImagen,0,anchoImagen/2,alturaImagen*2, this); // dibuja la imagen deformada}

    } Sonido (p209 21days)

    Java tiene soporte para reproducir el formato .AU de Sun.

    Solo en applets

    En aplicaciones, se puede recurrir a una clase no documentada, sun.audio

    Las clases que comienzan por sun.XXX incluyen funciones que aun no se han

    estandarizado, pero que se prev lo hagan en un futuro prximo. Pasar de

  • 7/23/2019 Monografia Lenguaje Java

    26/56

    sun.audio a java.audio. De cualquier forma, no es recomendable utilizarla, cuestinde asegurar compatibilidad.

    AU esta comprimido, pero calidad mediocre

    mtodo play(URL)

    Ej:

    play(getCodeBase(), "audio/guitarra.au");

    // SonidoApplet.java

    public class SonidoApplet extends java.applet.Applet{public void init()

    {play(getCodeBase(), "yahoo1.au"); // poner yahoo1.au en dir

    java!}

    } Comienza en cuanto carga el sonido

    Si no lo encuentra, no da error. No har nada.

    Para lanzar sonidos que se repitan constantemente; AudioClipEj:import java.applet.AudioClip;

    AudioClip clip = getAudioClip(getCodeBase(), "audio/ruidoDeFondo.au");clip.play(); // suena solo una vezclip.loop(); // suena indefinidamenteclip.stop(); // obliga a que se pare AudioClip no para de sonar aunque cambiemos de pgina. Por tanto, se suele

    implementar clip.stop() en el mtodo stop() del applet.Ej:

    // SonidoApplet.java

    import java.applet.AudioClip;

    public class SonidoApplet extends java.applet.Applet{AudioClip sonido;

    public void init(){sonido = getAudioClip(getCodeBase(), "yahoo1.au");}

    public void start(){sonido.loop();}

    public void stop(){sonido.stop();}

    }

    Ejemplos extrados de: www.monografias.com/trabajos/java/java.shtml

  • 7/23/2019 Monografia Lenguaje Java

    27/56

    12- ANIMACIONES SIMPLES Y MULTITHREADING

    Se puede hablar de dos tipos: Animacin de tipo dibujos animados: presentar una sucesin rpida de

    Imagenes precargadas GIF o JPEG (p205 21days) Animacin dibujada en tiempo real; veamos

    Un ejemplo que NO funciona (no aparece nada en pantalla);

    // MalRelojDigitalApplet.java

    import java.awt.Graphics;import java.awt.Font;import java.util.Date;

    public class MalRelojDigitalApplet extends java.applet.Applet{Font fuente = new Font("TimesRoman", Font.BOLD, 24);Date fecha;

    public void start(){while (true)

    {fecha = new Date();repaint();try

    {Thread.sleep(10000);} catch(InterruptedException e){;}

    }

    }

    public void paint(Graphics g){g.setFont(fuente);g.drawString(fecha.toString(), 10, 50);}

    } Porqu no funciona?: paint nunca se ejecuta ya que el bucle while

    monopoliza la ejecucin. Cmo debe hacerse para que funcione: usando Threads

    Ej:

    // BienRelojDigitalApplet.java

    import java.awt.Graphics;import java.awt.Font;import java.util.Date;

    public class BienRelojDigitalApplet extends java.applet.Appletimplements Runnable //cambio{Font fuente = new Font("TimesRoman", Font.BOLD, 24);Date fecha;Thread runner; //cambio

  • 7/23/2019 Monografia Lenguaje Java

    28/56

    //cambiopublic void start()

    {if (runner == null)

    {runner = new Thread(this);runner.start();

    }else

    {System.out.println("Stop");}

    }

    //cambiopublic void stop()

    {

    if (runner != null){runner.stop();runner = null;}

    else{System.out.println("Stop");}

    }

    //cambiopublic void run()

    {while (true)

    {fecha = new Date();repaint();try

    {Thread.sleep(1000);} catch(InterruptedException e){;}

    }

    }

    public void paint(Graphics g){

    {g.setFont(fuente);g.drawString(fecha.toString(), 10, 50);}

    }}

    El problema del parpadeo: el programa anterior funciona, pero se aprecia un

    parpadeo molesto cada 3 o 4 segundos Porqu aparece parpadeo:

  • 7/23/2019 Monografia Lenguaje Java

    29/56

    (las imagenes son demasiado grandes. Con pequeos cuadros es

    inapreciable el parpadeo) repaint() llama al mtodo update()

    update() borra la pantalla por completo y la rellena con el color de

    fondo. Despus llama a paint()

    public void update(Graphics g)

    {g.setColor(getBackground());g.fillRect(0,0,width,height);g.setColor(getForeground());paint(g);}

    paint() escribe el nuevo pantallazo

    Es la llamada a update() la que produce el parpadeo.

    Soluciones posibles

    1- 1- Sobreescribir update() para que no borre la pantalla o que solo borreuna cierta rea

    2- 2- Clipping: re-dibujar solo aquello que cambia. Metodo clipRect() de la

    clase Graphics3- 3- Doble-buffering: hacer los cambios en una pantalla virtual y volcar el

    resultado a la pantalla real. Es el mtodo ms complicado...Ejemplo extrado de: www.monografias.com/trabajos/java/java.shtml

  • 7/23/2019 Monografia Lenguaje Java

    30/56

    13- 13- LOS EVENTOS Y RESPUESTA AL USUARIO

    Los eventos son una parte del paquete AWT

    Un evento es aparece cuando hay interaccin con el usuario. Ejemplos de

    eventos;Se pulsa el botn del mouse (Java no se distingue entre botn izquierdo y

    derecho, por un problema de compatibilidad entre plataformas. En MacIntosh elmouse es de 1 solo botn)Se arrastra con el mouseSe maximiza o minimiza una ventanaSe pulsa una teclaetc...

    Eventos de mouse

    Ej:

    // PosicionDeClickApplet.java

    import java.awt.Event;

    import java.awt.Graphics;

    public class PosicionDeClickApplet extends java.applet.Applet{int x,y;

    //Point ultimo = null;//Point nuevo = null;

    public void paint(Graphics g){if ( x*y != 0)

    {

    g.drawString("Has hecho CLICK en x = " + x +" , y = " + y,0,10);g.fillOval(x,y,10,10);}

    }

    public boolean mouseDown(Event evt, int x,int y){this.x = x;this.y = y;System.out.println("Has hecho CLICK en x = " + x +" , y = " + y);repaint();return true;}

    } Variacin en el ejemplo anterior: cambiar mouseDown() por mouseMove()

    Si se cliquea y arrastra no lo detecta: habra que usar mouseDrag()

    mouseEnter() y mouseExit()

    Ej:

    public boolean mouseEnter(Event evt, int x, int y){setBackground(java.awt.Color.blue);repaint();return true;}

  • 7/23/2019 Monografia Lenguaje Java

    31/56

    public boolean mouseExit(Event evt, int x, int y){setBackground(java,awt.Color.red);repaint();return true; }

    Eventos de tecladokeyDown(Event evt, int key)keyUp(Event evt, int key)Modificadores: la clase Event tiene 3 mtodos para controlar si se ha pulsadouna tecla modificadora junto con el propio evento. Devuelven un booleanoEvent.shiftDown()Event.metaDown() (?) (un metakey parece ser algo popular en Unix,tipicamente corresponde a Alt, pero no se aconseja en beneficio de Control yShift)Event.controlDown()

    Ej:

    public boolean mouseDown(Event evt, int x, int y){if (evt.shiftDown()) {// tratar el evento shift+click}else {// tratar el evento click simple}}

    El manejador de eventos (AWT Event Handler)

    Hay muchos ms eventos, relacionados con el AWT

    Interfaz grfica de usuario (AWT)AWT = Abstract Windowing ToolkitPermite crear entornos grficos de ventanas, a la manera de WindowsAspecto similar en varias plataformasSe han utilizado elementos comunes a todas las plataformas: barras deslizantes,

    botones, mens desplegables, etc.

    1. Controles bsicos Button

    Chekboxes

    Choice

    List

    Menu

    Text Field

    2. Otros controles Slider

    Scrollbar

    Text Area Canvas

    Label

    Panel

    Scroll Pane

    14- 14- CONCEPTO DE JERARQUIA DE COMPONENTES DEL PROGRAMA

    Una interfaz grafica lleva asociada una jerarqua (rbol)

    P.ej.: las opciones de un men son hijas del men, que a su vez es hijo de

    la ventana en la que aparece, que a su vez es hijo del applet, etc. Al [re]dibujar la interfaz, se hace siguiendo la jerarqua, de arriba a abajo.

    Demasiado rpido para verse a simple vista.

  • 7/23/2019 Monografia Lenguaje Java

    32/56

    15- COMO USAR LABELS

    // EjemploLabelApplet.java

    import java.awt.*;

    public class EjemploLabelApplet extends java.applet.Applet

    {public void init()

    {Label etiqueta1 = new Label("Label1");Label etiqueta2 = new Label("Label2");Label etiqueta3 = new Label("Label3");

    add(etiqueta1);add(etiqueta2);add(etiqueta3);}

    }

    16- COMO USAR BUTTONS

    //EjemploButtonApplet.javaimport java.awt.*;

    public class EjemploButtonApplet extends java.applet.Applet{public void init()

    {Label etiqueta1 = new Label("Label1");Button boton1 = new Button("Boton 1");Button boton2 = new Button("Boton 2");

    add(boton1);add(etiqueta1);add(boton2);}

    }Probar a cambiar las dimensiones de la ventana de appletviewer: la disposicinde los elementos es automtica.

    17- COMO USAR CHECKBOXES

    // EjemploAWTApplet.java

    ...add(new Checkbox("Concordia"));add(new Checkbox("Rosario", null, true));add(new Checkbox("Chaco"));add(new Checkbox("Catamarca"));...

    Metodos tiles:setState() //consulta el estado del checkboxsetState() //altera el estado del checkbox

    etc... RadioButton

  • 7/23/2019 Monografia Lenguaje Java

    33/56

    Son un caso especial de Checkbox: solo 1 puede estar activo en su

    grupo, como los botones de una radio, que saltan al cambiarlos. Hay que crear el CheckboxGroup

    ...CheckboxGroup cbg = new CheckboxGroup();add(new Checkbox("Rojo", cbg, false));

    add(new Checkbox("Azul", cbg, false));add(new Checkbox("Verde", cbg, true));add(new Checkbox("Negro", cbg, false));...Ejemplos extraidos de: htpp//:arcoinf.uc3m.esp/yy_pstr

    18- 18- COMO USAR CHOICE MENU

    Un men Choice es desplegable.Permite seleccionar un item del men

    ...

    Choice c = new Choice(); // crea el menu desplegablec.addItem("Naranja");c.addItem("Manzana");c.addItem("Pera");add(c); // aade el menu al panel...Mtodos tiles:

    getItem(int n) devuelve el string de la opcion n-esimagetSelectedIndex() devuelve el ndice de la opcin seleccionada

    //Este tipo de mens solo permiten seleccionar una opcin. Para mltiples opciones, usaruna lista

    19- COMO USAR TEXTFIELDS

    Permite al usuario introducir texto

    ...add(new Label("Nombre completo"));add(new TextField("-escriba aqu su nombre-"));add(new Label("Telefono"));add(new TextField(12));add(new Label("Password"));TextField t = new TextField(20);t.setEchoCharacter('*');add(t);...Metodos tiles:

    setEditable(boolean) define si el testo es editable o noselect(int, int) selecciona el texto entre las dos posiciones (origen = 0)etc.

    20- COMO USAR TEXTAREA

    Es un componente similar a TextField.TextField es ms conveniente para pequeos textos, idealmente de una solalinea. No tiene barras de deslizamiento

    TextArea en ms conveniente para textos largos, de ms de una linea.

    Por defecto, tiene barras de deslizamiento...String texto = "Erase una vez un bosque en el que vivan siete enanitos que eran\n" +

  • 7/23/2019 Monografia Lenguaje Java

    34/56

    "hermanos. Decidieron construirse una casa, y vivir en el bosque\n" +"ellos trabajaban todo el dia, Blancanieves cocinaba y limpiaba la casa\n" +"Un buen dia apareci por all la malvada bruja y blablabla...";

    // el carcter \n es para forzar el retorno de lneaadd(new TextArea(texto, 10, 60));...Metodos tiles:

    insertText(String, int) // inserta texto en la posicion indicadareplaceText(String, int,int) // reemplaza el texto entre las posiciones dadasetc.

    21- 21- COMO USAR FRAMES Y DIALOGS

    La clase Window de AWT permite crear ventanas independientes del navegadorque contiene al applet. Frame es ms potente que DialogEl LayoutManager por defecto para Frame es BorderLayoutLos Dialog son ventanas emergentes pensadas para mensajes no permanentes,como ADVERTENCIA, peticion de informacin especifica, etc, que una vez

    presentados al usuario pueden desaparecer (p.ej.: Se va a proceder a lainstalacin de HyperQuake V. Confirmar?)Se puede forzar a que sean no redimensionables o modalesUn Dialog modal es aquel que impide usar otra ventana hasta que no se lleve acabo la accin de la presente ventana (p.ej.: Es necesario que introduzca laclave de acceso para continuar la ejecucion)A su vez existen dos clases de Dialog:

    Dialog (a secas!)

    FileDialog:

    Presenta los ficheros del directorio, abrir, cancelar, etc.

    Debido a las restricciones de los applets, tiene muchas

    ms funcionalidades si se emplea en una aplicacin Java

    ...// Ejemplo de utilizacin de FrameFrame ventanaFrame = new Frame("Mi ventana FRAME");ventanaFrame.setLayout(new FlowLayout()); //por defecto es BorderLayoutventanaFrame.add(new Button("Opcion 1"));ventanaFrame.add(new Button("Opcion 2"));ventanaFrame.add(new Button("Opcion 3"));ventanaFrame.resize(100,150); //define el tamao de la ventanaPoint dim = location(); //devuelve la posicion de este componente, como la esquina sup-izda

    //medida respecto al componente padre

    ventanaFrame.move(dim.x + 50, dim.y + 50);ventanaFrame.show(); //cuando se crea la ventana, es invisible. Para ocultarla, hide()22- COMO USAR LIST

    Son mens, pero no desplegablesEs una lista de tems en la que se puede elegir uno o variosSi el numero de tems es mayor que la longitud de la lista, aparecen barras dedeslizamiento

    ...List lista = new List(5, true); // crea una lista que tendra 5 lneas, y que permitir

    // seleccion multiple (valor 'true')lista.addItem("Marte");lista.addItem("Saturno");lista.addItem("Pluton");

  • 7/23/2019 Monografia Lenguaje Java

    35/56

    lista.addItem("Urano");lista.addItem("Jupiter"); // si se aade un sexto elemento, se creara automaticamente

    // una barra deslizanteadd(lista);...Mtodos utiles:

    getSelectedIndex() // devuelve el indice del item seleccionado, si no se permite

    seleccion mult.getSlectedIndexes() // devuelve un array de indices de los items seleccionadosgetSelectedItem() // devuelve el item seleccionadogetSlectedItems() // idem varios itemsselect(int) // fuerza a que est seleccionado el item de la posicin dadaetc.

    23- 23- COMO USAR SCROLLBARS

    Los componentes TextArea y TextField vienen con sus propias barrasdeslizantes. Pero tambin se pueden crear barras deslizantes independientes,tpicamente para manipular rangos de valores entre un mximo y un mnimo.

    Para variar el valor asociado, hay tres formas:Cliquear las flechas de los extremos. Variacin unitaria.Cliquear en la barra. Variacion en saltos, 10 por defecto.Cliquear y arrastar el elevador.

    ...Scrollbar barraDeslizante = new Scrollbar(Scrollbar.HORIZONTAL);add(barraDeslizante);...

    // constructor ms general:// Scrollbar(int orientacion, int valorInicial, int anchura, int valorMinimo, int valorMaximo);...Mtodos utiles:

    getValue() // Devuelve el valor actual de la barrasetValue() // Asigna un valor a la barra

    Ejemplos extrado de: htpp//:arcoinf.uc3m.esp/yy_pstr

    24- 24- COMO USAR CANVAS

    Un componente Canvas es un objeto que permite dibujar en l.No hace nada por s mismo. Esta pensado para ser extendido por herencia.

    Canvas can = new Canvas();add(can);

    25- 25- COMO USAR PANELS

    Es un tipo de ContainerPermite definir un rea en la cual incluir otros componentes, incluidos otrosPanels (paneles anidados). De esta forma los componentes se agrupan, dandoun aspecto ordenado al conjunto de la interfaz grfica. Para que esta ordenacinsea eficaz, hay que usar Panel en un componente que tenga bien definida ladisposicin mediante un LayoutManager (se ve ms adelante).

    Panel unPanel = new Panel();unPanel.add(new Label("Arriba"));

    unPanel.add(new Label("Abajo"));add(unPanel);

  • 7/23/2019 Monografia Lenguaje Java

    36/56

    26- 26- COMO USAR SCROLL PANES

    Define un rea para mostrar un solo componente con barras deslizantes.La utilizacin tpica es la de visualizar una imagen dentro del ScrollPane.Si la imagen es mayor que el arrea del ScrollPane, este crea automticamentelas barras deslizantes necesarias.

    Se puede forzar que no haya barras.

    NOTA: utilizar ScrollPane es un poco ms complicado que los componentes anteriores. Eneste ejemplo se ha tenido que definir una clase aparte, que hereda de Canvas, eimplementar varios Metodos para que la imagen aparezca con un tamao adecuado

    Image foto = getImage(getCodeBase(), "orb.gif");ScrollableCanvas sCanvas = new ScrollableCanvas(foto);ScrollPane sPane = new ScrollPane();sPane.add(sCanvas);add(sCanvas);

    // Ahora viene la clase que hemos definido (se pueden incluir varias clases en un mismofichero siempre que solo haya una de ellas con el atributo publicclass ScrollableCanvas extends Canvas{Dimension preferredSize;Dimension minimumSize;Image imagen;

    // Constructor de la clase ScrollableCanvas (definida por nosotros !)public ScrollableCanvas(Image imagen)

    {this.imagen = imagen;preferredSize = new Dimension(600, 320);minimumSize = new Dimension(10, 10);}

    public Dimension getMinimumSize()

    {return minimumSize;}

    public Dimension getPreferredSize()

    {return preferredSize;}

    public void paint(Graphics g)

    {g.drawImage(imagen, 0, 0, getBackground(), this);}

    }

    Ejemplos extraidos de: htpp//:arcoinf.uc3m.esp/yy_pstr

  • 7/23/2019 Monografia Lenguaje Java

    37/56

    27- 27- OTROS COMPONENTES

    MenuShortcut: asocia una combinacin de teclas para activar una opcin demenu (p.ej.:Control-S para grabar archivo)PopupMenu: menu flotante

    28- 28- LAYOUTMANAGERLa disposicin de componentes en un panel depende del Layout Managerestablecido y del orden en que se van aadiendo los componentes con add().Cada Panel puede tener su propio LM, incluso si se anidan paneles.El AWT tiene los siguientes LM:

    FlowLayoutGridLayoutGridBagLayoutBorderLayoutCardLayoutLayout hecho a medida por el usuario

    Sin Layout: posicionamiento absoluto de los componentes No es recomendable usarlo, porque las coordenadas de

    pantalla dependen de la plataforma, y esto va en contra de lafilosofa Java de hacer programas portables

    En un sistema puede quedar perfecto y otro ser un

    completo desastre. FlowLayout

    Es la clase ms sencilla. Simplemente se van aadiendo los componentes unodetrs de otro, en lnea. Si no caben en una lnea, se pasa a la siguiente.Es el LM por defecto.

    setLayout(new FlowLayout());setLayout(new FlowLayout(FlowLayout.LEFT), 10, 10); // alineacion izquierda, con

    distancias de 10 pixeles en horizontal y vertical GridLayout

    Dividen la superficie del panel en filas y columnas. Al aadir componentes con add(), estos se distribuyen por las celdas

    Panel panelGridLayout = new Panel();panelGridLayout.setLayout(new GridLayout(3,3)); // Layout de 3 filas y 3 columnaspa.nelGridLayout.add(etiqueta1);panelGridLayout.add(boton1);panelGridLayout.add(boton2);

    panelGridLayout.add(boton3);add(panelGridLayout);

    Otro constructor:public GridLayout(int rows, int columns, int horizontalGap, int verticalGap) // define tambien laseparacin entre celdas, en pixels

    GridBagLayout

    Es el LM ms complejo y potente.Permite definir celdas, pero de distinto tamaoTambien se puede definir el comportamiento de las celdas al variar el tamao dela ventana que los contiene (ver GridBagConstraints): se mantiene su tamao,utilizan el nuevo espacio disponible, etc.

    BorderLayout

  • 7/23/2019 Monografia Lenguaje Java

    38/56

    Se indica la posicion geogrfica del componente: norte, sur, este, oeste ocentro.

    Panel panelBorderLayout = new Panel();panelBorderLayout.setLayout(new BorderLayout(5,5));panelBorderLayout.add("Center", etiqueta1);

    panelBorderLayout.add("North", boton1);panelBorderLayout.add("East", boton2);panelBorderLayout.add("West", boton3);panelBorderLayout.add("South", boton4);add(panelBorderLayout);

    CardLayout

    Esta clase se usa para hacer slide show, es decir una sucesin de tarjetas enpantalla.Los paneles se presentan uno cada vez.

    ...Panel panelCardLayout = new Panel();panelCardLayout.setLayout(new CardLayout());panelCardLayout.add("primero", new Button("Boton 14"));panelCardLayout.add("segundo", new Button("Boton 15"));panelCardLayout.add("tercero", new Button("Boton 16"));panelCardLayout.add("cuarto", new Button("Boton 17"));((CardLayout)panelCardLayout.getLayout()).show(panelCardLayout, "tercero"); //complicadillo...add(panelCardLayout);

    Metodos utiles:

    public void first(Container parent)public void next(Container parent)public void previous(Container parent)public void last(Container parent)

    Sin LayoutManager

    Para hacer posicionamiento absoluto, se declara hace:

    setLayout(null) Insets

    Definen un espacio de marco del panel.

    Se pueden asignar anchos independientes a los 4 lados

    public Insets insets(){return new Insets(10,10,10,10); // 10 pixels en los 4 lados}

  • 7/23/2019 Monografia Lenguaje Java

    39/56

    29- 29- EL CONTROL DE EVENTOS (EVENT HANDLING)

    Los componentes que hemos usado hasta ahora no hacen nada.

    En realidad, generan un evento, que hay que recoger e interpretar para

    asociarlo a una accin. Situaciones que generan eventos;

    Pulsar una tecla

    Ampliar una ventanaPulsar Return en una entrada de textoMover el mouseHacer click con el mouseetc.y en general cualquier cosa que haga el usuario

    En JDK1.0.x, los eventos se pasan hacia arriba en la jerarqua de componentes

    hasta que un objeto responde al evento En JDK1.1.x, los eventos se envan a objetos que estn registrados como

    escuchadores de eventos (event listeners) Eventos en JDK1.0.x

    Usa un mecanismo que ha quedado obsoleto. No se recomienda su uso. La

    version JDK1.1.x conserva el mecanismo antiguo para asegurar la compatibilidad,pero define uno nuevo, cuyo uso se recomienda.

    El compilador devuelve deprecated si se usan los Metodos del antiguo, pero

    no da error. El gestionador de eventos de cada componente puede reaccionar de alguna

    de las formas siguientes; Ignorando el evento y pasndolo al Componente superior en

    jerarqua. Es lo que se hace por defecto. Modificando el evento (que es un objeto) y pasndolo al nivel

    superior. P.ej.: un texto se convierte a maysculas y se pasa Reaccionando al evento y parando su propagacin hacia arriba. P.ej.:

    si se introduce un carcter no valido en un TextField, el evento no sepropaga, y los componentes superiores nunca lo vern

    Los objetos de la clase Event

    Cada evento produce la creacin de un objeto de la clase predefinida Event,que incluye la siguiente informacin;

    Tipo de evento: p.ej. pulsacin de tecla, Boton del mouse,

    apertura de ventana,... Objeto en el que se ha producido el evento: p.ej. Boton,

    ventana, textField,... Tiempo en que se produjo el evento

    Posicion (x,y) en que se produjo, relativo al origen del

    componente.

    Para eventos de teclado, la tecla pulsada y el estado de losmodificadores Shift, Alt, Ctrl Un argumento arbitrario, como un String

    etc.

    action() (Event.ACTION_EVENT) // solo lo producen los componentes bsicos:// Button, Checkbox, Choice, List, MenuItem, y TextFieldmouseEnter() (Event.MOUSE_ENTER)

    mouseExit() (Event.MOUSE_EXIT)mouseMove() (Event.MOUSE_MOVE)mouseDown() (Event.MOUSE_DOWN)

    mouseDrag() (Event.MOUSE_DRAG)mouseUp() (Event.MOUSE_UP)keyDown() (Event.KEY_PRESS or Event.KEY_ACTION)keyUp() (Event.KEY_RELEASE or Event.KEY_ACTION_RELEASE)

  • 7/23/2019 Monografia Lenguaje Java

    40/56

    gotFocus() (Event.GOT_FOCUS)lostFocus() (Event.LOST_FOCUS)handleEvent() (all event types)

    Ejemplo de programa que interpreta eventos a la manera de JDK1.0.x;

    // BotonesColoresApplet.java// EVENTOS JDK 1.0.x

    import java.awt.*;

    public class BotonesColoresApplet extends java.applet.Applet{TextArea areaTexto;Panel panel1;

    public void init(){setLayout(new BorderLayout());

    panel1 = new Panel();panel1.add(new Button("Rojo"));panel1.add(new Button("Azul"));panel1.add(new Button("Verde"));panel1.add(new Button("Amarillo"));

    areaTexto = new TextArea(15, 10);areaTexto.setEditable(false);

    add("North",panel1);add("South",areaTexto);}

    public boolean handleEvent(Event evt)

    {switch(evt.id)

    {case Event.ACTION_EVENT :

    if (evt.target instanceof Button){cambiaColor((String) evt.arg);}

    break;case Event.GOT_FOCUS:areaTexto.append("GOT_FOCUS \n");return true;

    case Event.LOST_FOCUS:

    areaTexto.append("LOST_FOCUS \n");return true;

    case Event.MOUSE_ENTER:

    areaTexto.append("MOUSE_ENTER, x=" + evt.x + " y=" + evt.y + "\n");return true;

  • 7/23/2019 Monografia Lenguaje Java

    41/56

    case Event.MOUSE_EXIT:

    areaTexto.append("MOUSE_EXIT, x=" + evt.x + " y=" + evt.y + "\n");return true;

    default:return false;

    }return true;}

    public void cambiaColor(String nombreColor){if (nombreColor.equals("Rojo")) areaTexto.setBackground(Color.red);else if (nombreColor.equals("Azul")) areaTexto.setBackground(Color.blue);else if (nombreColor.equals("Verde")) areaTexto.setBackgro