Java

99
 T utorial de Java 1. INTRODUCCIÓN A JAVA 1.1 Origen de Java Sun Microsystems, líder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo es "the network is the computer" (lo que quiere dar a entender que el verdader o ordenador es la red en su co nj unto y no cada máquina individual), es quien ha desarrollado el lenuaje !ava, en un intento de resolver simultáneamente todos los prolemas que se le plantean a los desarrolladores de so# tware por la pr oli#eraci$n de ar qui tect uras incompati les, tant o entre las di#erentes máquinas como entre los diversos sistemas operativos y sistemas de ventanas que #uncionaan sore una misma máquina, a%adiendo la di#icultad de crear aplicaciones distriuidas en una red como Internet& 'e podido leer más de cinco versiones distintas sore el ori en, concepci$n y desarrollo de !ava, desde la que dice que este #ue un proyecto que reot$ durante mucho tiempo por distin tos depart amentos de Sun sin que nadie le pres tar a ninuna atenci$n, hasta que #inalmente encontr$ su nicho de mercado en la aldea loal que es Internet hasta la más di#un dida, que justi#i ca a !ava como lenuaje de peque%os electrodomsticos& 'ace alunos a%os, Sun Microsystems decidi$ intentar introducirse en el mercado de la electr$nica de consumo y desarro llar proramas para peque%os disposit ivos electr$nicos& *ras unos comien+os dudosos, Sun decidi$ crear una #ilial, denominada irst-erson Inc&, para dar maren de maniora al equipo responsale del proyecto& .l mer cado inici almente prev ist o para los proramas de irst-erson eran los equipos domsticos/ mic roondas, tos tadoras y, #un damentalmente, tel evi si$n interactiva& .ste mercado, dada la #alta de pericia de los usuarios para el manejo de estos dispositivos, requería unos inter#aces mucho más c$modos e intuitivos que los sistemas de ventanas que proli#eraan en el momento& 0tros requisitos importantes a tener en cuenta eran la #iailidad del c$dio y la #acilidad de desarrollo& !ames 1oslin, el miemro del equipo con más e2periencia en lenuajes de proramaci$n, decidi$ que las ventajas aportadas por la e#iciencia de 344 no compensaan el ran coste de prueas y depuraci$n& 1oslin haía estado traajando en su tiempo lire en un lenuaje de proramaci$n que l haía llamado 0ak, el cual, a5n partiendo de la sinta2is de 344, intentaa remediar las de#iciencias que ia oservando& 6os lenuajes al uso, como 3 o 344, deen ser compilados para un chip, y si se camia el chip, todo el so#tware dee compilarse de nuevo& .sto encarece mucho los desarrollos y el prolema es especi alment e acusado en el campo de la electr$nica de consumo& 6a aparici$n de un chip más arato y, eneralmente, más e#iciente, conduce inmediatamente a los #aric antes a incluirlo en las nuevas 1

Transcript of Java

Page 1: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 1/98

  Tutorial de Java

1. INTRODUCCIÓN A JAVA

1.1 Origen de Java

Sun Microsystems, líder en servidores para Internet, uno de cuyos lemas desdehace mucho tiempo es "the network is the computer" (lo que quiere dar a entenderque el verdadero ordenador es la red en su conjunto y no cada máquinaindividual), es quien ha desarrollado el lenuaje !ava, en un intento de resolversimultáneamente todos los prolemas que se le plantean a los desarrolladores deso#tware por la proli#eraci$n de arquitecturas incompatiles, tanto entre lasdi#erentes máquinas como entre los diversos sistemas operativos y sistemas deventanas que #uncionaan sore una misma máquina, a%adiendo la di#icultad decrear aplicaciones distriuidas en una red como Internet&

'e podido leer más de cinco versiones distintas sore el orien, concepci$n ydesarrollo de !ava, desde la que dice que este #ue un proyecto que reot$ durantemucho tiempo por distintos departamentos de Sun sin que nadie le prestaraninuna atenci$n, hasta que #inalmente encontr$ su nicho de mercado en la aldealoal que es Internet hasta la más di#undida, que justi#ica a !ava como lenuajede peque%os electrodomsticos&

'ace alunos a%os, Sun Microsystems decidi$ intentar introducirse en el mercadode la electr$nica de consumo y desarrollar proramas para peque%os dispositivoselectr$nicos& *ras unos comien+os dudosos, Sun decidi$ crear una #ilial,denominada irst-erson Inc&, para dar maren de maniora al equipo responsaledel proyecto&

.l mercado inicialmente previsto para los proramas de irst-erson eran losequipos domsticos/ microondas, tostadoras y, #undamentalmente, televisi$ninteractiva& .ste mercado, dada la #alta de pericia de los usuarios para el manejode estos dispositivos, requería unos inter#aces mucho más c$modos e intuitivosque los sistemas de ventanas que proli#eraan en el momento&

0tros requisitos importantes a tener en cuenta eran la #iailidad del c$dio y la#acilidad de desarrollo& !ames 1oslin, el miemro del equipo con más e2perienciaen lenuajes de proramaci$n, decidi$ que las ventajas aportadas por la e#icienciade 344 no compensaan el ran coste de prueas y depuraci$n& 1oslin haíaestado traajando en su tiempo lire en un lenuaje de proramaci$n que l haíallamado 0ak, el cual, a5n partiendo de la sinta2is de 344, intentaa remediar lasde#iciencias que ia oservando&

6os lenuajes al uso, como 3 o 344, deen ser compilados para un chip, y si secamia el chip, todo el so#tware dee compilarse de nuevo& .sto encarece mucholos desarrollos y el prolema es especialmente acusado en el campo de laelectr$nica de consumo& 6a aparici$n de un chip más arato y, eneralmente, máse#iciente, conduce inmediatamente a los #aricantes a incluirlo en las nuevas

1

Page 2: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 2/98

  Tutorial de Java

series de sus cadenas de producci$n, por peque%a que sea la di#erencia en precioya que,multiplicada por la tirada masiva de los aparatos, supone un ahorro considerale&-or tanto, 1oslin decidi$ mejorar las características de 0ak y utili+arlo&

.l primer proyecto en que se aplic$ este lenuaje recii$ el nomre de proyecto

1reen y consistía en un sistema de control completo de los aparatos electr$nicos yel entorno de un hoar& -ara ello se construy$ un ordenador e2perimentaldenominado 78 (Star Seven)& .l sistema presentaa una inter#a+ asada en larepresentaci$n de la casa de #orma animada y el control se llevaa a caomediante una pantalla sensile al tacto& .n el sistema aparecía 9uke, la actual

mascota de !ava&

-osteriormente se aplic$ a otro proyecto denominado :09 (:ideo 0n 9emand) enel que se empleaa como inter#a+ para la televisi$n interactiva& ;inuno de estosproyectos se convirti$ nunca en un sistema comercial, pero #ueron desarrolladosenteramente en un !ava primitivo y #ueron como su autismo de #ueo&

2

Page 3: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 3/98

  Tutorial de Java

<na ve+ que en Sun se dieron cuenta de que a corto pla+o la televisi$n interactivano ia a ser un ran 2ito, urieron a irst-erson a desarrollar con rapide+ nuevasestrateias que produjeran ene#icios& ;o lo consiuieron y irst-erson cerr$ en laprimavera de =>>?&

-ese a lo que parecía ya un olvido de#initivo, @ill !oy, co#undador de Sun y uno delos desarrolladores principales del <ni2 de @erkeley, ju+$ que Internet podríallear a ser el campo de jueo adecuado para disputar a Microso#t su primacíacasi asoluta en el terreno del so#tware, y vio en 0ak el instrumento id$neo parallevar a cao estos planes& *ras un camio de nomre y modi#icaciones de dise%o,el lenuaje !ava #ue presentado en sociedad en aosto de =>>A&

6o mejor será hacer caso omiso de las historias que pretenden dar carta denaturale+a a la clarividencia industrial de sus protaonistas porque la cuesti$n essi independientemente de su orien y entorno comercial, !ava o#rece soluciones anuestras e2pectativas& -orque tampoco vamos a desechar la penicilina aunquehaya sido su orien #ruto de la casualidad&

1.2 Características de Java6as características principales que nos o#rece !ava respecto a cualquier otrolenuaje de proramaci$n, son/

Simple!ava o#rece toda la #uncionalidad de un lenuaje potente, pero sin lascaracterísticas menos usadas y más con#usas de stos& 344 es un lenuaje queadolece de #alta de seuridad, pero 3 y 344 son lenuajes más di#undidos, porello !ava se dise%$ para ser parecido a 344 y así #acilitar un rápido y #ácilaprendi+aje&!ava elimina muchas de las características de otros lenuajes como 344, paramantener reducidas las especi#icaciones del lenuaje y a%adir características muy5tiles como el arae collector (reciclador de memoria dinámica)& ;o esnecesario preocuparse de lierar memoria, el reciclador se encara de ello y comoes un thread de aja prioridad, cuando entra en acci$n, permite lierar loques dememoria muy randes, lo que reduce la #ramentaci$n de la memoria&

!ava reduce en un ABC los errores más comunes de proramaci$n con lenuajescomo 3 y 344 al eliminar muchas de las características de stos, entre las quedestacan/

aritmtica de punterosno e2isten re#erenciasreistros (struct)de#inici$n de tipos (typede#)macros (Dde#ine)necesidad de lierar memoria (#ree)

3

Page 4: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 4/98

  Tutorial de Java

 Eunque, en realidad, lo que hace es eliminar las palaras reservadas (struct,typede#), ya que las clases son alo parecido&

 Edemás, el intrprete completo de !ava que hay en este momento es muypeque%o, solamente ocupa F=A G de HEM&

Orientado a objetos!ava implementa la tecnoloía ásica de 344 con alunas mejoras y eliminaalunas cosas para mantener el ojetivo de la simplicidad del lenuaje& !avatraaja con sus datos como ojetos y con inter#aces a esos ojetos& Soporta lastres características propias del paradima de la orientaci$n a ojetos/encapsulaci$n, herencia y polimor#ismo& 6as plantillas de ojetos son llamadas,como en 344, clases y sus copias, instancias& .stas instancias, como en 344,necesitan ser construidas y destruidas en espacios de memoria&

!ava incorpora #uncionalidades ine2istentes en 344 como por ejemplo, laresoluci$n dinámica de mtodos& .sta característica deriva del lenuaje 0jective3, propietario del sistema operativo ;e2t& .n 344 se suele traajar con lireríasdinámicas (966s) que olian a recompilar la aplicaci$n cuando se retocan las#unciones que se encuentran en su interior& .ste inconveniente es resuelto por!ava mediante una inter#a+ especí#ica llamada H**I (Hun*ime *ype Identi#ication)que de#ine la interacci$n entre ojetos e2cluyendo variales de instancias oimplementaci$n de mtodos& 6as clases en !ava tienen una representaci$n en elruntime que permite a los proramadores interroar por el tipo de clase y enla+ardinámicamente la clase con el resultado de la 5squeda&

Distribuido!ava se ha construido con e2tensas capacidades de intercone2i$n *3-I-& .2istenlirerías de rutinas para acceder e interactuar con protocolos como http y #tp& .stopermite a los proramadores acceder a la in#ormaci$n a travs de la red con tanta#acilidad como a los #icheros locales&

6a verdad es que !ava en sí no es distriuido, sino que proporciona las lirerías yherramientas para que los proramas puedan ser distriuidos, es decir, que secorran en varias máquinas, interactuando&

Robusto!ava reali+a veri#icaciones en usca de prolemas tanto en tiempo de compilaci$ncomo en tiempo de ejecuci$n& 6a comproaci$n de tipos en !ava ayuda a detectarerrores, lo antes posile, en el ciclo de desarrollo& !ava olia a la declaraci$ne2plícita de mtodos, reduciendo así las posiilidades de error& Maneja la memoriapara eliminar las preocupaciones por parte del proramador de la lieraci$n ocorrupci$n de memoria&

*amin implementa los arrays autnticos, en ve+ de listas enla+adas de punteros,con comproaci$n de límites, para evitar la posiilidad de soreescriir ocorromper memoria resultado de punteros que se%alan a +onas equivocadas&

4

Page 5: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 5/98

  Tutorial de Java

.stas características reducen drásticamente el tiempo de desarrollo deaplicaciones en !ava&

 Edemás, para aseurar el #uncionamiento de la aplicaci$n, reali+a una veri#icaci$nde los yteJcodes, que son el resultado de la compilaci$n de un prorama !ava&

.s un c$dio de máquina virtual que es interpretado por el intrprete !ava& ;o esel c$dio máquina directamente entendile por el hardware, pero ya ha pasadotodas las #ases del compilador/ análisis de instrucciones, orden de operadores,etc&, y ya tiene enerada la pila de ejecuci$n de $rdenes&

Java proporciona, pes!

  3omproaci$n de punteros3omproaci$n de límites de arrays.2cepciones:eri#icaci$n de yteJcodes

 Arquitectura neutral -ara estalecer !ava como parte interal de la red, elcompilador !ava compila su c$dio a un #ichero ojetode #ormato independiente de la arquitectura de lamáquina en que se ejecutará& 3ualquier máquina quetena el sistema de ejecuci$n (runJtime) puedeejecutar ese c$dio ojeto, sin importar en modoaluno la máquina en que ha sido enerado&

 Ectualmente e2isten sistemas runJtime para SolarisF&2, Sun0s ?&=&2, Kindows >A, Kindows ;*, 6inu2,Iri2, Ei2, Mac, Epple y proalemente haya rupos dedesarrollo traajando en el portin a otrasplata#ormas&

5

Page 6: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 6/98

  Tutorial de Java

.l c$dio #uente !ava se "compila" a un c$dio de ytes de alto nivelindependiente de la máquina& .ste c$dio (yteJcodes) está dise%ado paraejecutarse en una máquina hipottica que es implementada por un sistema runJtime, que sí es dependiente de la máquina&.n una representaci$n en que tuvisemos que indicar todos los elementos que#orman parte de la arquitectura de !ava sore una plata#orma enrica,otendríamos una #iura como la siuiente/

6

Page 7: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 7/98

  Tutorial de Java

.n ella podemos ver que lo verdaderamente dependiente del sistema es laMáquina :irtual !ava (!:M) y las lirerías #undamentales, que tamin nospermitirían acceder directamente al hardware de la máquina& Edemás, hará E-Isde !ava que tamin entren en contacto directo con el hardware y serándependientes de la máquina, como ejemplo de este tipo de E-Is podemos citar/

  !ava F9/ rá#icos F9 y manipulaci$n de imáenes!ava Media ramework / .lementos críticos en el tiempo/ audio, video&&&!ava Enimation/ Enimaci$n de ojetos en F9!ava *elephony/ Interaci$n con tele#onía!ava Share/ Interacci$n entre aplicaciones multiusuario!ava L9/ 1rá#icos L9 y su manipulaci$n

Seguro6a seuridad en !ava tiene dos #acetas& .n el lenuaje, características como lospunteros o el castin implícito que hacen los compiladores de 3 y 344 se eliminanpara prevenir el acceso ileal a la memoria& 3uando se usa !ava para crear un

naveador, se cominan las características del lenuaje con protecciones desentido com5n aplicadas al propio naveador&

.l lenuaje 3, por ejemplo, tiene launas de seuridad importantes, como son loserrores de alineaci$n& 6os proramadores de 3 utili+an punteros en conjunci$ncon operaciones aritmticas& .sto le permite al proramador que un punterore#erencie a un luar conocido de la memoria y pueda sumar (o restar) al5n valor,para re#erirse a otro luar de la memoria& Si otros proramadores conocen

7

Page 8: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 8/98

  Tutorial de Java

nuestras estructuras de datos pueden e2traer in#ormaci$n con#idencial de nuestrosistema& 3on un lenuaje como 3, se pueden tomar n5meros enteros aleatorios yconvertirlos en punteros para lueo acceder a la memoria/

  print#( ".scrie un valor entero/ " )

  scan#( "Cu",puntero )  print#( "3adena de memoria/ CsNn",puntero )

0tra launa de seuridad u otro tipo de ataque, es el 3aallo de *roya& Sepresenta un prorama como una utilidad, resultando tener una #uncionalidaddestructiva& -or ejemplo, en <;IO se visuali+a el contenido de un directorio con elcomando ls& Si un proramador deja un comando destructivo ajo esta re#erencia,se puede correr el rieso de ejecutar c$dio malicioso, aunque el comando siahaciendo la #uncionalidad que se le supone, despus de lan+ar su caradestructiva&-or ejemplo, despus de que el caallo de *roya haya enviado por correo eletcshadow a su creador, ejecuta la #uncionalidad de ls persentando el contenidodel directorio& Se notará un retardo, pero nada inusual&

.l c$dio !ava pasa muchos tests antes de ejecutarse en una máquina& .l c$diose pasa a travs de un veri#icador de yteJcodes que compruea el #ormato de los#ramentos de c$dio y aplica un proador de teoremas para detectar #ramentosde c$dio ileal Jc$dio que #alsea punteros, viola derechos de acceso soreojetos o intenta camiar el tipo o clase de un ojetoJ&

Si los yteJcodes pasan la veri#icaci$n sin enerar nin5n mensaje de error,entonces saemos que/

0*.l c$dio no produce desordamiento de operandos en la pila1*.l tipo de los parámetros de todos los c$dios de operaci$n son conocidos y

correctos&2*;o ha ocurrido ninuna conversi$n ileal de datos, tal como convertir enteros

en punteros&3*.l acceso a los campos de un ojeto se sae que es leal/ pulic, private,

protected&4*;o hay nin5n intento de violar las relas de acceso y seuridad estalecidas

.l 3arador de 3lases tamin ayuda a !ava a mantener su seuridad, separandoel espacio de nomres del sistema de #icheros local, del de los recursosprocedentes de la red& .sto limita cualquier aplicaci$n del tipo 3aallo de *roya,ya que las clases se uscan primero entre las locales y lueo entre lasprocedentes del e2terior&

6as clases importadas de la red se almacenan en un espacio de nomres privado,asociado con el orien& 3uando una clase del espacio de nomres privado accedea otra clase, primero se usca en las clases prede#inidas (del sistema local) y

8

Page 9: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 9/98

  Tutorial de Java

lueo en el espacio de nomres de la clase que hace la re#erencia& .stoimposiilita que una clase suplante a una prede#inida&.n resumen, las aplicaciones de !ava resultan e2tremadamente seuras, ya queno acceden a +onas delicadas de memoria o de sistema, con lo cual evitan lainteracci$n de ciertos virus& !ava no posee una semántica especí#ica para

modi#icar la pila de prorama, la memoria lire o utili+ar ojetos y mtodos de unprorama sin los privileios del kernel del sistema operativo& Edemás, para evitarmodi#icaciones por parte de los crackers de la red, implementa un mtodoultraseuro de autenti#icaci$n por clave p5lica& .l 3arador de 3lases puedeveri#icar una #irma diital antes de reali+ar una instancia de un ojeto& -or tanto,nin5n ojeto se crea y almacena en memoria, sin que se validen los privileios deacceso& .s decir, la seuridad se intera en el momento de compilaci$n, con elnivel de detalle y de privileio que sea necesario&

9ada, pues la concepci$n del lenuaje y si todos los elementos se mantienendentro del estándar marcado por Sun, no hay peliro& !ava imposiilita, tamin,arir nin5n #ichero de la máquina local (siempre que se reali+an operaciones conarchivos, stas traajan sore el disco duro de la máquina de donde parti$ elapplet), no permite ejecutar ninuna aplicaci$n nativa de una plata#orma e impideque se utilicen otros ordenadores como puente, es decir, nadie puede utili+arnuestra máquina para hacer peticiones o reali+ar operaciones con otra& Edemás,los intrpretes que incorporan los naveadores de la Ke son a5n másrestrictivos& @ajo estas condiciones (y dentro de la #iloso#ía de que el 5nicoordenador seuro es el que está apaado, desenchu#ado, dentro de una cámaraacora+ada en un unker y rodeado por mil soldados de los cuerpos especiales delejrcito), se puede considerar que !ava es un lenuaje seuro y que los appletsestán lires de virus&

Hespecto a la seuridad del c$dio #uente, noya del lenuaje, !9G proporciona undesemsamlador de yteJcode, que permiteque cualquier prorama pueda ser convertidoa c$dio #uente, lo que para el proramadorsini#ica una vulnerailidad total a su c$dio&<tili+ando javap no se otiene el c$dio#uente oriinal, pero sí desmonta el proramamostrando el aloritmo que se utili+a, que eslo realmente interesante& 6a protecci$n de losproramadores ante esto es utili+ar llamadasa proramas nativos, e2ternos (incluso en 3 o344) de #orma que no sea descompilaletodo el c$dio aunque así se pierdaportailidad& .sta es otra de las cuestionesque !ava tiene pendientes&

Portable

9

Page 10: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 10/98

  Tutorial de Java

Más allá de la portailidad ásica por ser de arquitectura independiente, !avaimplementa otros estándares de portailidad para #acilitar el desarrollo& 6osenteros son siempre enteros y además, enteros de LF its en complemento a F&

 Edemás, !ava construye sus inter#aces de usuario a travs de un sistemaastracto de ventanas de #orma que las ventanas puedan ser implantadas en

entornos <ni2, -c o Mac&

Interpretado.l intrprete !ava (sistema runJtime) puede ejecutar directamente el c$dio ojeto&.nla+ar (linkar) un prorama, normalmente, consume menos recursos quecompilarlo, por lo que los desarrolladores con !ava pasarán más tiempodesarrollando y menos esperando por el ordenador& ;o ostante, el compiladoractual del !9G es astante lento& -or ahora, que todavía no hay compiladoresespecí#icos de !ava para las diversas plata#ormas, !ava es más lento que otroslenuajes de proramaci$n, como 344, ya que dee ser interpretado y noejecutado como sucede en cualquier prorama tradicional&

Se dice que !ava es de =B a LB veces más lento que 3, y que tampoco e2isten en!ava proyectos de ran enveradura como en otros lenuajes& 6a verdad es queya hay comparaciones ventajosas entre !ava y el resto de los lenuajes deproramaci$n, y una inente cantidad de #olletos electr$nicos que supuran#anatismo en #avor y en contra de los distintos lenuajes contendientes con !ava&6o que se suele dejar de lado en todo esto, es que primero haría que decidirhasta que punto !ava, un lenuaje en pleno desarrollo y todavía sin de#inici$nde#initiva, está maduro como lenuaje de proramaci$n para ser comparado conotros como por ejemplo con Smalltalk, que lleva más de FB a%os en cancha&

6a verdad es que !ava para conseuir serun lenuaje independiente del sistemaoperativo y del procesador que incorporela máquina utili+ada, es tanto interpretadocomo compilado& P esto no es nin5ncontrasentido, me e2plico, el c$dio #uenteescrito con cualquier editor se compilaenerando el yteJcode& .ste c$diointermedio es de muy ajo nivel, pero sinalcan+ar las instrucciones máquina propiasde cada plata#orma y no tiene nada quever con el pJcode de :isual @asic& .l yteJcode corresponde al QBC de lasinstrucciones de la aplicaci$n& .se mismoc$dio es el que se puede ejecutar sorecualquier plata#orma& -ara ello hace #altael runJtime, que sí es completamentedependiente de la máquina y del sistemaoperativo, que interpreta dinámicamente elyteJcode y a%ade el FBC de instrucciones

10

Page 11: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 11/98

  Tutorial de Java

que #altaan para su ejecuci$n& 3on este sistema es #ácil crear aplicacionesmultiplata#orma, pero para ejecutarlas es necesario que e2ista el runJtimecorrespondiente al sistema operativo utili+ado&

Multithreaded  El ser multithreaded (multihilvanado, en mala traducci$n), !ava permite muchasactividades simultáneas en un prorama& 6os threads (a veces llamados, procesoslieros), son ásicamente peque%os procesos o pie+as independientes de un ranproceso& El estar los threads contruidos en el lenuaje, son más #áciles de usar ymás roustos que sus hom$loos en 3 o 344&

.l ene#icio de ser miltithreaded consiste en un mejor rendimiento interactivo ymejor comportamiento en tiempo real& Eunque el comportamiento en tiempo realestá limitado a las capacidades del sistema operativo suyacente (<ni2, Kindows,etc&), a5n supera a los entornos de #lujo 5nico de prorama (sinleJthreaded) tantoen #acilidad de desarrollo como en rendimiento&

3ualquiera que haya utili+ado la tecnoloía de naveaci$n concurrente, sae lo#rustrante que puede ser esperar por una ran imaen que se está trayendo& .n!ava, las imáenes se pueden ir trayendo en un thread independiente, permitiendoque el usuario pueda acceder a la in#ormaci$n en la páina sin tener que esperarpor el naveador&

Dinamico!ava se ene#icia todo lo posile de la tecnoloía orientada a ojetos& !ava nointenta conectar todos los m$dulos que comprenden una aplicaci$n hasta eltiempo de ejecuci$n& 6as lirería nuevas o actuali+adas no parali+arán lasaplicaciones actuales (siempre que mantenan el E-I anterior)&

11

Page 12: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 12/98

  Tutorial de Java

!ava tamin simpli#ica el uso de protocolos nuevos o actuali+ados& Si su sistemaejecuta una aplicaci$n !ava sore la red y encuentra una pie+a de la aplicaci$nque no sae manejar, tal como se ha e2plicado en párra#os anteriores, !ava escapa+ de traer automáticamente cualquiera de esas pie+as que el sistemanecesita para #uncionar&

 !ava, para evitar que los m$dulos de yteJcodes o los ojetos o nuevas clases,

haya que estar trayndolos de la red cada ve+ que se necesiten, implementa lasopciones de persistencia, para que no se eliminen cuando de limpie la cach de lamáquina&

R3uál es la ventaja de todo estoRTu ano con !ava

12

Page 13: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 13/98

  Tutorial de Java

5*-rimero/ ;o dees volver a escriir el c$dio si quieres ejecutar el prorama enotra máquina& <n solo c$dio #unciona para todos los rowsers compatiles con!ava o donde se tena una Máquina :irtual de !ava (MacUs, -3Us, SunUs, etc)&

6*Seundo/ !ava es un lenuaje de proramaci$n orientado a ojetos, y tienetodos los ene#icios que o#rece esta metodoloía de proramacion (más

adelante doy una peque%a introducci$n a la #iloso#ía de ojetos)&7**ercero/ <n rowser compatile con !ava deerá ejecutar cualquier proramahecho en !ava, esto ahorra a los usuarios tener que estar insertando "pluJins"y demás proramas que a veces nos quitan tiempo y espacio en disco&

8*3uarto/ !ava es un lenuaje y por lo tanto puede hacer todas las cosas quepuede hacer un lenuaje de proramaci$n/ 3álculos matemáticos,procesadores de palaras, ases de datos, aplicaciones rá#icas, animaciones,sonido, hojas de cálculo, etc&

9*Tuinto/ Si lo que me interesa son las páinas de Ke, ya no tienen que serestáticas, se le pueden poner toda clase de elementos multimedia y permiten unalto nivel de interactividad, sin tener que astar en paquetes carísimos de

multimedia&

Todo esto sena "# $onito pero ta"$ien se tienen a%gnas %i"itantes!

10* 6a velocidad&11* 6os proramas hechos en !ava no tienden a ser muy rápidos,

supuestamente se está traajando en mejorar esto&3omo los proramas de!ava son interpretados nunca alcan+an la velocidad de un verdadero ejecutale&

12* !ava es un lenuaje de proramaci$n& .sta es otra ran limitante, por másque dian que es orientado a ojetos y que es muy #ácil de aprender siuesiendo un lenuaje y por lo tanto aprenderlo no es cosa #ácil& .specialmentepara los no proramadores&

13* !ava es nuevo& .n pocas palaras todavía no se conocen ien todas suscapacidades&

-ero en eneral !ava posee muchas ventajas y se pueden hacer cosas muyinteresantes con esto& 'ay que prestar especial atenci$n a lo que estásucediendo en el mundo de la computaci$n, a pesar de que !ava es relativamentenuevo, posee mucha #uer+a y es tema de moda en cualquier mediocomputacional& Muchas personas apuestan a #uturo y piensan en !ava& 6apreunta es / R.starán en lo correcto 6a verdad es que no se, pero este manualno es para #iloso#ar sore el #uturo del lenuaje sino para aprender a proramarlo&

1.& 'otJava'ot!ava, en pocas palaras, es un naveador con soporte !ava (!avaJenaled),desarrollado en !ava& 3omo cualquier naveador de Ke, 'ot!ava puededecodi#icar '*M6 estándar y <H6s estándares, aunque no soporta completamenteel estándar '*M6 L&B& 6a ventaja sore el resto de naveadores, sin soporte !ava,

13

Page 14: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 14/98

  Tutorial de Java

es que puede ejecutar proramas !ava sore la red& 6a di#erencia con ;etscape,es que tiene implementado completamente los sistemas de seuridad quepropone !ava, esto sini#ica que puede escriir y leer en el disco local, aunqueesto hace disminuir la seuridad, ya que se pueden raar en nuestro discoproramas que contenan c$dio malicioso e introducirnos un virus, por ejemplo&

;o ostante, el utili+ar esta característica de 'ot!ava es decisi$n del usuario&

1.( Java para ap%icaciones corporativas!ava actualmente está en oca de todos, !ava e Intranet son las palaras demoda& -ero, sure la preunta de si esta es una uena tecnoloía para desarrollaraplicaciones corporativas& P la respuesta es a#irmativa y voy a proponerarumentos para esa a#irmaci$n& .n donde la red sea alo crítico, !ava #acilitatremendamente la vida de la proramaci$n corporativa&

9urante a%os, las randes empresas se han convencido de que la "red"corporativa es la arteria por donde #luye la sanre que mantiene vivo su neocio&9esde el ran servidor de sus o#icinas centrales, hasta los servidores de lasdeleaciones, las estaciones de traajo de los proramadores y la maraunta de-3s, la in#ormaci$n va #luyendo de unos a otros& -ara muchas compa%ías, la Hedes la .mpresa&Si esta red no se mantiene sana, los pedidos no llean, el inventario no se

actuali+a, el so#tware no se desarrolla adecuadamente, los clientes no estánsatis#echos y, #undamentalmente, el dinero no entra& 6a necesidad dedianosticar y reducir la arterioesclerosis de la red, hace que se estninyectando continuamente nuevas metodoloías que susanen este raveprolema&

R.s !ava la medicina .stá claro que cuando vemos un cepillo animadolimpiando los dientes, cuos movindose en LJ9, o una anda de atoslocos en applets de !ava, nos convencemos de que es el lenuaje id$neopara Internet& -ero, qu pasa con las aplicaciones corporativas, Rsería unauena tecnoloía allí donde la red es el punto crítico :amos a intentarresponder comparando las capacidades de !ava contra la lista denecesidades de la red corporativa&

Desarrollo rápido de aplicaciones'ace a%os, se decía que los proramadores pronto desaparecerían& 6oseneradores automáticos de proramas, eliminarían a los eneradoreshumanos y el mundo sería un luar mejor para vivir& 9esa#ortunadamente,quienes decían esto no tuvieron en cuenta una acelerada demanda deso#tware de calidad para muy di#erentes aplicaciones& Sin emaro, latecnoloía de ojetos pronto vino a intentar #acilitar la tarea, adoptando elmodelo de "enerar parte de un prorama", así, enerando la parte ásica

de un prorama (los ojetos), se podría conectar con otras partes paraproporcionar di#erentes utilidades al usuario&

14

Page 15: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 15/98

  Tutorial de Java

.l lenuaje 344 es una uena herramienta, pero no cumple totalmente la premisa&:isual @asic y ;e2tStep, se acercan cada ve+ más al poder de los ojetos& !ava#acilita la creaci$n de entornos de desarrolloJaplicaciones de modo similar, peroademás es #le2ile, poderoso y e#ectivo& 6os proramadores ahora disponen de

herramientas de proramaci$n de calidad eta, que apuntan hacia esa meta,como son el !ava KorkShop de SunSo#t, el entorno !ava de @orland, el 3a# deSymantec, y pronto, herramientas más so#isticadas como ;etcode o uture*ense&.sto proporciona una ran proresi$n a los entornos de desarrollo !ava&

 Aplicaciones efectivas eficientes6as aplicaciones que se crean en randes empresas deen ser más e#ectivas quee#icientes es decir, conseuir que el prorama #uncione y el traajo sala adelantees más importante que el que lo haa e#icientemente& .sto no es una crítica, esuna realidad de la proramaci$n corporativa& El ser un lenuaje más simple quecualquiera de los que ahora están en el caj$n de los proramadores, !ava permitea stos concentrarse en la mecánica de la aplicaci$n, en ve+ de pasarse horas yhoras incorporando E-Is para el control de las ventanas, controlandominuciosamente la memoria, sincroni+ando los #icheros de caecera y corriiendolos a$nicos mensajes del linker& !ava tiene su propio toolkit para inter#aces,maneja por sí mismo la memoria que utilice la aplicaci$n, no permite #icheros decaecera separados (en aplicaciones puramente !ava) y solamente usa enlacedinámico&Muchas de las implementaciones de !ava actuales son puros intrpretes& 6osyteJcodes son interpretados por el sistema runJtime de !ava, la Máquina :irtual!ava (!:M), sore el ordenador del usuario& Eunque ya hay ciertos proveedoresque o#recen compiladores nativos !ustJInJ*ime (!I*)& Si la Máquina :irtual !avadispone de un compilador instalado, las secciones (clases) del yteJcode de laaplicaci$n se compilarán hacia la arquitectura nativa del ordenador del usuario&

6os proramas !ava en ese momento rivali+arán con el rendimiento de proramasen 344& 6os compiladores !I* no se utili+an en la #orma tradicional de uncompilador los proramadores no compilan y distriuyen inarios !ava a losusuarios& 6a compilaci$n !I* tiene luar a partir del yteJcode !ava, en el sistemadel usuario, como una parte (opcional) del entorno runJtime local de !ava&

15

Page 16: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 16/98

  Tutorial de Java

Muchas veces, los proramadores corporativos, ansiosos por e2primir al má2imola e#iciencia de su aplicaci$n, empie+an a hacerlo demasiado pronto en el ciclo devida de la aplicaci$n& !ava permite alunas tcnicas innovadoras de optimi+aci$n&

-or ejemplo, !ava es inherentemente multithreaded, a la ve+ que o#receposiilidades de multithread como la clase *hread y mecanismos muy sencillos deusar de sincroni+aci$n !ava en sí utili+a threads& 6os desarrolladores decompiladores intelientes pueden utili+ar esta característica de !ava para lan+arun thread que compruee la #orma en que se está utili+ando la aplicaci$n& Másespecí#icamente, este thread podría detectar qu mtodos de una clase se estánusando con más #recuencia e invocar a sucesivos niveles de optimi+aci$n en

tiempo de ejecuci$n de la aplicaci$n& 3uanto más tiempo est corriendo laaplicaci$n o el applet, los mtodos estarán cada ve+ más optimi+ados (1uava deSo#tway es de este tipo)&

Si un compilador !I* está emeido en el entorno runJtime de !ava, elproramador no se preocupa de hacer que la aplicaci$n se ejecute $ptimamente&Siempre he pensado que en los Sistemas 0perativos tendría que aplicarse esta#iloso#ía un optimi+ador proresivo es un paso más hacia esta idea&

16

Page 17: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 17/98

  Tutorial de Java

Portabilidad para programador programa.n una empresa de relativo tama%o hay una plyade di#erente de ordenadores&-roalemente nos encontremos con estaciones de traajo Sun para el desarrollode so#tware, hordas de -3s para cada empleado, al5n Mac en el departamentode documentaci$n, una estaci$n de traajo '- en administraci$n y una estaci$n

S1I en la sala de demos& 9esarrollar aplicaciones corporativas para un rupo tandi#erente de plata#ormas en e2cesivamente complejo y caro& 'asta ahora eracomplicado convencer a los proramadores de cada arquitectura que utili+asen un

 E-I com5n para reducir el coste de las aplicaciones&

3on un entorno runJtime de !ava portado a cada una de las arquitecturas de lasplata#ormas presentes en la empresa y una uena lirería de clases ("packaes"en !ava), los proramadores pueden entenderse y encontrar muy interesantetraajar con !ava& .sta posiilidad hará tender a los proramadores hacia !ava,

 justo donde otros intentos anteriores con entornos universales (como 1ala2y oO:*) han #racasado& .stos E-Is eran simplemente inadecuados, no orientados aredes y, verdaderamente, pesados&

<na ve+ que los proramas estn escritos en !ava, otro lado interesante delasunto es que los proramadores tamin son portales& .l rupo deproramadores de la empresa puede ahora en#rentarse a un desarrollo paracualquiera de las plata#ormas& 6a parte del cliente y del servidor de una aplicaci$nestarán ahora escritas en el mismo lenuaje& Pa no será necesario tener un rupoque desarrolle en Solaris en del departamento de I49, proramadores traajandosore :isual @asic en el departamento de documentaci$n y proramadores sore1;< en proyectos especiales ahora todos ellos podrán estar juntos y #ormar elrupo de so#tware de la empresa&

!ostes de desarrollo.n contraste con el alto coste de los desarrollos reali+ados sore estaciones detraajo, el coste de creaci$n de una aplicaci$n !ava es similar al de desarrollarsore un -3&

9esarrollar utili+ando un so#tware caro para una estaci$n de traajo (ahora arata)es un prolema en muchas empresas& 6a e#iciencia del hardware y el poco costede mantenimiento de una estaci$n de traajoSun, por ejemplo, resulta muy atractivo paralas empresas pero el coste adicional delentorno de desarrollo con 344 es prohiitivopara la ran mayoría de ellas& 6a lleada de!ava e Intranet reducen consideralementeestos costes& 6as herramientas !ava ya noestán en el entorno de precios de millones depesetas, sino a los niveles con#ortales deprecio de las herramientas de -3s& P con elcrecimiento cada día mayor de la comunidadde desarrolladores de so#tware #reeware y

17

Page 18: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 18/98

  Tutorial de Java

shareware que incluso proporcionan el c$dio #uente, los proramadorescorporativos tienen un amplio campo donde moverse y muchas oportunidades deaprender y muchos recursos a su disposici$n&

.l 2ito que Internet ha proporcionado a los equipos de so#tware corporativos es

un realo& .l precio del so#tware es ahora el mismo para un poderoso equipocorriendo <ni2 que para un -3& Incluso ;etscape tiene al mismo precio la versi$n<ni2 de su servidor Ke SuiteSpot que la versi$n -3;*& .sta es la #iloso#ía deprecios que parece ser será la que se sia con las herramientas asadas en !ava&

Mantenimiento soporte<n prolema ien conocido que ocurre con el so#tware corporativo es la demanda

decuidados y

realimentaci$n& !ava no es, ciertamente, la cura para la en#ermedad delmantenimiento, pero tiene varias características que harán la vida del en#ermeromás #ácil&

<no de los componentes del !9G es javadoc& Si se usan ciertas convenciones enel c$dio #uente !ava (como comen+ar un comentario con 77 y terminarlo con 7),

 javadoc se puede #ácilmente enerar páinas '*M6 con el contenido de esoscomentarios, que pueden visuali+arse en cualquier naveador& 6a documentaci$ndel E-I de !ava ha sido creada de este modo& .sto hace que el traajo dedocumentar el c$dio de nuevas clases !ava sea trivial&

0tro ran prolema del desarrollador corporativo es la creaci$n y control demake#iles& 6eerse un make#ile es como estar leyendo la historia de empresa&;ormalmente se pasan de proramador a proramador, quitando la in#ormaci$n

18

Page 19: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 19/98

  Tutorial de Java

que no es esencial, siempre que se puede& .sto hace que muchos de losmake#iles de las aplicaciones contenan docenas de lirerías, una miríada de#icheros de caecera y ultraJcon#usos macros& .s como mirar en el est$mao de laallena de !onás&

!ava reduce las dependencia de complejos make#iles drásticamente& -rimero, nohay #icheros de caecera& !ava necesita que todo el c$dio #uente de una clase seencuentre en un solo #ichero& !ava tiene la inteliencia de make en el propiolenuaje para simpli#icar la compilaci$n de yteJcodes&-or ejemplo/

pulic class pepe V ichero/ pepe&java  1uitarra #lamenca   W  pulic class uitarra V ichero/ uitarra&java  W

C javac Jverose pepe&javaXparsed pepe&java in 8FBmsYXloaded 3/N!E:EN@I;N&&NclassesNjavaNlanN0ject&class in FFBmsYXcheckin class pepeYXparsed &NN1uitarra&java in ABmsYXwrote pepe&classYXcheckin class 1uitarraYXwrote &NN1uitarra&classYXdone in FLBBmsY.l compilador !ava se da cuenta de que necesita compilar el #ichero uitarra&java&

 Ehora vamos a #or+arlo a que recompile pepe&java sin camiar uitarra&java,podremos comproar que el compilador de yteJcode !ava no recompilainnecesariamente el #ichero uitarra&java&

C javac Jverose pepe&javaXparsed pepe&java in ??BmsYXloaded 3/N!E:EN@I;N&&NclassesNjavaNlanN0ject&class in =ZBmsYXcheckin class pepeYXloaded &NN1uitarra&java in BmsYXwrote pepe&classYXdone in =QZBmsY

 Ehora, si modi#icamos uitarra&java (a%adiendo, por ejemplo, otro miemro a laclase) y compilamos pepe&java, el compilador !ava se dará cuenta de que deerecompilar tanto pepe&java como uitarra&java

C javac Jverose pepe&javaXparsed pepe&java in 8=BmsYXloaded 3/N!E:EN@I;N&&NclassesNjavaNlanN0ject&class in FFBmsYXcheckin class pepeY

19

Page 20: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 20/98

  Tutorial de Java

Xparsed &NN1uitarra&java in BmsYXwrote pepe&classYXcheckin class 1uitarraYXwrote &NN1uitarra&classYXdone in FZ?BmsY

.n el liro !ust !ava de -eter van der 6inden hay un capítulo e2celente acerca delcompilador de !ava, si tienes oportunidad, no dejes de leerlo&

 Aprendi"ajeSi la empresa está llena de proramadores de 344 con aluna e2periencia en elmanejo de lirería rá#icas, aprenderán rápidamente lo esencial de !ava& Si elequipo de inenieros no conoce 344, pero maneja cualquier otro lenuaje deproramaci$n orientada a ojetos, les llevará pocas semanas dominar la ase de!ava& 6o que sí que no es cierto es que haya que aprender 344 antes de aprender!ava&

Si los inenieros de la empresa no conocen nin5n lenuaje orientado a ojetos,sí que tienen que aprender los #undamentos de esta tecnoloía antes de nada, y

lueo aplicarlos a la proramaci$n con !ava& .lanálisis y dise%o orientado a ojetos dee sercomprendido antes de intentar nada con !ava&6os proramadores de !ava sin un #ondo deconocimientos de 00E9 producirán c$diopore& Edemás, los liros sore !ava crecencomo la espuma, ya hay más de FA pulicados, ysi uscas "-roammin in !ava" en la Hed,encontrarás L=F Ke sites, y LB más dedicadosa "6earnin !ava"& P si esto, evidentemente, noes el sustituto de un instructor humano, hay yavarias empresas que o#recen ense%an+a de!ava, entre ellas, Sun&

2. IN)TA*ACIÓN D+* JD

 Ectualmente ya hay entornos de desarrollointerados completos para !ava, di#erentes del!9G de Sun& Symantec dispone de uncompilador de !ava para Kindows >A y Kindows;*, con las ventajas del aumento de velocidad deproceso y capacidades multimedia que estoproporciona, Symantec 3a#& @orland taminestá traajando en ello y la nueva versi$n de suentorno de desarrollo soporta !ava& Sun ha

20

Page 21: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 21/98

  Tutorial de Java

lan+ado la versi$n comercial de su propio entorno de desarrollo para !ava, el !avaKorkshop, enteramente escrito en !ava& P Microso#t ha puesto en el mercado:isual !44, que siue el estilo de todas sus herramientas de desarrollo&

;o ostante, trataremos solamente el !9G, que hasta el momento es lo más

conocido& .l entorno ásico del !9G de !ava que proporciona Sun está #ormadopor herramientas en modo te2to, que son/ java, intrprete que ejecuta proramasen yteJcode& javac, compilador de !ava que convierte el c$dio #uente en yteJcode& javah, crea #icheros de caecera para implementar mtodos para cualquierclase& javap, es un descompilador de yteJcode a c$dio #uente !ava& javadoc, esun enerador automático de documentos '*M6 a partir del c$dio #uente !ava&

 javapro#, es un pro#iler para aplicaciones de un solo thread& 'ot!ava, es unnaveador Ke escrito completamente en !ava&

.l entorno haitual pues, consiste en un naveador que pueda ejecutar applets, uncompilador que convierta elc$dio #uente !ava a yteJ codey el intrprete !ava paraejecutar los proramas&.stos son loscomponenetes ásicos paradesarrollar alo en !ava& ;oostante se necesita uneditor para escriir elc$dio #uente, y no sonestrictamente necesarias otrasherramientas como eldeuer, un entornovisual, la documentaci$n o unvisuali+ador de jerarquía declases& *an es así, quedisponiendo del naveador;etscape F&B no senecesita ni tan siquiera el !9G(a petici$n de variosamios que dis#rutan del usode 6inu2 pero no disponen desoporte .6 para poderutili+ar el !9G portado porHandy 3hapman, les indicar como conseuir utili+ar el compilador emeido en;etscape)&

2.1 -indos6a versi$n del !9G para Kindows es un archivo autoe2traile& Se necesitanalrededor de Z M de espacio lire en disco& .jecutar el #ichero, quedesempaquetará el contenido del archivo& .l directorio donde se instale no esimportante, pero supondremos que se instala en el rai+ del disco 3/, en cuyo caso

21

Page 22: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 22/98

  Tutorial de Java

los archivos colarán de c/Njava& .s necesario a%adir c/NjavaNin a la variale deentorno -E*'&

 Edemás de los #icheros java, el !9G incluye dos lirerías dinámicas,MS:3H*FB&966 y M3LB&966, que se instalarán en el directorio de !ava& Si

tienes ninuna copia de estos #icheros en tu ordenador (proalemente en eldirectorio system de Kindows) copia estos #icheros en el directorio c/NjavaNin& Siestos #icheros ya están en tu ordenador, elimina las copias e2tra que instala el!9G&

2.2 )o%aris6a versi$n del !9G para Solaris es un #ichero tar comprimido& Se necesitanalrededor de > M de disco para descomprimir el !9G, aunque el dole de espaciosería una ci#ra más c$moda& .jecutar los siuientes comandos/

C uncompress !9GJetaJsolarisFJsparc&tar&[C tar 2v# !9GJetaJsolarisFJsparcJtar 

-uedes descomprimir el archivo en tu directorio home, o, si tienes privileios desupervisor, en al5n sitio más conveniente de usrlocal para que todos losusuarios tenan acceso a los #icheros& Sin emaro, los privileios del supervisorno son necesarios para instalar y ejecutar !ava& -or simplicidad, supondr que hasdescomprimido el !9G en usrlocal, aunque el path completo donde se haa notiene relevancia (tamin es posile colocarlo en opt que es donde residen todaslas aplicaciones de Solaris)& Si lo has colocado en un sitio di#erente, simplementesustituye usrlocal por ese directorio (si lo has descomprimido en tu home, puedesutili+ar \java y \hotjava, en ve+ del path completo)&

.s necesario a%adir usrlocaljavain a la variale de entorno -E*'& <tili+a elsiuiente comando (suponiendo que tenas el shell csh o tcsh)/

 set path](^-E*' usrlocaljavain)

*amin puedes a%adir esta línea al #inal del #ichero &pro#ile y &cshrc, y ya tienes elsistema listo para ejecutar applets& Si quieres desemara+arte de la ventana queaparece cada ve+ que lances el appletviewer con la licencia de Sun, crea undirectorio que se llame &hotjava en el directorio javain y ya no volverás a verla&

2.& *in/;ecesitas un kernel que soporte inarios .6, por lo tanto tu 6inu2 dee ser laversi$n =&F&=L o superior, las anteriores tienen un u que hacen que javac no#uncione& ;ecesitas tamin ;etscape, versi$n F&B? o posterior& Sore la versi$n=&F&=L del kernel de 6inu2, hay que seuir los pasos que indico para conseuir que!9G #uncione/

22

Page 23: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 23/98

  Tutorial de Java

14* @ajarse el !9G, linu2&jdkJ=&BJtry?&staticJmoti#&tar&+ y linu2&jdkJ=&B try=&common&tar&+ a

  usrlocal, descomprimirlo y hacer Utar 2v#U

15* .n el #ichero &java_wrapper (si no e2iste, crearlo) camiar las variale

!_'0M. y -H1, para que queden como/

!_'0M.]usrlocaljava-H1]usrlocaljavain

16* @ajarse la lirería lic&A&F&=Q&in&tar&+ a , descomprimirla, hacer Utar 2v#U&

17*  Eseurarse de que lilic&so&A es un link sim$lico a este nuevo #ichero&Sino lo es, hacer el li Uln Js lic&so&A&F&=Q lic&so&AU

18* @ajarse ldJso&=&8&=?&tar&+ a un directorio temporal, descomprimirlo y hacer

Utar 2v#U&

19* .jecutar Uinstldso&shU y eliminar el directorio temporal&

20*  E%adir usrlocaljava a la variale de entorno -E*'& Si se desea que est#ijada para todos los usuarios, incorporar el directorio a la varile -E*'que se #ija en el #ichero etcpro#ile&

21* @ajarse netscapeJvFBFJe2port&i?QZJunknownJlinu2&tar&+ a usrlocalnetscape,descomprimirlo y hacer Utar 2v#U

22* 3rear un link en usrlocalin a usrlocalnetscapenetscape

.sto deería ser su#iciente para compilar cualquier cosa en !ava6inu2& .n casode tener prolemas, es el momento de recurrir a las ET&

Siuiendo los pasos indicados ya se puede ejecutar el ejemplo del *icJ*acJ*oe quepropone la hoja de instalaci$n que Sun ha incluido en todas sus versiones y queen 6inu2 consistiría en camiarse al directorio de la demo/

C cd usrlocaljavademo*ic*ac*oe

ejecutar el visuali+ador de applets sore la páina html/

C appletviewer e2ample=&html

y a juar a las tres en raya& -or cierto, que el aloritmo que usa el ordenador está#alseado por lo que es posile anarle&

2.( Co"pi%aci0n sin JD

23

Page 24: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 24/98

  Tutorial de Java

-arece raro, pero se puede conseuir& 6o 5nico necesario es el naveador;etscape F&B& .ste naveador, junto con la máquina virtual !ava (!:M) y elsistema runJtime, tiene un compilador !ava&Si no se dispone del !ava 9evelopment Git (!9G), que no está disponile paratodas las plata#ormas, pero sí de la versi$n de ;etscape para nuestra plata#orma,

aquí van los pasos a seuir para utili+ar el compilador de !ava emeido en;etscape&

3omo necesito partir de al5n punto para tomarlo como re#erencia, voy a suponerque estamos sore 6inu2 y que vamos a prescindir del !9G de Handy 3hapman&6o que haría que hacer sería lo siuiente&

23* -rimero& Instalar ;etscape en el ordenador& Eseurarse de entenderper#ectamente y leerse hasta el #inal el #ichero H.E9M., para seuir lasinstrucciones especí#icas de la instalaci$n de ;etscape en la plata#orma y que;etscape #uncione per#ectamente& .n nuestro caso, en que vamos a intentarcompilar c$dio !ava con ;etscape sore 6inu2, la pie+a clave es la situaci$ndel #ichero mo+F_B&+ip, que en mi máquina está enusrlocalnetscapejavaclasses&

24* Seundo& .2traer de una copia cualquiera del !9G (aunque sea de otraplata#orma), el #ichero javaliclasses&+ip y uardarlo en el mismo sitio que el#ichero mo+F_B&+ip esta locali+aci$n no es necesaria, pero simpli#ica laestructura&

25* *ercero& ijar la variale de entorno 36ESS-E*' para que ;etscape puedaencontrar sus propias clases además de las clases del !ava de Sun&

 Eseurarse de incluir el "directorio actual", para poder compilar a la ve+ que seusan los #icheros &+ip de ;etscape y Sun& -or ejemplo/

  setenv 36ESS-E*'  &/usrlocalnetscapejavaclassesmo+F_B&+ip /  usrlocalnetscapejavaclassesclasses&+ip

26* 3uarto& 3ompilar el c$dio !ava (applet o aplicaci$n) con el comando/netscape Jjava sun&tools&javac&Main X#icheroY&java (sustituir el nomre del #icherocon el c$dio !ava en ve+ de X#icheroY)& .sto convertirá el c$dio #uente !ava enyteJcode, enerándose el archivo X#icheroY&class&

27* Tuinto& 3omproar si se puede ejecutar la aplicaci$n con el comando/  netscape Jjava XclaseY  (sustituir el nomre de la clase de la aplicaci$n Jla que contiene la rutina mainJ

en ve+ de XclaseY)&

28* Se2to& Si se ha compilado un applet !ava, construir una páina html que loutilice para visuali+arlo con el naveador en su #orma normal& 0 tamin sepuede visuali+ar utili+ando el appletviewer, ejecutando/

24

Page 25: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 25/98

  Tutorial de Java

  netscape Jjava sun&applet&Epplet:iewer XclaseY

  9esraciadamente, la sentencia anterior no parece #uncionar en todos lossistemas& 'ay amios míos que no han sido capaces de visuali+ar applets coneste mtodo&

-ara aprovechar el tiempo, se puede crear un script que recoja los pasos L, ? y Z&Si estamos utili+ando el csh, el contenido del script sería/

Dincsh J# setenv 36ESS-E*'  &/usrlocalnetscapejavaclassesmo+F_B&+ip/  usrlocalnetscapejavaclassesclasses&+ip  netscape Jjava sun&tools&javac&Main ^=y lo almacenaríamos como javac& Se ha de hacer el script ejecutale y camiarincsh por el path completo donde est situado el csh& 9e #orma semejantepodemos de#inir el intrprete java y el appletviewer, sustituyendo la línea adecuadade llamada a ;etscape&

&. CONC+TO) 3)ICO) D+ JAVA

&.1 rogra"aci0n en Java3uando se prorama en !ava, se coloca todo el c$dio en mtodos, de la misma#orma que se escrien #unciones en lenuajes como 3&

25

Page 26: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 26/98

  Tutorial de Java

!omentarios.n !ava haytres tipos decomentarios/

  comentariospara una solalínea

  7comentariosde una o  máslíneas  7

  77comentario de

documentaci$n, de una o más líneas  7

6os dos primeros tipos de comentarios son los que todo proramador conoce y seutili+an del mismo modo& 6os comentarios de documentaci$n, colocadosinmediatamente antes de una declaraci$n (de variale o #unci$n), indican que esecomentario ha de ser colocado en la documentaci$n que se eneraautomáticamente cuando se utili+a la herramienta de !ava, javadoc& 9ichoscomentarios sirven como descripci$n del elemento declarado permitiendo enerar

una documentaci$n de nuestras clases escrita al mismo tiempo que se enera elc$dio&

.n este tipo de comentario para documentaci$n, se permite la introducci$n dealunos tokens o palaras clave, que harán que la in#ormaci$n que les siueapare+ca de #orma di#erente al resto en la documentaci$n&

Identificadores

26

Page 27: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 27/98

  Tutorial de Java

6os identi#icadores nomran variales, #unciones, clases y ojetos cualquier cosaque el proramador necesite identi#icar o usar&

.n !ava, un identi#icador comien+a con una letra, un surayado (_) o un símolode d$lar (^)& 6os siuientes caracteres pueden ser letras o díitos& Se distinuen

las may5sculas de las min5sculas y no hay lonitud má2ima&

Serían identi#icadores válidos/  identi#icador  

nomre_usuario 

;omre_<suario 

 _variale_del_sistema  ^transacciony su uso sería, por ejemplo/  int contador_principal

  char _lista_de_#icheros  #loat ^cantidad_en_-tas

-alaras clave6as siuientes son las palaras clave que están de#inidas en !ava y que no sepueden utili+ar como indenti#icadores/

  astract continue #or new switch  oolean de#ault oto null synchroni+ed  reak do i# packae this  yte doule implements private threadsa#e

  yvalue else import protected throw  case e2tends instanceo# pulic transient  catch #alse int return true  char #inal inter#ace short try  class #inally lon static void  const #loat native super while

27

Page 28: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 28/98

  Tutorial de Java

-alaras Heservadas Edemás, el lenuaje se reserva unas cuantas palaras más, pero que hasta ahorano tienen un cometido especí#ico& Son/

  cast #uture eneric inner 

  operator outer rest var 

#iterales<n valor constante en !ava se crea utili+ando una representaci$n literal de l& !avautili+a cinco tipos de elementos/ enteros, reales en coma #lotante, ooleanos,caracteres y cadenas, que se pueden poner en cualquier luar del c$dio #uentede !ava& 3ada uno de estos literales tiene un tipo correspondiente asociado conl&

.nteros/  yte Q its complemento a dos  short =Z its complemento a dos  int LF its complemento a dos  lon Z? its complemento a dos  -or ejemplo/ F= B88 B293BB

Heales en coma #lotante/  #loat LF its I... 8A?  doule Z? its I... 8A?  -or ejemplo/ L&=? Fe=F L&=.=F

@ooleanos/  true  #alse

3aracteres/  -or ejemplo/ a Nt Nu XY es un n5mero unicode3adenas/  -or ejemplo/ ".sto es una cadena literal"

 ArrasSe pueden declarar en !ava arrays de cualquier tipo/

  char sXY  int iErrayXY

Incluso se pueden construir arrays de arrays/

  int talaXYXY ] new intX?YXAY

28

Page 29: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 29/98

  Tutorial de Java

6os límites de los arrays se compruean en tiempo de ejecuci$n para evitardesordamientos y la corrupci$n de memoria&

.n !ava un array es realmente un ojeto, porque tiene rede#inido el operador XY&*iene una #unci$n miemro/ lenth& Se puede utili+ar este mtodo para conocer la

lonitud de cualquier array&

  int aXYXY ] new intX=BYXLY  a&lenth 7 =B 7  aXBY&lenth 7 L 7

-ara crear un array en !ava hay dos mtodos ásicos& 3rear un array vacío/

  int listaXY ] new intXABY

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

  Strin nomresXY ] V  "!uan","-epe","-edro","Maria"  W

.sto que es equivalente a/

  Strin nomresXY  nomres ] new StrinX?Y  nomresXBY ] new Strin( "!uan" )  nomresX=Y ] new Strin( "-epe" )  nomresXFY ] new Strin( "-edro" )  nomresXLY ] new Strin( "Maria" )

;o se pueden crear arrays estáticosen tiempo de compilaci$n/  int listaXABY enerará un error entiempo de compilaci$n*ampoco se puede rellenar un arraysin declarar el tama%o con el operadornew/

  int listaXY  #or( int i]B i ` > i44 )  listaXiY ] i

.s decir, todos los arrays en !ava son estáticos& -ara convertir un array en elequivalente a un array dinámico en 3344, se usa la clase vector, que permiteoperaciones de inserci$n, orrado, etc& en el array&

Operadores

29

Page 30: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 30/98

  Tutorial de Java

6os operadores de !ava son muy parecidos en estilo y #uncionamiento a los de 3&.n la siuiente tala aparecen los operadores que se utili+an en !ava, por ordende precedencia/

  & XY ()

  44 JJ  \ instanceo#   7 C  4 J  `` bb bbb  ` b `] b] ]] ]      /  ] op] (7] ] C] 4]J] etc&) ,

6os operadores numricos secomportan como esperamos/

  int 4 int ] int

6os operadores relacionales devuelvenun valor ooleano&

-ara las cadenas, se pueden utili+ar losoperadores relacionales paracomparaciones además de 4 y 4] parala concatenaci$n/  Strin nomre ] "nomre" 4"Epellido"

.l operador ] siempre hace copias deojetos, marcando los antiuos paraorrarlos, y ya se encarará el araecollector de devolver al sistema lamemoria ocupada por el ojetoeliminado&

SeparadoresS$lo hay un par de secuencias con otros caracteres que pueden aparecer en elc$dio !ava son los separadores simples, que van a de#inir la #orma y #unci$n delc$dio& 6os separadores admitidos en !ava son/

() J parntesis& -ara contener listas de parámetros en la de#inici$n y llamadaa mtodos& *amin se utili+a para de#inir precedencia en e2presiones, contenere2presiones para control de #lujo y rodear las conversiones de tipo&

30

Page 31: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 31/98

  Tutorial de Java

VW J llaves& -ara contener los valores de matrices iniciali+adasautomáticamente& *amin se utili+a para de#inir un loque de c$dio, para clases,mtodos y ámitos locales&

X Y J corchetes& -ara declarar tipos matri+& *amin se utili+a cuando sere#erencian valores de matri+&

J punto y coma& Separa sentencias&

, J coma& Separa identi#icadores consecutivos en una declaraci$n devariales& *amin se utili+a para encadenar sentencias dentro de una sentencia#or&

& J punto& -ara separar nomres de paquete de supaquetes y clases&*amin se utili+a para separar una variale o mtodo de una variale dere#erencia&

&.2 Contro% de 4%5oMuchas de las sentencias de control del #lujo del prorama se han tomado del 3/

Sentencias de Salto

i#else  i#( @oolean ) V  sentencias  W  else V  sentencias  W

switch

  switch( e2pr= ) V  case e2prF/  sentencias  reak  case e2prL/  sentencias  reak  de#ault/  sentencias  reak  W

31

Page 32: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 32/98

  Tutorial de Java

Sentencias de $ucle@ucles #or 

  #or( e2pr= inicio e2prF test e2prL incremento ) V  sentencias

  W

.l siuiente trocito de c$dio !ava que diuja varias líneas en pantalla alternandosus colores entre rojo, a+ul y verde& .ste #ramento sería parte de una #unci$n!ava (mtodo)/

  int contador  #or( contador]= contador `] =F contador44 ) V  switch( contador C L ) V  case B/  set3olor( 3olor&red )  reak  case =/  set3olor( 3olor&lue )  reak  case F/  set3olor( 3olor&reen )  reak  W  &draw6ine( =B,contador7=B,QB,contador7=B )  W

*amin se soporta el operador coma (,) en los ucles #or 

  #or( a]B,]B a ` 8 a44,4]F )

@ucles while

  while( @oolean ) V  sentencias  W

@ucles dowhile

  do V  sentencias  Wwhile( @oolean )

%&cepcionestryJcatchJthrow

32

Page 33: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 33/98

  Tutorial de Java

  try V  sentencias  W catch( .2ception ) V  sentencias  W

!ava implementa e2cepciones para #acilitar la construcci$n de c$dio rousto&3uando ocurre un error en un prorama, el c$dio que encuentra el error lan+auna e2cepci$n, que se puede capturar y recuperarse de ella& !ava proporcionamuchas e2cepciones prede#inidas&

!ontrol 'eneral del (lujo  reak XetiquetaY  continue XetiquetaY  return e2pr  etiqueta/ sentencia

.n caso de que nos encontremos con ucles anidados, se permite el uso deetiquetas para poder salirse de ellos, por ejemplo/

  uno/ #or( )  V  dos/ #or( )  V  continue seuiría en el ucle interno  continue uno seuiría en el ucle principal  reak uno se saldría del ucle principal  W  W

.n el c$dio de una #unci$n siempre hay que ser consecuentes con la declaraci$nque se haya hecho de ella& -or ejemplo, si se declara una #unci$n para quedevuelva un entero, es imprescindile que se coloque un return #inal para salir deesa #unci$n, independientemente de que haya otros en medio del c$dio quetamin provoquen la salida de la #unci$n& .n caso de no hacerlo se enerará unKarnin, y el c$dio !ava no se puede compilar con Karnins&

  int #unc()  V  i#( a ]] B )  return =  return B es imprescindile porque se retorna un entero  W

&.& C%ases

33

Page 34: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 34/98

  Tutorial de Java

6as clases son lo más simple de !ava& *odo en !ava #orma parte de una clase, esuna clase o descrie como #unciona una clase& .l conocimiento de las clases es#undamental para poder entender los proramas !ava&

*odas las acciones de los proramas !ava se colocan dentro del loque de una

clase o un ojeto& *odos los mtodos se de#inen dentro del loque de la clase,!ava no soporta #unciones o variales loales& .sto puede despistar a losproramadores de 344, que pueden de#inir mtodos #uera del loque de la clase,pero esta posiilidad es más un intento de no separarse mucho y ser compatilecon 3, que un uen dise%o orientado a ojetos& Esí pues, el esqueleto de cualquieraplicaci$n !ava se asa en la de#inici$n de una clase&

*odos los datos ásicos, como los enteros, se deen declarar en las clases antesde hacer uso de ellos& .n 3 la unidad #undamental son los #icheros con c$dio#uente, en !ava son las clases& 9e hecho son pocas las sentencias que se puedencolocar #uera del loque de una clase& 6a palara clave import (equivalente alDinclude) puede colocarse al principio de un #ichero, #uera del loque de la clase&Sin emaro, el compilador reempla+ará esa sentencia con el contenido del#ichero que se indique, que consistirá, como es de suponer, en más clases&

)ipos de !lases'asta ahora s$lo se ha utili+ado la palara clave pulic para cali#icar el nomre delas clases que hemos visto, pero hay tres modi#icadores más& 6os tipos de clasesque podemos de#inir son/astract<na clase astract tiene al menos un mtodo astracto& <na clase astracta no seinstancia, sino que se utili+a como clase ase para la herencia&

#inal<na clase #inal se declara como la clase que termina una cadena de herencia& ;ose puede heredar de una clase #inal& -or ejemplo, la clase Math es una clase #inal&

pulic6as clases pulic son accesiles desde otras clases, ien sea directamente o porherencia& Son accesiles dentro del mismo paquete en el que se han declarado&-ara acceder desde otros paquetes, primero tienen que ser importadas&

synchroni+ale.ste modi#icador especi#ica que todos los mtodos de#inidos en la clase sonsincroni+ados, es decir, que no se puede acceder al mismo tiempo a ellos desdedistintos threads el sistema se encara de colocar los #las necesarios paraevitarlo& .ste mecanismo hace que desde threads di#erentes se puedan modi#icarlas mismas variales sin que haya prolemas de que se soreescrian&

&.( Varia$%es # 67todos de Instancia

34

Page 35: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 35/98

  Tutorial de Java

<na clase en !ava puede contener variales y mtodos& 6as variales pueden sertipos primitivos como int, char, etc& 6os mtodos son #unciones&

-or ejemplo, en el siuiente tro+o de c$dio podemos oservarlo/

  pulic Mi3lase V  int i  pulicMi3lase() V  i ] =B  W  pulic voidSuma_a_i( int j ) V  i ] i 4 j  W  W

6a clase Mi3lasecontiene unavariale (i) y dosmtodos, Mi3laseque es elconstructor de laclase ySuma_a_i( int j )&

 Ambito de unavariable6os loques desentenciascompuestas en!ava se delimitancon dos llaves& 6as variales de !ava s$lo son válidas desde el punto donde estándeclaradas hasta el #inal de la sentencia compuesta que la enloa& Se puedenanidar estas sentencias compuestas, y cada una puede contener su propioconjunto de declaraciones de variales locales& Sin emaro, no se puededeclarar una variale con el mismo nomre que una de ámito e2terior&

.l siuiente ejemplo intenta declarar dos variales separadas con el mismonomre& .n 3 y 344 son distintas, porque están declaradas dentro de ámitosdi#erentes& .n !ava, esto es ileal&

3lass Emito V  int i ] = ámito e2terior   V crea un nuevo ámito  int i ] F error de compilaci$n  W

35

Page 36: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 36/98

  Tutorial de Java

  W

M*todos !onstructores6os mtodos son #unciones que pueden ser llamadas dentro de la clase o porotras clases& .l constructor es un tipo especí#ico de mtodo que siempre tiene el

mismo nomre que la clase&

3uando se declara una clase en !ava, se pueden declarar uno o másconstructores opcionales que reali+an la iniciali+aci$n cuando se instancia (se creauna ocurrencia) un ojeto de dicha clase&<tili+ando el c$dio de ejemplo anterior, cuando se crea una nueva instancia deMi3lase, se crean (instancian) todos los mtodos y variales, y se llama alconstructor de la clase/

  Mi3lase mc  mc ] new Mi3lase()

6a palara clave new se usa para crear una instancia de la clase& Entes de serinstanciada con new no consume memoria, simplemente es una declaraci$n detipo& 9espus de ser instanciado un nuevo ojeto mc, el valor de i en el ojeto mcserá iual a =B& Se puede re#erenciar la variale (de instancia) i con el nomre delojeto/

  mc&i44 incrementa la instancia de i de mc

 El tener mc todas las variales y mtodos de Mi3lase, se puede usar la primerasinta2is para llamar al mtodo Suma_a_i() utili+ando el nuevo nomre de clasemc/

  mc&Suma_a_i( =B )

y ahora la variale mc&i vale F=&

(inali"adores!ava no utili+a destructores (al contrario que344) ya que tiene una #orma de recoerautomáticamente todos los ojetos que sesalen del alcance& ;o ostante proporciona unmtodo que, cuando se especi#ique en elc$dio de la clase, el reciclador de memoria(arae collector) llamará/

  3ierra el canal cuando este ojeto esreciclado  protected void #inali+e() V  close()

36

Page 37: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 37/98

  Tutorial de Java

  W

&.8 A%cance de O$5etos # Recic%ado de 6e"oria6os ojetos tienen un tiempo de vida y consumen recursos durante el mismo&3uando un ojeto no se va a utili+ar más, deería lierar el espacio que ocupaa

en la memoria de #orma que las aplicaciones no la aoten (especialmente lasrandes)&.n !ava, la recolecci$n y lieraci$n de memoria es responsailidad de un threadllamado automatic arae collector (recolector automático de asura)& .stethread monitori+a el alcance de los ojetos y marca los ojetos que se han salidode alcance& :eamos un ejemplo/  Strin s no se ha asinado todavia  s ] new Strin( "ac" ) memoria asinada  s ] "de#" se ha asinado nueva memoria  (nuevo ojeto)Más adelante veremos en detalle la clase Strin, pero una reve descripci$n de loque hace esto es crear un ojeto Strin y rellenarlo con los caracteres "ac" ycrear otro (nuevo) Strin y colocarle los caracteres "de#"&

.n esencia se crean dos ojetos/

  0jeto Strin "ac"  0jeto Strin "de#"

 El #inal de la tercera sentencia, el primer ojeto creado de nomre s que contiene"ac" se ha salido de alcance& ;o hay #orma de acceder a l& Ehora se tiene unnuevo ojeto llamado s y contiene "de#"& .s marcado y eliminado en la siuienteiteraci$n del thread reciclador de memoria&

&.9 'erencia6a 'erencia es el mecanismo por el que se crean nuevos ojetos de#inidos entrminos de ojetos ya e2istentes& -or ejemplo, si se tiene la clase Eve, se puedecrear la suclase -ato, que es una especiali+aci$n de Eve&  class -ato e2tends Eve V  int numero_de_patas  W

6a palara clave e2tends se usa para enerar una suclase (especiali+aci$n) deun ojeto& <na -ato es una suclase de Eve& 3ualquier cosa que contena lade#inici$n de Eve será copiada a la clase -ato, además, en -ato se pueden de#inirsus propios mtodos y variales de instancia& Se dice que -ato deriva o hereda de

 Eve&

 Edemás, se pueden sustituir los mtodos proporcionados por la clase ase&<tili+ando nuestro anterior ejemplo de Mi3lase, aquí hay un ejemplo de una clasederivada sustituyendo a la #unci$n Suma_a_i()/

37

Page 38: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 38/98

  Tutorial de Java

  import Mi3lase  pulic class Mi;ueva3lase e2tends Mi3lase V  pulic void Suma_a_i( int j ) V  i ] i 4 ( jF )

  W  W

 Ehora cuando se crea una instancia de Mi;ueva3lase, el valor de i tamin seiniciali+a a =B, pero la llamada al mtodo Suma_a_i() produce un resultadodi#erente/

  Mi;ueva3lase mnc  mnc ] new Mi;ueva3lase()  mnc&Suma_a_i( =B )

.n !ava no se puede hacer herencia m5ltiple& -or ejemplo, de la clase aparato conmotor y de la clase animal no se puede derivar nada, sería como otener el ojetotoro mecánico a partir de una máquina motori+ada (aparato con motor) y un toro(aminal)& .n realidad, lo que se pretende es copiar los mtodos, es decir, pasar la#uncionalidad del toro de verdad al toro mecánico, con lo cual no sería necesaria laherencia m5ltiple sino simplemente la compartici$n de #uncionalidad que seencuentra implementada en !ava a travs de inter#aces&

&.: Contro% de Acceso3uando se crea una nueva clase en !ava, se puede especi#icar el nivel deacceso que se quiere para las variales de instancia y los mtodosde#inidos en la clase/

pulicpulic void 3ualquiera-uedeEcceder()VW

  3ualquier clase desde cualquier luar puede acceder a las variales ymtodos de instacia p5licos&

protectedprotected void SoloSu3lases()VW

  S$lo las suclases de la clase y nadie más puede acceder a lasvariales y mtodos de instancia proteidos&

privateprivate Strin ;umero9el3arnet9eIdentidad

38

Page 39: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 39/98

  Tutorial de Java

  6as variales y mtodos de instancia privados s$lo pueden ser accedidosdesde dentro de la clase& ;o son accesiles desde las suclases&#riendly (sin declaraci$n especí#ica)

void Metodo9eMi-aquete()VW

-or de#ecto, si no se especi#ica el control de acceso, las variales y mtodos deinstancia se declaran #riendly (amias), lo que sini#ica que son accesiles portodos los ojetos dentro del mismo paquete, pero no por los e2ternos al paquete&.s lo mismo que protected&

6os mtodos proteidos (protected) pueden ser vistos por las clases derivadas,como en 344, y tamin, en !ava, por los paquetes (packaes)& *odas las clasesde un paquete pueden ver los mtodos proteidos de ese paquete& -ara evitarlo,se deen declarar como private protected, lo que hace que ya #uncione como en344 en donde s$lo se puede acceder a las variales y mtodos proteidos de lasclases derivadas&

&.; Varia$%es # 67todos +st<ticos.n un momento determinado se puede querer crear una clase en la que el valorde una variale de instancia sea el mismo (y de hecho sea la misma variale) paratodos los ojetos instanciados a partir de esa clase& .s decir, que e2ista una 5nicacopia de la variale de instancia& Se usará para ello la palara clave static&

  class 9ocumento e2tends -aina V  static int version ] =B  W

.l valor de la variale version será el mismo para cualquier ojeto instanciado dela clase 9ocumento& Siempre que un ojeto instanciado de 9ocumento camie lavariale version, sta camiará para todos los ojetos&9e la misma #orma se puede declarar un mtodocomo estático, lo que evita que el mtodo puedaacceder a las variales de instancia no estáticas/

  class 9ocumento e2tends -aina V  static int version ] =B  int numero_de_capitulos  static void annade_un_capitulo() V  numero_de_capitulos44 esto no#unciona  W  static void modi#ica_version( int i ) V  version44 esto si #unciona  W  W

39

Page 40: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 40/98

  Tutorial de Java

6a modi#icaci$n de la variale numero_de_capitulos no #unciona porque se estáviolando una de las relas de acceso al intentar acceder desde un mtodo estáticoa una variale no estática&

*odas las clases que se derivan, cuando se declaran estáticas, comparten lamisma páina de variales es decir, todos los ojetos que se eneren compartenla misma +ona de memoria& 6as #unciones estáticas se usan para accedersolamente a variales estáticas&

  class <na3lase V  int var  <na3lase()  V  var ] A  W  <nauncion()  V  var 4] A  W  W

.n el c$dio anterior, si se llama a la#unci$n <nauncion a travs de unpuntero a #unci$n, no se podríaacceder a var, porque al utili+ar unpuntero a #unci$n no se pasaimplícitamente el puntero al propioojeto (this)& Sin emaro, sí sepodría acceder a var si #uese estática,porque siempre estaría en la misma posici$n de memoria para todos los ojetosque se creasen de <na3lase&

&.= t>is ? sper  El acceder a variales de instancia de una clase, la palara clave this hacere#erencia a los miemros de la propia clase& :olviendo al ejemplo de Mi3lase, sepuede a%adir otro constructor de la #orma siuiente/

  pulic class Mi3lase V  int i  pulic Mi3lase() V  i ] =B  W

40

Page 41: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 41/98

  Tutorial de Java

  .ste constructor estalece el valor de i  pulic Mi3lase( int valor ) V  this&i ] valor i ] valor   W  pulic void Suma_a_i( int j ) V

  i ] i 4 j  W  W

 Equí this&i se re#iere al entero i en la claseMi3lase&

Si se necesita llamar al mtodo padre dentro deuna clase que ha reempla+ado ese mtodo, sepuede hacer re#erencia al mtodo padre con lapalara clave super/

  import Mi3lase  pulic class Mi;ueva3lase e2tends Mi3lase V  pulic void Suma_a_i( int j ) V  i ] i 4 ( jF )  super&Suma_a_i( j )  W  W

.n el siuiente c$dio, el constructor estalecerá el valor de i a =B, despus locamiará a =A y #inalmente el mtodo Suma_a_i() de la clase padre (Mi3lase) lodejará en FA/

  Mi;ueva3lase mnc  mnc ] new Mi;ueva3lase()  mnc&Suma_a_i( =B )

&.1@ C%ases A$stractas<na de las características más 5tiles de cualquier lenuaje orientado a ojetos esla posiilidad de declarar clases que de#inen como se utili+a solamente, sin tenerque implementar mtodos& .sto es muy 5til cuando la implementaci$n esespecí#ica para cada usuario, pero todos los usuarios tienen que utili+ar losmismos mtodos& <n ejemplo de clase astracta en !ava es la clase 1raphics/

  pulic astract class 1raphics V  pulic astract void draw6ine( int 2=,int y=,int 2F,  int yF )  pulic astract void draw0val( int 2,int y,int width,  int heiht )  pulic astract void drawErc( int 2,int y,int width,

41

Page 42: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 42/98

  Tutorial de Java

  int heiht,int startEnle,int arcEnle )  & & &

W

6os mtodos se declaran en la clase 1raphics, pero el c$dio que ejecutará el

mtodo está en al5n otro sitio/

pulic class Mi3lase e2tends 1raphics V  pulic void draw6ine( int 2=,int y=,int 2F,int yF ) V  `c$dio para pintar líneas Jespecí#ico de

la arquitecturaJb  W  W

3uando una clase contiene un mtodo astracto tiene que declararse astracta&;o ostante, no todos los mtodos de una clase astracta tienen que serastractos& 6as clases astractas no pueden tener mtodos privados (no sepodrían implementar) ni tampoco estáticos& <na clase astracta tiene quederivarse oliatoriamente, no se puede hacer un new de una clase astracta&

<na clase astracta en !ava es lo mismo que en 344 virtual #unc() ] B lo queolia a que al derivar de la clase haya que implementar #or+osamente losmtodos de esa clase astracta&

&.11 Interaces6os mtodos astractos son 5tiles cuando se quiere que cada implementaci$n dela clase pare+ca y #uncione iual, pero necesita que se cree una nueva clase parautili+ar los mtodos astractos&

6os inter#aces proporcionan un mecanismo para astraer los mtodos a un nivelsuperior&

<n inter#ace contiene una colecci$n de mtodos que se implementan en otro luar&6os mtodos de una clase son pulic, static y #inal&6a principal di#erencia entre inter#ace y astract es que un inter#ace proporciona unmecanismo de encapsulaci$n de los protocolos de los mtodos sin #or+ar alusuario a utili+ar la herencia&

-or ejemplo/

  pulic inter#ace :ideo3lip V  comien+a la reproduccion del video

void play()  reproduce el clip en un ucle

void ucle()  detiene la reproduccion

42

Page 43: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 43/98

  Tutorial de Java

  void stop()  W

6as clases que quieran utili+ar el inter#ace :ideo3lip utili+arán la palaraimplements y proporcionarán el c$dio necesario para implementar los mtodos

que se han de#inido para el inter#ace/

  class Mi3laseimplements :ideo3lip V  void play() V  `c$diob  W  void ucle() V  `c$diob  W  void stop() V  `c$diob  W

 El utili+ar implements parael inter#ace es como si sehiciese una acci$n decopiarJyJpear del c$diodel inter#ace, con lo cual nose hereda nada, solamentese pueden usar losmtodos&

6a ventaja principal del usode inter#aces es que unaclase inter#ace puede serimplementada por cualquiern5mero de clases,permitiendo a cada clasecompartir el inter#a+ deproramaci$n sin tener que ser consciente de la implementaci$n que haan lasotras clases que implementen el inter#ace&

  class Mi0tra3lase implements :ideo3lip V  void play() V  `c$dio nuevob  W  void ucle() V  `c$dio nuevob  W  void stop() V  `c$dio nuevob

43

Page 44: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 44/98

  Tutorial de Java

  W

&.12 67todos Nativos!ava proporciona un mecanismo para la llamada a #unciones 3 y 344 desde

nuestro c$dio #uente !ava& -ara de#inir mtodos como #unciones 3 o 344 seutili+a la palara clave native&

  pulic class echa V  int ahora  pulic echa() V  ahora ] time()  W  private native int time()  static V  System&load6irary( "time" )  W  W

<na ve+ escrito el c$dio !ava, se necesitan ejecutar los pasos siuientes parapoder interar el c$dio 3 o 344/

29* <tili+ar javah para crear un #ichero de caecera (&h)30* <tili+ar javah para crear un #ichero de stus, es decir, que contiene la

declaraci$n de las #unciones31* .scriir el c$dio del mtodo nativo en 3 o 344, es decir, rellenar el c$dio

de la #unci$n, completando el traajo de javah al crear el #ichero de stus32* 3ompilar el #ichero de stus y el #ichero &c en una lirería de cara dinámica

(966 en Kindows U>A o liOO&so en <ni2)33* .jecutar la aplicaci$n con el appletviewer

Más adelante trataremos en pro#undidad los mtodos nativos, porque a%aden unaran potencia a !ava, al permitirle interar a travs de lirería dinámica cualquieraloritmo desarrollado en 3 o 344, lo cual, entre otras cosas, se utili+a comomtodo de protecci$n contra la descompilaci$n completa del c$dio !ava&

&.1& aBetes6a palara clave packae permite arupar clases e inter#aces& 6os nomres de lospaquetes son palaras separadas por puntos y se almacenan en directorios quecoinciden con esos nomres& -or ejemplo, los #icheros siuientes, que contienenc$dio #uente !ava/

 Epplet&java, Epplet3onte2t&java, EppletStu&java, Eudio3lip&java

44

Page 45: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 45/98

  Tutorial de Java

contienen en su c$dio la línea/

  packae java&applet

P las clases que se otienen de la compilaci$n de los #icheros anteriores, se

encuentran con el nomre nomre_de_clase&class, en el directorio/

 javaapplet

Import 6os paquetes de clases se caran con la palara clave import, especi#icando elnomre del paquete como ruta y nomre de clase (es lo mismo que Dinclude de3344)& Se pueden carar varias clases utili+ando un asterisco&

  import java&9ate  import java&awt&7

Si un #ichero #uente !ava no contiene nin5n packae, se coloca en el paquete porde#ecto sin nomre& .s decir, en el mismo directorio que el #ichero #uente, y laclase puede ser carada con la sentencia import/

  import Mi3lase

Paquetes de +ava.l lenuaje !ava proporciona una serie de paquetes que incluyen ventanas,utilidades, un sistema de entradasalida eneral, herramientas y comunicaciones&.n la versi$n actual del !9G, los paquetes !ava que se incluyen son/

 java&applet.ste paquete contiene clases dise%adas para usar con applets& 'ay una clase

 Epplet y tres inter#aces/ Epplet3onte2t, EppletStu y Eudio3lip&

 java&awt.l paquete Estract Kindowin *oolkit (awt) contiene clases para enerar widetsy componentes 1<I (Inter#a+ 1rá#ico de <suario)& Incluye las clases @utton,3hecko2, 3hoice, 3omponent, 1raphics, Menu, -anel, *e2tErea y *e2tield&

 java&io.l paquete de entradasalida contiene las clases de acceso a #icheros/ileInputStream y ile0utputStream&

 java&lan.ste paquete incluye las clases del lenuaje !ava propiamente dicho/ 0ject,*hread, .2ception, System, Inteer, loat, Math, Strin, etc&

 java&net

45

Page 46: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 46/98

  Tutorial de Java

.ste paquete da soporte a las cone2iones del protocolo *3-I- y, además, incluyelas clases Socket, <H6 y <H63onnection&

 java&util.ste paquete es una miscelánea de clases 5tiles para muchas cosas en

proramaci$n& Se incluyen, entre otras, 9ate (#echa), 9ictionary (diccionario),Handom (n5meros aleatorios) y Stack (pila I0)&

&.1( Reerencias!ava se asemeja mucho a 3 y 344& .sta similitud, evidentemente intencionada, esla mejor herramienta para los proramadores, ya que #acilita en ran manera sutransici$n a !ava& 9esa#ortunadamente, tantas similitudes hacen que no nosparemos en alunas di#erencias que son vitales& 6a terminoloía utili+ada en estoslenuajes, a veces es la misma, pero hay randes di#erencias suyacentes en susini#icado&

3 tiene tipos de datos ásicos y punteros& 344 modi#ica un poco este panorama yle a%ade los tipos re#erencia& !ava tamin especi#ica sus tipos primitivos, eliminacualquier tipo de punteros y tiene tipos re#erencia mucho más claros&

*odo este maremánum de terminoloía provoca cierta consternaci$n, así quevamos a intentar aclarar lo que realmente sini#ica&3onocemos ya ampliamente todos los tipos ásicos de datos/ datos ase,interados, primitivos e internos que son muy semejantes en 3, 344 y !avaaunque !ava simpli#ica un poco su uso a los desarrolladores haciendo que elchequeo de tipos sea astante más ríido& Edemás, !ava a%ade los tipos ooleany hace imprescindile el uso de este tipo ooleano en sentencias condicionales&

(. RORA6A) 3)ICO) +N JAVA

(.1 Una "íni"a ap%icaci0n en 5ava6a aplicaci$n más peque%a posile es la que simplemente imprimir un mensaje enla pantalla& *radicionalmente, el mensaje suele ser "'ola Mundo"& .sto es

 justamente lo que hace el siuiente #ramento de c$dio/

    Eplicaci$n 'olaMundo de ejemplo    class 'olaMundoEpp V  pulic static void main( Strin arsXY ) V  System&out&println( "'ola Mundo" )   W  W

46

Page 47: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 47/98

  Tutorial de Java

,olaMundo:amos ver en detalle la aplicaci$n anterior, línea a línea& .sas líneas de c$diocontienen los componenetes mínimos para imprimir 'ola Mundo en la pantalla&

    Eplicaci$n 'olaMundo de ejemplo 

.stas tres primera líneas son comentarios& 'ay tres tipos de comentarios en!ava, es un comentario orientado a línea&

  class 'olaMundoEpp V.sta línea declara la clase 'olaMundoEpp& .l nomre de la clase especi#icado enel #ichero #uente se utili+a para crear un #ichero nomredeclase&class en eldirectorio en el que se compila la aplicaci$n& .n nuestro caso, el compilador crearáun #ichero llamado 'olaMundoEpp&class&  pulic static void main( Strin arsXY ) V

.sta línea especi#ica un mtodo que el intrprete !ava usca para ejecutar enprimer luar& Iual que en otros lenuajes, !ava utili+a una palara clave main paraespeci#icar la primera #unci$n a ejecutar& .n este ejemplo tan simple no se pasanarumentos&

pulic sini#ica que el mtodo main puede ser llamado por cualquiera, incluyendoel intrprete !ava&static es una palara clave que le dice al compilador que main se re#iere a lapropia clase 'olaMundoEpp y no a ninuna instancia de la clase& 9e esta #orma, sialuien intenta hacer otra instancia de la clase, el mtodo main no se instanciaría&

void indica que main no devuelve nada& .sto es importante ya que !ava reali+auna estricta comproaci$n de tipos, incluyendo los tipos que se ha declarado quedevuelven los mtodos&

arsXY es la declaraci$n de un array de Strins& .stos son los arumentos escritostras el nomre de la clase en la línea de comandos/

Cjava 'olaMundoEpp ar= arF &&&

  System&out&println( "'ola Mundo" )

.sta es la #uncionalidad de la aplicaci$n& .sta línea muestra el uso de un nomrede clase y mtodo& Se usa el mtodo println() de la clase out que está en elpaquete System&

47

Page 48: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 48/98

  Tutorial de Java

.l mtodo println() toma una cadena como arumento y la escrie en el stream desalida estándar en este caso, la ventana donde se lan+a la aplicaci$n&  W  W

inalmente, se cierran las llaves que limitan el mtodo main() y la clase'olaMundoEpp&

!ompilacion %jecucion de ,olaMundo:amos a ver a continuaci$n como podemos ver el resultado de nuestra primeraaplicaci$n !ava en pantalla& 1eneraremos un #ichero con el c$dio #uente de laaplicaci$n, lo compilaremos y utili+aremos elintrprete java para ejecutarlo&

icheros uente !ava6os #icheros #uente en !ava terminan con lae2tensi$n "&java"& 3rear un #ichero utili+andocualquier editor de te2to ascii que tena comocontenido el c$dio de las ocho líneas denuestra mínima aplicaci$n, y salvarlo en un#ichero con el nomre de'olaMundoEpp&java& -ara crear los #icheroscon c$dio #uente !ava no es necesario unprocesador de te2tos, aunque puede utili+arsesiempre que tena salida a #ichero de te2toplano o ascii, sino que es su#iciente concualquier otro editor&

3ompilaci$n.l compilador javac se encuentra en eldirectorio in por deajo del directorio java, donde se haya instalado el !9G& .stedirectorio in, si se han seuido las instrucciones de instalaci$n, deería #ormarparte de la variale de entorno -E*' del sistema& Si no es así, tendría que revisarla Instalaci$n del !9G& .l compilador de !ava traslada el c$dio #uente !ava ayteJcodes, que son los componentes que entiende la Máquina :irtual !ava queestá incluida en los naveadores con soporte !ava y en appletviewer&

<na ve+ creado el #ichero #uente 'olaMundoEpp&java, se puede compilar con lalínea siuiente/

Cjavac 'olaMundoEpp&java

Si no se han cometido errores al teclear ni se han tenido prolemas con el path al#ichero #uente ni al compilador, no deería aparecer mensaje aluno en la pantalla,

48

Page 49: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 49/98

  Tutorial de Java

y cuando vuelva a aparecer el prompt del sistema, se deería ver un #ichero'olaMundoEpp&class nuevo en el directorio donde se encuentra el #ichero #uente&

Si ha haido al5n prolema, en -rolemas de compilaci$n al #inal de estasecci$n, hemos intentado reproducir los que más #recuentemente se suelen dar,

se pueden consultar por si pueden aportar un poco de lu+ al error que hayaaparecido&

.jecuci$n-ara ejecutar la aplicaci$n 'olaMundoEpp, hemos de recurrir al intrprete java,que tamin se encuentra en el directorio in, ajo el directorio java& Se ejecutarála aplicaci$n con la línea/

Cjava 'olaMundoEppy deería aparecer en pantalla larespuesta de !ava/C'ola Mundo

.l símolo C representa al prompt delsistema, y lo utili+aremos parapresentar las respuestas que noso#re+ca el sistema como resultado de laejecuci$n de los comandos que seindiquen en pantalla o para indicar laslíneas de comandos a introducir&

Problemas de compilaci-n E continuaci$n presentamos una listade los errores más #recuentes que sepresentan a la hora de compilar un #ichero con c$dio #uente !ava, nos asaremosen errores provocados sore nuestra mínima aplicaci$n !ava de la secci$nanterior, pero podría enerali+arse sin demasiados prolemas&

Cjavac/ 3ommand not #ound

;o se ha estalecido correctamente la variale -E*' del sistema para elcompilador javac& .l compilador javac se encuentra en el directorio in, que cueladel directorio java, que cuela del directorio donde se haya instalado el !9G (!ava9evelopment Git)&

C'olaMundoEpp&java/L/ Method printl(java&lan&Strin) not #ound in class java&io&-rintStream& System&out&printl( "'olaMundo) 

34* .rror tiporá#ico, el mtodo es println no printl&

49

Page 50: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 50/98

  Tutorial de Java

CIn class 'olaMundoEpp/ main must e pulic and static

35* .rror de ejecuci$n, se olvid$ colocar la palara static en la declaraci$n delmtodo main de la aplicaci$n&

C3ant #ind class 'olaMundoEpp

.ste es un error muy sutil& 1eneralmente sini#ica que el nomre de la clase esdistinto al del #ichero que contiene el c$dio #uente, con lo cual el #icheronomre_#ichero&class que se enera es di#erente del que caría esperar& -orejemplo, si en nuestro #ichero de c$dio #uente de nuestra aplicaci$n'olaMundoEpp&java colocamos en ve+ de la declaraci$n actual de la clase'olaMundoEpp, la línea/

  class 'olaMundoapp V

se creará un #ichero 'olaMundoapp&class, que es di#erente del'olaMundoEpp&class, que es el nomre esperado de la clase la di#erencia seencuentra en la a min5scula y may5scula&(.2 +% Visor de app%ets de )n app%etvieerE.l visuali+ador de applets (appletviewer) es una aplicaci$n que permite ver en#uncionamiento applets, sin necesidad de la utili+aci$n de un naveador KorldJKideJKe como 'ot!ava, Microso#t .2plorer o ;escape& .n adelante,recurriremos muchas veces a l, ya que el ojetivo del tutorial es el lenuaje !ava&

 Applet 6a de#inici$n más e2tendida de applet, muy ien resumida por -atrick ;auhton,

indica que un applet es "unapeque%a aplicaci$n accesile en unservidor Internet, que se transportapor la red, se instalaautomáticamente y se ejecuta in situcomo parte de un documento we"&3laro que así la de#inici$n estaleceel entorno (Internet, Ke, etc&)& .nrealidad, un applet es una aplicaci$npretendidamente corta (nada impideque ocupe más de un iayte, a noser el pensamiento de que se va atransportar por la red y una mentesensata) asada en un #ormatorá#ico sin representaci$nindependiente/ es decir, se trata deun elemento a emeer en otrasaplicaciones es un componente ensu sentido estricto&

50

Page 51: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 51/98

  Tutorial de Java

<n ejemplo en otro ámito de cosas podría ser el siuiente/ Imainemos unaempresa, que cansada de empe+ar siempre a codi#icar desde cero, dise%a un#ormulario con los datos ásicos de una persona (nomre, direcci$n, etc&)& *al#ormulario no es un diáloo por sí mismo, pero se podría interar en diáloos declientes, proveedores, empleados, etc&

.l hecho de que se intere estática (emeido en un ejecutale) o dinámicamente(intrpretes, 966s, etc&) no a#ecta en asoluto a la esencia de su comportamientocomo componente con que construir diáloos con sentido aut$nomo&

-ues ien, así es un applet& 6o que ocurre es que, dado que no e2iste una aseadecuada para soportar aplicaciones industriales !ava en las que insertar nuestrasminiaplicaciones (aunque todo se andará), los applets se han construidomayoritariamente, y con ran acierto comercial (parece), como peque%asaplicaciones interactivas, con movimiento, luces y sonido&&& en Internet&

#lamadas a Applets con appletvie.er <n applet es una mínima aplicaci$n !ava dise%ada para ejecutarse en unnaveador Ke& -or tanto, no necesita preocuparse por un mtodo main() ni end$nde se reali+an las llamadas& .l applet asume que el c$dio se está ejecutandodesde dentro de un naveador&

.l appletviewer se asemeja al mínimo naveador& .spera como arumento elnomre del #ichero html que dee carar, no se le puede pasar directamente unprorama !ava& .ste #ichero html dee contener una marca que especi#ica elc$dio que carará el appletviewer/

  `'*M6b  `E--6.* 309.]'olaMundo&class KI9*']LBB '.I1'*]=BBb  `E--6.*b  `'*M6b

.l appletviewer crear un espacio de naveaci$n, incluyendo un área rá#ica,donde se ejecutará el applet, entonces llamará a la clase applet apropiada& .n elejemplo anterior, el appletviewer carará una clase de nomre 'olaMundo y lepermitirá traajar en su espacio rá#ico&

 Arquitectura de appletvie.er .l appletviewer representa el mínimo inter#a+ de naveaci$n& .n la #iura semuestran los pasos que seuiría appletviewer para presentarnos el resultado de laejecuci$n del c$dio de nuestra clase&

.sta es una visi$n simpli#icada del appletviewer& 6a #unci$n principal de estaaplicaci$n es proporcionar al usuario un ojeto de tipo 1raphics sore el quediujar, y varias #unciones para #acilitar el uso del ojeto 1raphics&

51

Page 52: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 52/98

  Tutorial de Java

!iclo de vidade un Applet 3uando unapplet secara en elappletviewer,comien+a suciclo de vida,que pasaríapor lassiuientes#ases/

Se crea unainstancia de laclase quecontrola elapplet& .n elejemplo de la#iura anterior,sería la clase 'olaMundo&

.l applet se inciali+a&

.l applet comien+a a ejecutarse&

.l applet empie+a a reciir llamadas& -rimero recie una llamada init (iniciali+ar),seuida de un mensaje start (empe+ar) y paint (pintar)& .stas llamadas pueden serreciidas asíncronamente&

52

Page 53: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 53/98

  Tutorial de Java

(.& +scri$ir App%ets Java-ara escriir applets !ava, hay que utili+ar una serie de mtodos, alunos de loscuales ya se hay sumariado al halar de los mtodos del appletviewer, que es el

visuali+ador de applets de Sun& Incluso para el applet más sencillo necesitaremosvarios mtodos& Son los que se usan para arrancar (start) y detener (stop) laejecuci$n del applet, para pintar (paint) y actuali+ar (update) la pantalla y paracapturar la in#ormaci$n que se pasa al applet desde el #ichero '*M6 a travs de lamarca E--6.*&

init / 0.sta #unci$n miemro es llamada al crearse el applet& .s llamada s$lo una ve+& 6aclase Epplet no hace nada en init()& 6as clases derivadas deen sorecarar estemtodo para camiar el tama%o durante su iniciali+aci$n, y cualquier otrainiciali+aci$n de los datos que solamente dea reali+arse una ve+& 9eeríanreali+arse al menos las siuientes acciones/

  3ara de imáenes y sonido.l resi+e del applet para que tena su tama%o correcto

 Esinaci$n de valores a las variales loales

-or ejemplo/

  pulic void init() V  i#( width ` FBB heiht ` FBB )

resi+e( FBB,FBB )  valor_loal= ] B  valor_loalF ] =BB

  cararemos imáenes en memoria sin mostrarlas  cararemos m5sica de #ondo en memoria sin reproducirla  W

destro / 0.sta #unci$n miemro es llamada cuando el applet no se va a usar más& 6a clase

 Epplet no hace nada en este mtodo& 6as clases derivadas deeríansorecararlo para hacer una limpie+a #inal& 6os applet multithread deerán usardestroy() para "matar" cuanquier thread del applet que quedase activo&

start / 06lamada para activar el applet& .sta #unci$n miemro es llamada cuando se visitael applet& 6a clase Epplet no hace nada en este mtodo& 6as clases derivadasdeerían sorecararlo para comen+ar una animaci$n, sonido, etc&

  pulic void start() V  esta9etenido ] #alse

53

Page 54: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 54/98

  Tutorial de Java

  comen+ar la reproducci$n de la m5sica  music3lip&play()  W

*amin se puede utili+ar start() para eliminar cualquier thread que se necesite&

stop / 06lamada para detener el applet& Se llama cuando el applet desaparece de lapantalla& 6a clase Epplet no hace nada en este mtodo& 6as clases derivadasdeerían sorecararlo para detener la animaci$n, el sonido, etc&

  pulic void stop() V  esta9etenido ] true

  i#( 7 Rse está reproduciendo m5sica 7 )  music3lip&stop()  W

resi"e / int .idth1int height 0.l mtodo init() deería llamar a esta #unci$n miemro para estalecer el tama%odel applet& -uede utili+ar las variales ancho y alto, pero no es necesario& 3amiarel tama%o en otro sitio que no sea init() produce un re#ormateo de todo eldocumento y no se recomienda&

.n el naveador ;etscape, el tama%o del applet es el que se indica en la marca E--6.* del '*M6, no hace caso a lo que se indique desde el c$dio !ava delapplet&

.idth:ariale entera, su valor es el ancho de#inido en el parámetro KI9*' de la marca'*M6 del E--6.*& -or de#ecto es el ancho del icono&

height :ariale entera, su valor es la altura de#inida en el parámetro '.I1'* de la marca'*M6 del E--6.*& -or de#ecto es la altura del icono& *anto width como heihtestán siempre disponiles para que se puede chequear el tama%o del applet&

-odemos retomar el ejemplo de init()/

  pulic void init() V  i#( width ` FBB heiht ` FBB )

resi+e( FBB,FBB )  &&&

 paint/ 'raphics g 0Se llama cada ve+ que se necesita re#rescar el área de diujo del applet& 6a clase

 Epplet simplemente diuja una caja con somreado de tres dimensiones en el

54

Page 55: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 55/98

  Tutorial de Java

área& 0viamente, la clase derivada deería sorecarar este mtodo pararepresentar alo inteliente en la pantalla&

-ara repintar toda la pantalla cuando llea un evento -aint, se pide el rectánulosore el que se va a aplicar paint() y si es más peque%o que el tama%o real del

applet se invoca a repaint(), que como va a hacer un update(), se actuali+ará todala pantalla&

-odemos utili+ar paint() para imprimir nuestro mensaje de ienvenida/

  void pulic paint( 1raphics ) V  &drawStrin( "'ola !ava",FA,FA )  9iujaremos la imáenes que necesitemos  W

update/ 'raphics g 0.sta es la #unci$n que se llama realmente cuando se necesita actuali+ar lapantalla& 6a clase Epplet simplemente limpia el área y llama al mtodo paint()& .sta#uncionalidad es su#iciente en la mayoría de los casos& 9e cualquier #orma, lasclases derivadas pueden sustituir esta #uncionalidad para sus prop$sitos&

-odemos, por ejemplo, utili+ar update() para modi#icar selectivamente partes delárea rá#ica sin tener que pintar el área completa/

  pulic void update( 1raphics ) V  i#( estaEctuali+ado )  V  &clear() aranti+a la pantalla limpia  repaint() podemos usar el mtodo padre/ super&update()  W  else  In#ormaci$n adicional  &drawStrin( "0tra in#ormaci$n",FA,AB )

W

repaint/0 E esta #unci$n se la deería llamar cuando el applet necesite ser repintado& ;odeería sorecararse, sino dejar que !ava repinte completamente el contenidodel applet&

 El llamar a repaint(), sin parámetros, internamente se llama a update() que orraráel rectánulo sore el que se rediujará y lueo se llama a paint()& 3omo arepaint() se le pueden pasar parámetros, se puede modi#icar el rectánulo arepintar&

getParameter / String attr 0

55

Page 56: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 56/98

  Tutorial de Java

.ste mtodo cara los valores parados al applet vía la marca E--6.* de '*M6&

.l arumento Strin es el nomre del parámetro que se quiere otener& 9evuelveel valor que se le haya asinado al parámetro en caso de que no se le hayaasinado ninuno, devolverá null&

-ara usar et-arameter(), se de#ine una cadena enrica& <na ve+ que se hacapturado el parámetro, se utili+an mtodos de cadena o de n5meros paraconvertir el valor otenido al tipo adecuado&

  pulic void init() V  Strin pv

  pv ] et-arameter( "velocidad" )  i#( pv ]] null )  velocidad ] =B  else  velocidad ] Inteer&parseInt( pv )  W

getDocument$ase / 0Indica la ruta http, o el directorio del disco, de dondese ha recoido la páina '*M6 que contiene elapplet, es decir, el luar donde está la hoja en todoInternet o en el disco&

get!ode$ase / 0Indica la ruta http, o el directorio del disco, de dondese ha carado el c$dio ytecode que #orma el applet,es decir, el luar donde está el #ichero &class en todoInternet o en el disco&

 print / 'raphics g 0-ara imprimir en impresora, al iual que paint() se puede utili+ar print(), quepintará en la impresora el mapa de its del diujo&

8. +* D+URADOR D+ JAVA F 5d$

.l depurador de !ava, jd es un depurador de línea de comandos, similar al queSun proporciona en sus Sistemas, d2& .s complicado de utili+ar y un tantocríptico, por lo que, en principio, tiene escasa practicidad y es necesaria unaverdadera emerencia para tener que recurrir a l&

*rataremos por encima los comandos que proporciona el jd, pero sin entrar endetalles de su #uncionamiento, porque no merece la pena& 3asi es mejor esperar adisponer de herramientas visuales para poder depurar con cierta comodidadnuestro c$dio !ava&

56

Page 57: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 57/98

  Tutorial de Java

-ara poder utili+ar el depurador, las aplicaciones !ava deen estar compiladas conla opci$n de depuraci$n activada, J& -osteriormente se puede lan+ar appletviewercon la opci$n de depuraci$n, deu, y haremos puesto en marcha jd&

8.1 Deprar 'o%a6ndo'emos modi#icado nuestro applet de ejemplo para utili+arlo en nuestra sesi$n deejemplo con el depurador& Se compilaría con el comando/

Cjavac J hm&java

y el contenido de nuestro applet 'olaMundo modi#icado y uardado en el #icherohm&java sería el siuiente/    Epplet 'olaMundo de ejemplo, para depurar     import java&awt&1raphics  import java&applet&Epplet

  pulic class hm e2tends Epplet V  int i

  pulic void paint( 1raphics ) V  i ] =B  &drawStrin( "'ola Mundo",FA,FA )  W  W<na ve+ compilado, iniciamos la sesi$n lan+ando elvisor de applets de Sun con la opci$n de depuraci$n,utili+ando el comando/

Cappletviewer Jdeu hm&html

.l #ichero hm&html contiene las líneas mínimas parapoder activar el applet, estas líneas son las que reproducimos/

  `htmlb  `applet code]hm&class width]=BB heiht]=BBb  `appletb  `htmlb

Se inicia pues la sesi$n con el depurador y vamos a ir reproduciendo lo queaparece en la pantalla a medida que vamos introduciendo comandos/

Cappletviewer Jdeu hm&html6oadin jd&&&

57

Page 58: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 58/98

  Tutorial de Java

B2eeLB=#B/class(sun&applet&Epplet:iewer)b

8.2 Co"ando >e%p

.l comando help proporciona una lista de los comandos que están disponiles enla sesi$n de jd& .sta lista es la que siue, en donde hemos aprovechado lapresencia de todos los comandos para comentar la acci$n que cada uno de elloslleva a cao&

bhelp77 command list 77threads XthreadroupY JJ lista threadsthread `thread idb JJ estalece el thread por de#ectosuspend Xthread id(s)Y JJ suspende threads (por de#ecto, todos)resume Xthread id(s)Y JJ contin5a threads (por de#ecto, todos)where Xthread idYall JJ muestra la pila de un threadthreadroups JJ lista los rupos de threadsthreadroup `nameb JJ estalece el rupo de thread actualprint `idb Xid(s)Y JJ imprime un ojeto o campodump `idb Xid(s)Y JJ imprime toda la in#ormaci$n del ojetolocals JJ imprime las variales locales de la pila actualclasses JJ lista las clases conocidasmethods `class idb JJ lista los mtodos de una clasestop in `class idb&`methodb JJ #ija un punto de ruptura en un mtodostop at `class idb/`lineb JJ estalece un punto de ruptura en una líneaup Xn #ramesY JJ ascender en la pila de threadsdown Xn #ramesY JJ descender en la pila de threadsclear `class idb/`lineb JJ eliminar un punto de rupturastep JJ ejecutar la línea actualcont JJ continuar la ejecuci$n desde el punto de rupturacatch `class idb JJ parar por la e2cepci$n especi#icadainore `class idb JJ inorar la e2cepci$n especi#icadalist Xline numerY JJ imprimir c$dio #uenteuse Xsource #ile pathY JJ ver o camiar la ruta del #ichero #uentememory JJ in#orme del uso de la memoriaload `classnameb J cara la clase !ava a ser depuradarun `arsb J comien+a la ejecuci$n de la clase carada J repite el 5ltimo comandohelp (or ) J lista los comandose2it (or quit) J salir del depurador b

8.& Co"ando t>readgrops.l comando threadroups permite ver la lista de threads que se están ejecutando&6os rupos system y main deerían estar siempre corriendo&

58

Page 59: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 59/98

  Tutorial de Java

bthreadroups=&(java&lan&*hread1roup)B2eeLBBBZQ systemF&(java&lan&*hread1roup)B2eeLBBa>Q mainb

8.( Co"ando t>reads.l comando threads se utili+a para ver la lista completa de los threads que seestán ejecutando actualmente&

bthreads1roup system/=&(java&lan&*hread)B2eeLBBB>Q clock handler condF&(java&lan&*hread)B2eeLBBAAQ Idle thread runL&(java&lan&*hread)B2eeLBBAdB sync 1arae 3ollector cond?&(java&lan&*hread)B2eeLBBZFB inali+er thread condA&(java&lan&*hread)B2eeLBBaFB 9euer aent runZ&(java&tools&deu&@reakpoint'andler)B2eeLBBAQ) @reakpoint handler cond1roup main/8&(java&lan&*hread)B2eeLBBB?Q main suspendedb

8.8 Co"ando rn.l comando run es el que se utili+a para arrancar el appletviewer en la sesi$n dedepuraci$n& 6o teclearemos y lueo volveremos a listar los threads que hay enejecuci$n&brunrun sun&applet&Epplet:iewer hm&htmlrunnin&&&mainX=Ythreadsthreads1roup sun&applet&Epplet:iewer&main/=&(java&lan&*hread)B2eeLBBBcB EK*JMoti# runninF&(sun&awt&Screen<pdater)B2eeLBFedB Screen<pdater cond& Kaitin1roup appletJhm&class/L&(java&lan&*hread)B2eeLBF#LQ *hreadJZ cond& KaitinmainX=Y

.l visor de applets de Sun aparecerá en la pantalla y mostrará el conocidomensaje de saludo al Mundo& Ehora vamos a rearrancar el appletviewer con unpunto de ruptura, para detener la ejecuci$n del applet, y podamos seuirmostrando los comandos disponiles en el jd&mainX=Ye2itCappletviewer Jdeu hm&html6oadin jd&&&

59

Page 60: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 60/98

  Tutorial de Java

B2eeLBB>cQ/class(sun&applet&Epplet:iewer)bstop in hm&paint@reakpoint set in hm&paintbrunrun sun&applet&Epplet:iewer hm&html

runnin&&&@reakpoint hit/ hm&paint(hm&java/>) EK*JMoti#X=Y8.9 Co"ando >ere.l comando where mostrará la pila de ejecuci$n del applet&

 EK*JMoti#X=YwhereX=Yhm&paint(hm&java/>)XFYsun&awt&moti#&M3omponent-eer&paint(M3omponenet-eer&java/=B>)XLYsun&awt&moti#&M3omponent-eer&handle.2pose(M3omponenet-eer&java/=8B)

 EK*JMoti#X=Y

8.: Co"ando se.l comando use nos in#orma del camino donde jd va a uscar los #icheros #uentesque contienen el c$dio !ava de las clases que se están depurando& -or de#ecto,utili+ará el camino que se especi#ique en la variale de entorno 36ESS-E*'&

 EK*JMoti#X=Yuseusrlocaljavaclasses/

 EK*JMoti#X=Y

8.; Co"ando %ist.l comando list mostrará el c$dio #uente actual al comien+o del punto de rupturaque hayamos #ijado&

 EK*JMoti#X=Ylist> pulic void paint( 1raphics ) V=B ]b i ] =B== &drawStrin( "'ola Mundo",FA,FA ) =F W=L W

 EK*JMoti#X=Y

8.= Co"ando d"p.l comando dump nos permitirá ahora ver el valor del ojeto pasado desde elappletviewer&

 EK*JMoti#X=Ydump ] (sun&awt&moti#&O==1raphics)B2eeLBLd#Q V

60

Page 61: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 61/98

  Tutorial de Java

  int p9ata ] =L?F?QB  3olor #oreround ] (java&awt&3olor)B2eeLBFL8Q  ont #ont ] (java&awt&ont)B2eeLBF=LQ  int oriinO ] B  int oriinP ] B

  #loat scaleO ] =  #loat scaleP ] =  Imae imae ] nullW

 EK*JMoti#X=Y

8.1@ Co"ando step.l comando step nos porporciona el mtodo para ejecutar la línea actual, queestará siendo apuntada por el indicador si hemos utili+ado el comando list&

 EK*JMoti#X=Ystep@reakpoint hit/ hm&paint(hm&java/==)

 EK*JMoti#X=Ylist> pulic void paint( 1raphics ) V=B i ] =B== ]b &drawStrin( "'ola Mundo",FA,FA )=F W=L W

 EK*JMoti#X=Y

9. A-T

9.1 Introdcci0n a% A-T EK* es el acr$nimo del O Kindow *oolkit para !ava,donde O puede ser cualquier cosa/ Estract,

 Elternative, Ewkward, Enother o Esqueroso aunqueparece que Sun se decanta por Estracto, seriedad por encima de todo& Se tratade una ilioteca de clases !ava para el desarrollo de Inter#aces de <suario1rá#icas& 6a versi$n del EK* que Sun proporciona con el !9G se desarroll$ ens$lo dos meses y es la parte más dil de todo lo que representa !ava comolenuaje& .l entorno que o#rece es demasiado simple, no se han tenido en cuentalas ideas de entornos rá#icos novedosos, sino que se ha ahondado en estructurasorientadas a eventos, llenas de callacks y sin soporte aluno del entorno para laconstrucci$n rá#ica veremos que la simple acci$n de colocar un diujo sore unot$n se vuelve una tarea harto complicada& Tui+á la presi$n de tener que lan+aralo al mercado haya tenido mucho que ver en la pore+a de EK*&

61

Page 62: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 62/98

  Tutorial de Java

!avaSo#t, aseura que esto s$lo era el principio y que EK* será multiJidioma,tendrá herramientas visuales, etc& .n #in, al iual que dicen los astr$loos, el #uturonos deparará muchas sorpresas&

6a estructura ásica del EK* se asa en 3omponentes y 3ontenedores& .stos

5ltimos contienen 3omponentes posicionados a su respecto y son 3omponentes asu ve+, de #orma que los eventos pueden tratarse tanto en 3ontenedores como en3omponentes, corriendo por cuenta del proramador (todavía no hayherramientas de composici$n visual) el encaje de todas las pie+as, así como laseuridad de tratamiento de los eventos adecuados& ;ada trivial&

;o ostante y pese a ello, vamos a aordar en este momento la proramaci$n conel EK* para tener la ase su#iciente y poder seuir pro#undi+ando en las demáscaracterísticas del lenuaje !ava, porque como vamos a ir presentando ejemplosrá#icos es imprescindile el conocimiento del EK*& Mientras tanto, esperemosque !avaSo#t sea #iel a sus predicciones y lo que ahora veamos nos sirva de asepara mirar a un nuevo y maravilloso EK*&

9.2 Interace de Usario6a inter#ace de usuario es la parte del prorama que permite a ste interactuar conel usuario& 6as inter#aces de usuario pueden adoptar muchas #ormas, que vandesde la simple línea de comandos hasta las inter#aces rá#icas que proporcionanlas aplicaciones más modernas&

6a inter#ace de usuario es el aspecto más importante de cualquier aplicaci$n& <naaplicaci$n sin un inter#a+ #ácil, impide que los usuarios saquen el má2imorendimiento del prorama& !ava proporciona los elementos ásicos para construirdecentes inter#aces de usuario a travs del EK*&

 El nivel más ajo, el sistema operativo transmite in#ormaci$n desde el rat$n y elteclado como dispositivos deentrada al prorama& .l EK*#ue dise%ado pensando enque el proramador notuviese que preocuparse dedetalles como controlar elmovimiento del rat$n o leer elteclado, ni tampoco atender adetalles como la escritura enpantalla& .l EK* constituyeuna lirería de clasesorientada a ojeto para curirestos recursos y servicios deajo nivel&

9eido a que el lenuaje deproramaci$n !ava es

62

Page 63: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 63/98

  Tutorial de Java

independiente de la plata#orma en que se ejecuten sus aplicaciones, el EK*tamin es independiente de la plata#orma en que se ejecute& .l EK* proporcionaun conjunto de herramientas para la construcci$n de inter#aces rá#icas que tienenuna apariencia y se comportan de #orma semejante en todas las plata#ormas enque se ejecute& 6os elementos de inter#ace proporcionados por el EK* están

implementados utili+ando toolkits nativos de las plata#ormas, preservando unaapariencia semejante a todas las aplicaciones que se creen para esa plata#orma&.ste es un punto #uerte del EK*, pero tamin tiene la desventaja de que unainter#ace rá#ica dise%ada para una plata#orma, puede no visuali+arsecorrectamente en otra di#erente&

 9.& +strctra de% A-T6a estructura de la versi$n actual del EK* podemos resumirla en los puntos quee2ponemos a continuaci$n/

36* 6os 3ontenedores contienen 3omponentes, que son los controles ásicos37* ;o se usan posiciones #ijas de los 3omponentes, sino que están situados a

travs de una disposici$n controlada (layouts)38* .l com5n denominador de más ajo nivel se acerca al teclado, rat$n y manejo

de eventos39*  Elto nivel de astracci$n respecto al entorno de ventanas en que se ejecute la

aplicaci$n (no hay áreas cliente, ni llamadas a O, ni hKnds, etc&)40* 6a arquitectura de la aplicaci$n es dependiente del entorno de ventanas, en

ve+ de tener un tama%o #ijo41* .s astante dependiente de la máquina en que se ejecuta la aplicaci$n (no

puede asumir que un diáloo tendrá el mismo tama%o en cada máquina)42* 3arece de un #ormato de recursos& ;o se puede separar el c$dio de lo que

es propiamente inter#ace& ;o hay nin5n dise%ador de inter#aces (todavía)

9.( Co"ponentes # Contenedores<na inter#ace rá#ica está construida en ase a elementos rá#icos ásicos, los3omponentes& *ípicos ejemplos de estos 3omponentes son los otones, arrasde despla+amiento, etiquetas, listas, cajas de selecci$n o campos de te2to& 6os3omponentes permiten al usuario interactuar con la aplicaci$n y proporcionarin#ormaci$n desde el prorama al usuario sore el estado del prorama& .n el

 EK*, todos los 3omponentes de la inter#ace de usuario son instancias de la clase3omponent o uno de sus sutipos&

6os 3omponentes no se encuentran aislados, sino arupados dentro de3ontenedores& 6os 3ontenedores contienen y orani+an la situaci$n de los3omponentes además, los 3ontenedores son en sí mismos 3omponentes y comotales pueden ser situados dentro de otros 3ontenedores& *amin contienen elc$dio necesario para el control de eventos, camiar la #orma del cursor omodi#icar el icono de la aplicaci$n& .n el EK*, todos los 3ontenedores soninstancias de la clase 3ontainer o uno de sus sutipos&

63

Page 64: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 64/98

Page 65: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 65/98

  Tutorial de Java

caracteres y colores& *amin hay clases para la manipulaci$n de imáenes,doleJu##erin, etc&

-ara poder pintar, un prorama necesita un conte2to rá#ico válido, representadopor una instancia de la clase 1raphics& -ero, como esta clase es astracta, no se

puede instanciar directamente así que deemos crear un componente y pasarlo alprorama como un arumento a los mtodos paint() o update()&

6os dos mtodos anteriores, paint() y update(), junto con el mtodo repaint() sonlos que están involucrados en la presentaci$n de rá#icos en pantalla& .l EK*,para reducir el tiempo que necesitan estos mtodos para reali+ar el repintado enpantalla de rá#icos, tiene dos a2iomas/

43* -rimero, el EK* repinta solamente aquellos 3omponentes que necesitan serrepintados, ien porque estuviesen cuiertos por otra ventana o porque sepida su repintado directamente

44* Seundo, si un 3omponente estaa tapado y se destapa, el EK* repintasolamente la porci$n del 3omponente que estaa oculta

.n la ejecuci$n del applet que aparece a continuaci$n, .jemplo1ra#&java,podemos oservar como se reali+a este proceso& Inorar la +ona de te2to de laparte superior del applet de momento, y centrar la mirada en la parte coloreada&<tili+ando otra ventana, tapar y destapar parte de la +ona que ocupa el applet& Seoservará que solamente el tro+o de applet que estaa cuierto es el que serepinta& Pendo un poco más allá, solamente aquellos componentes que estnocultos y se vuelvan a ver serán los que se repinten, sin tener en cuenta suposici$n dentro de la jerarquía de componentes&

65

Page 66: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 66/98

  Tutorial de Java

6a pantalla en !ava se incrementa de i+quierda a derecha y de arria hacia aajo,tal como muestra la #iura/

 6os pi2els de la pantalla son pues/ posici$n B 4 ancho de la pantalla J =&.n los te2tos, el punto de inserci$n se encuentra en la línea ase de la primeraletra&

:.2 67todos para Di$5os:amos a presentar mtodos para diujar varias #iuras eomtricas& 3omo estosmtodos #uncionan solamente cuando son invocados por una instancia válida de laclase 1raphics, su ámito de aplicaci$n se restrine a los componentes que seutilicen en los mtodos paint() y update()& ;ormalmente los mtodos de diujo deprimitivas rá#icas #uncionan por pares/ un mtodo pinta la #iura normal y el otropinta la #iura rellena&

draw6ine( 2=,y=,2F,yF )drawHect( 2,y,ancho,alto )#illHect( 2,y,ancho,alto )clearHect( 2,y,ancho&alto )drawHoundHect( 2,y,ancho,alto,anchoErco,altoErco )#illHoundHect( 2,y,ancho,alto,anchoErco,altoErco )drawL9Hect( 2,y,ancho,alto,oolean elevado )#illL9Hect( 2,y,ancho,alto,oolean elevado )draw0val( 2,y,ancho,alto )#ill0val( 2,y,ancho,alto )drawErc( 2,y,ancho,alto,anuloInicio,anuloErco )#illErc( 2,y,ancho,alto,anuloInicio,anuloErco )draw-olyon( intXY puntosO,intXY puntosPXY,num-untos )#ill-olyon( intXY puntosO,intXY puntosPXY,num-untos )drawStrin( strin s,2,y )draw3hars( char dataXY,o##set,lonitud,2,y )draw@ytes( yte dataXY,o##set,lonitud,2,y )copyErea( 2Src,ySrc,ancho,alto,29est,y9est )

:.& 67todos para I"agenes

66

Page 67: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 67/98

  Tutorial de Java

6os ojetos 1raphics pueden mostrar imáenes a travs del mtodo/

drawImae( Imae im,int 2,int y,Imae0server oservador )

'ay que tener en cuenta que el mtodo drawImae() necesita un ojeto Imae y

un ojeto Imae0server& -odemos carar una imaen desde un #ichero de diujo(actualmente s$lo se soportan #ormatos 1I y !-.1) con el mtodo etImae()/Imae im ] etImae( et9ocument@ase(),"#ichero&i#" )

6a #orma de invocar al mtodo etImae() es indicando un <H6 donde seencuentre el #ichero que contiene la imaen que queremos presentar y el nomrede ese #ichero/etImae( <H6 directorioImaen,Strin #icheroImaen )

<n <H6 com5n para el mtodo etImae() es el directorio donde está el #ichero'*M6& Se puede acceder a esa locali+aci$n a travs del mtodoet9ocument@ase() de la clase Epplet, como ya se ha indicado&

;ormalmente, se reali+a el etImae() en el mtodo init() del applet y se muestrala imaen carada en el mtodo paint(), tal como se muestra en el ejemplosiuiente/

pulic void init() V  im ] etImae( et9ocument@ase(),"pepe&i#" )  W

pulic void paint( 1raphics ) V  &drawImae( im,2,y,this )  W

.n el applet Imaen&java, podemos ver el ejemplo completo& Su ponemos en l lae2istencia del #ichero "Imaenespepe&i#"/

import java&awt&7

67

Page 68: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 68/98

  Tutorial de Java

import sun&awt&imae&<H6ImaeSourceimport java&applet&Epplet

pulic class Imaen e2tends Epplet V  Imaen pepe

  pulic void init() V  pepe ] etImae( et9ocument@ase(),"Imaenespepe&i#" )  W

  pulic void paint( 1raphics ) V  &drawStrin( pepe,FA,FA,this )  W  W

:.( )onido en Java!ava tamin posee mtodos prede#inidos para reproducir sonido& .l ordenadorremoto no necesita tener un reproductor de audio !ava reali+ará la reproducci$n(evidentemente, el ordenador remoto, en donde se ejecuta el applet, necesitarádisponer de hardware de sonido)&

Reproducci-n de sonido6a #orma más #ácil de reproducir sonido es a travs del mtodo play()/play( <H6 directorioSonido,Strin #icheroSonido )

o, simplemente/

play( <H6 un<H6deSonido )

<n <H6 com5n para el mtodo play() es el directorio donde está el #ichero '*M6&Se puede acceder a esa locali+aci$n a travs del mtodo et9ocument@ase() dela clase Epplet/

play( et9ocument@ase(),"sonido&au" )

para que esto #uncione, el #ichero de la clase y el #ichero sonido&au deerían estaren el mismo directorio&

Reproducci-n RepetitivaSe puede manejar el sonido como si de imáenes se tratara& Se pueden carar yreproducir más tarde&-ara carar un clip de sonido, se utili+a el mtodo etEudio3lip()/

 Eudo3lip sonidosonido ] etEudio3lip( et9ocument@ase(),"risas&au" )

<na ve+ que se cara el clip de sonido, se pueden utili+ar tres mtodos/

68

Page 69: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 69/98

  Tutorial de Java

sonido&play()para reproducir el clip de sonido&sonido&loop()para iniciar la reproducci$n del clip de sonido y que entre en un lucle dereproducci$n, es decir, en una repetici$n automática del clip&

sonido&stop()para detener el clip de sonido que se encuentre en ese instante en reproducci$n&

:.8 +ntrada por Rat0n<na de las características más 5tiles que o#rece !ava es el soporte directo de lainteractividad& 6a aplicaci$n puede reaccionar a los camios producidos en elrat$n, por ejemplo, sin necesidad de escriir ninuna línea de c$dio para sucontrol, solamente indicando qu se quiere hacer cuando el rat$n haa alo&.l evento más com5n en el rat$n es el click& .ste evento es oernado por dosmtodos/ mouse9own() (ot$n pulsado) y mouse<p() (ot$n soltado)& Emosmtodos son parte de la clase Epplet, pero se necesita de#inir sus accionesasociadas, de la misma #orma que se reali+a con init() o con paint()&

;. +GC+CION+) +N JAVA

;.1 6ane5o de +/cepciones:amos a mostrar como se utili+an las e2cepciones, reconvirtiendo nuestro appletde saludo a partir de la versi$n iterativa de 'olaIte&java/

import java&awt&7import java&applet&Epplet

pulic class 'olaIte e2tends Epplet V  private int i ] B  private Strin SaludosXY ] V  "'ola Mundo",  "'06E Mundo",  "'06E M<;90"  W

  pulic void paint( 1raphics ) V  &drawStrin( SaludosXiY,FA,FA )  i44  W  W

;ormalmente, un prorama terminacon un mensaje de error cuando se lan+a una e2cepci$n& Sin emaro, !ava tiene

69

Page 70: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 70/98

  Tutorial de Java

mecanismos para e2cepciones que permiten ver qu e2cepci$n se ha producido eintentar recuperarse de ella&

:amos a reescriir el mtodo paint() de nuestra versi$n iterativa del saludo/

pulic void paint( 1raphics ) V  try V  &drawStrin( SaludosXiY,FA,FA )  W catch( ErrayInde20ut0#@ounds.2ception e ) V  &drawStrin( "Saludos desordado",FA,FA )  W catch( .2ception e ) V  3ualquier otra e2cepci$n  System&out&println( e&toStrin() )

W #inally V  System&out&println( ".sto se imprime siempre" )  W  i44  W

6a palara clave #inally de#ine un loque de c$dio que se quiere que seaejecutado siempre, de acuerdo a si se captur$ la e2cepci$n o no& .n el ejemploanterior, la salida en la consola, con i]? sería/

Saludos desordadof.sto se imprime siempre

;.2 enerar +/cepciones en Java3uando se produce un error se deería enerar, o lan+ar, una e2cepci$n& -araque un mtodo en !ava, pueda lan+ar e2cepciones, hay que indicarloe2presamente&void MetodoEsesino() throws ;ull-ointer.2ception,3aida.2ceptionSe pueden de#inir e2cepciones propias, no hay por qu limitarse a lasprede#inidas astará con e2tender la clase .2ception y proporcionar la#uncionalidad e2tra que requiera el tratamiento de esa e2cepci$n&

*amin pueden producirse e2cepciones no de #orma e2plícita como en el casoanterior, sino de #orma implícita cuando se reali+a aluna acci$n ileal o no válida&

6as e2cepciones, pues, pueden oriinarse de dos modos/ el prorama hace aloileal (caso normal), o el prorama e2plícitamente enera una e2cepci$nejecutando la sentencia throw (caso menos normal)& 6a sentencia throw tiene lasiuiente #orma/

  throw 0tejo.2cepction

70

Page 71: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 71/98

  Tutorial de Java

.l ojeto 0jeto.2ception es un ojeto de una clase que e2tiende la clase

.2ception& .l siuiente c$dio de ejemplo oriina una e2cepci$n de divisi$n porcero/

class melon V

  pulic static void main( StrinXY a ) V  int i]B, j]B, k

  k ] ij 0riina un error de divisionJyJ+ero  W  W

Si compilamos y ejecutamos esta aplicaci$n !ava, otendremos la siuiente salidapor pantalla/

b javac melon&javab java melon  java&lan&Erithmetic.2ception/ y +ero  at melon&main(melon&java/A)

6as e2cepciones prede#inidas, como Erithmetic.2ception, se conocen comoe2cepciones runtime&

 Ectualmente, como todas las e2cepciones son eventos runtime, sería mejorllamarlas e2cepciones irrecuperales& .sto contrasta con las e2cepciones queeneramos e2plícitamente, que suelen ser mucho menos severas y en la mayoríade los casos podemos recuperarnos de ellas& -or ejemplo, si un #ichero no puedearirse, preuntamos al usuario que nos indique otro #ichero o si una estructurade datos se encuentra completa, podremos soreescriir al5n elemento que yano se necesite&;.& +/cepciones redeinidas6as e2cepciones prede#inidas y su jerarquía de clases es la que se muestra en la#iura/

71

Page 72: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 72/98

  Tutorial de Java

6as siuientes son las e2cepciones prede#inidas más #recuentes que se puedenencontrar/

 Erithmetic.2ception

6as e2cepciones aritmticas son típicamente el resultado de una divisi$n por B/

  int i ] =F B

;ull-ointer.2ceptionSe produce cuando se intenta acceder a una variale o mtodo antes de serde#inido/

  class 'ola e2tends Epplet V  Imae im  paint( 1raphics ) V  &drawImae( im,FA,FA,this )  W  WIncompatile3lass3hane.2ception.l intento de camiar una clase a#ectada por re#erencias en otros ojetos,especí#icamente cuando esos ojetos todavía no han sido recompilados&

3lass3ast.2ception.l intento de convertir un ojeto a otra clase que no es válida&

72

Page 73: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 73/98

  Tutorial de Java

  y ] (-ruea)2 donde

  2 no es de tipo -ruea

;eativeErraySi+e.2ception-uede ocurrir si hay un error aritmtico al intentar camiar el tama%o de un array&

0ut0#Memory.2ceptionf;o deería producirse nunca .l intento de crear un ojeto con el operador newha #allado por #alta de memoria& P siempre tendría que haer memoria su#icienteporque el arae collector se encara de proporcionarla al ir lierando ojetosque no se usan y devolviendo memoria al sistema&

;o3lass9e#ound.2ceptionSe re#erenci$ una clase que el sistema es incapa+ de encontrar&

 ErrayInde20ut0#@ounds.2ception.s la e2cepci$n que más #recuentemente se produce& Se enera al intentaracceder a un elemento de un array más allá de los límites de#inidos inicialmentepara ese array&

<nsatis#ied6ink.2ceptionSe hi+o el intento de acceder a un mtodo nativo que no e2iste& Equí no e2iste unmtodo a&kk

  class E V  native void kk()  W

  y se llama a a&kk(), cuando deería llamar a E&kk()&

Internal.2ception.ste error se reserva para eventos que no deerían ocurrir& -or de#inici$n, elusuario nunca deería ver este error y esta e2cepci$n no deería lan+arse&;.( Crear +/cepciones ropias*amin podemos lan+ar nuestras propias e2cepciones, e2tendiendo la claseSystem&e2ception&-or ejemplo, consideremos un prorama clienteservidor& .l c$dio cliente seintenta conectar al servidor, y durante A seundos se espera a que conteste elservidor& Si el servidor no responde, el servidor lan+aría la e2cepci$n de timeJout/

3ualquier mtodo que lance una e2cepci$n tamin dee capturarla, o declararlacomo parte de la inter#ace del mtodo& 3ae preuntarse entonces, el porqu delan+ar una e2cepci$n si hay que capturarla en el mismo mtodo& 6a respuesta esque las e2cepciones no simpli#ican el traajo del control de errores& *ienen la

73

Page 74: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 74/98

  Tutorial de Java

ventaja de que se puede tener muy locali+ado el control de errores y no tenemosque controlar millones de valores de retorno, pero no van más allá&

;.8 Captrar +/cepciones

6as e2cepciones lan+adas por un mtodo que pueda hacerlo deen recoer enloque trycatch otry#inally&

tr .s el loque de c$dio donde se prev que se enere una e2cepci$n& .s como sidijsemos "intenta estas sentencias y mira a ver si se produce una e2cepci$n"& .lloque try tiene que ir seuido, al menos, por una cláusula catch o una cláusula#inally

catch.s el c$dio que se ejecuta cuando se produce la e2cepci$n& .s como sidijsemos "controlo cualquier e2cepci$n que coincida con mi arumento"& .n esteloque tendremos que aseurarnos de colocar c$dio que no enere e2cepciones&Se pueden colocar sentencias catch sucesivas, cada una controlando una

e2cepci$n di#erente& ;odeería intentarse capturartodas las e2cepciones conuna sola cláusula& .storepresentaría un usodemasiado eneral, podríanllear muchas máse2cepciones de lasesperadas& .n este caso esmejor dejar que lae2cepci$n se propauehacia arria y dar unmensaje de error al usuario&

Se pueden controlar ruposde e2cepciones, es decir,que se pueden controlar, atravs del arumento,e2cepciones semejantes&

6a cláusula catchcompruea los arumentos en el mismo orden en que apare+can en el prorama&Si hay aluno que coincida, se ejecuta el loque& .l operador instanceo# se utili+apara identi#icar e2actamente cual ha sido la identidad de la e2cepci$n&

finall 

74

Page 75: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 75/98

  Tutorial de Java

.s el loque de c$dio que se ejecuta siempre, haya o no e2cepci$n& 'ay unacierta controversia entre su utilidad, pero, por ejemplo, podría servir para hacer unlo o un seuimiento de lo que está pasando, porque como se ejecuta siemprepuede dejarnos raado si se producen e2cepciones y nos hemos recuperado deellas o no&

.ste loque #inally puede ser 5til cuando no hay ninuna e2cepci$n& .s un tro+ode c$dio que se ejecuta independientemente de lo que se haa en el loque try&

3uando vamos a tratar una e2cepci$n, se nos plantea el prolema de quacciones vamos a tomar& .n la mayoría de los casos, astará con presentar unaindicaci$n de error al usuario y un mensaje avisándolo de que se ha producido unerror y que decida si quiere o no continuar con la ejecuci$n del prorama&

;.9 ropagacion de +/cepciones6a cláusula catch compruea los arumentos en el mismo orden en queapare+can en el prorama&Si hay aluno que coincida, se ejecuta el loque y siue el #lujo de control por elloque #inally (si lo hay) y concluye el control de la e2cepci$n&

Si ninuna de las cláusulas catch coincide con la e2cepci$n que se ha producido,entonces se ejecutará el c$dio de la cláusula #inally (en caso de que la haya)& 6oque ocurre en este caso, es e2actamente lo mismo que si la sentencia que lan+ala e2cepci$n no se encontrase encerrada en el loque try&

.l #lujo de control aandona este mtodo y retorna prematuramente al mtodo quelo llam$& Si la llamada estaa dentro del ámito de una sentencia try, entonces sevuelve a intentar el control de la e2cepci$n, y así continuamente&

:eamos lo que sucede cuando una e2cepci$n no es tratada en la rutina en dondese produce& .l sistema !ava usca un loque try&&catch más allá de la llamada,pero dentro del mtodo que lo trajo aquí& Si la e2cepci$n se propaa de todas#ormas hasta lo alto de la pila de llamadas sin encontrar un controlador especí#icopara la e2cepci$n, entonces la ejecuci$n se detendrá dando un mensaje& .s decir,podemos suponer que !ava nos está proporcionando un loque catch por de#ecto,que imprime un mensaje de error y sale&

;o hay ninuna sorecara en el sistema por incorporar sentencias try al c$dio&6a sorecara se produce cuando se enera la e2cepci$n&

'emos dicho ya que un mtodo dee capturar las e2cepciones que enera, o entodo caso, declararlas como parte de su llamada, indicando a todo el mundo quees capa+ de enerar e2cepciones& .sto dee ser así para que cualquiera queescria una llamada a ese mtodo est avisado de que le puede llear unae2cepci$n, en luar del valor de retorno normal& .sto permite al proramador que

75

Page 76: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 76/98

  Tutorial de Java

llama a ese mtodo, eleir entre controlar la e2cepci$n o propaarla hacia arriaen la pila de llamadas&

=. T>reads # 6%tit>reading3onsiderando el entorno multithread, cada thread (hilo, #lujo de control delprorama) representa un proceso individual ejecutándose en un sistema& E vecesse les llama procesos lieros o conte2tos de ejecuci$n& *ípicamente, cada threadcontrola un 5nico aspecto dentro de un prorama, como puede ser supervisar laentrada en un determinado peri#rico o controlar toda la entradasalida del disco&*odos los threads comparten los mismos recursos, al contrario que los procesosen donde cada uno tiene su propia copia de c$dio y datos (separados unos deotros)& 1rá#icamente, los threads se parecen en su #uncionamiento a lo quemuestra la #iura siuiente/

 

=.1 4%5o en rogra"as

Programas de flujo 2nico<n prorama de #lujo 5nico o monoJhilvanado (sinleJthread) utili+a un 5nico #lujode control (thread) para controlar su ejecuci$n& Muchos proramas no necesitan lapotencia o utilidad de m5ltiples #lujos de control& Sin necesidad de especi#icare2plícitamente que se quiere un 5nico #lujo de control, muchos de los applets yaplicaciones son de #lujo 5nico& -roramas de #lujo m5ltiple.n nuestra aplicaci$n de saludo, no vemos el thread que ejecuta nuestro

prorama& Sin emaro, !ava posiilita la creaci$n y control de threadse2plícitamente& 6a utili+aci$n de threads en !ava, permite una enorme #le2iilidada los proramadores a la hora de plantearse el desarrollo de aplicaciones& 6asimplicidad para crear, con#iurar y ejecutar threads, permite que se puedanimplementar muy poderosas y portales aplicacionesapplets que no se puede conotros lenuajes de tercera eneraci$n& .n un lenuaje orientado a Internet comoes !ava, esta herramienta es vital&

76

Page 77: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 77/98

  Tutorial de Java

Si se ha utili+ado un naveador con soporte !ava, ya se hará visto el uso dem5ltiples threads en !ava& 'ará oservado que dos applet se pueden ejecutar almismo tiempo, o que puede despla+arla páina del naveador mientras el appletcontin5a ejecutándose& .sto no sini#ica que el applet utilice m5ltiples threads,sino que el naveador es multithreaded&

6as aplicaciones (y applets) multithreaded utili+an muchos conte2tos de ejecuci$npara cumplir su traajo& 'acen uso del hecho de que muchas tareas contienensutareas distintas e independientes& Se puede utili+ar un thread para cadasutarea&

Mientras que los proramas de #lujo 5nico pueden reali+ar su tarea ejecutando lassutareas secuencialmente, un prorama multithreaded permite que cada threadcomience y termine tan pronto como sea posile& .ste comportamiento presentauna mejor respuesta a la entrada en tiempo real&

=.2 Creacion # Contro% de t>reads

!reaci-n de un )hread 'ay dos modos de conseuir threads en !ava& <na es implementando la inter#aceHunnale, la otra es e2tender la clase *hread&

6a implementaci$n de la inter#ace Hunnale es la #orma haitual de crear threads&6as inter#aces proporcionan al proramador una #orma de arupar el traajo dein#raestructura de una clase& Se utili+an para dise%ar los requerimientos comunesal conjunto de clases a implementar& 6a inter#ace de#ine el traajo y la clase, oclases, que implementan la inter#ace reali+an ese traajo& 6os di#erentes rupos declases que implementen la inter#ace tendrán que seuir las mismas relas de#uncionamiento&

'ay una cuantas di#erencias entre inter#ace y clase& -rimero, una inter#acesolamente puede contener mtodos astractos yo variales estáticas y #inales(constantes)& 6as clases, por otro lado, pueden implementar mtodos y contenervariales que no sean constantes& Seundo, una inter#ace no puede implementarcualquier mtodo& <na clase que implemente una inter#ace dee implementartodos los mtodos de#inidos en esa inter#ace& <na inter#ace tiene la posiilidad depoder e2tenderse de otras inter#aces y, al contrario que las clases, puedee2tenderse de m5ltiples inter#aces& Edemás, una inter#ace no puede serinstanciada con el operador new por ejemplo, la siuiente sentencia no estápermitida/

Hunnale a ] new Hunnale() ;o se permite

.l primer mtodo de crear un thread es simplemente e2tender la clase *hread/

class Mi*hread e2tends *hread V

77

Page 78: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 78/98

  Tutorial de Java

  pulic void run() V  & & &  W

.l ejemplo anterior crea una nueva clase Mi*hread que e2tiende la clase *hread y

sorecara el mtodo *hread&run() por su propia implementaci$n& .l mtodo run()es donde se reali+ará todo el traajo de la clase& .2tendiendo la clase *hread, sepueden heredar los mtodos y variales de la clase padre& .n este caso,solamente se puede e2tender o derivar una ve+ de la clase padre& .sta limitaci$nde !ava puede ser superada a travs de la implementaci$n de Hunnale/

pulic class Mi*hread implements Hunnale V  *hread t  pulic void run() V  .jecuci$n del thread una ve+ creado  W  W

.n este caso necesitamos crear una instancia de *hreadantes de que el sistema pueda ejecutar el proceso comoun thread& Edemás, el mtodo astracto run() estáde#inido en la inter#ace Hunnale tiene que serimplementado& 6a 5nica di#erencia entre los dosmtodos es que este 5ltimo es mucho más #le2ile& .n elejemplo anterior, todavía tenemos oportunidad dee2tender la clase Mi*hread, si #uese necesario& 6amayoría de las clases creadas que necesiten ejecutarsecomo un thread , implementarán la inter#ace Hunnale,ya que proalemente e2tenderán aluna de su#uncionalidad a otras clases&

;o pensar que la inter#ace Hunnale está haciendoaluna cosa cuando la tarea se está ejecutando&Solamente contiene mtodos astractos, con lo cual esuna clase para dar idea sore el dise%o de la clase*hread& 9e hecho, si vemos los #uentes de !ava,podremos comproar que solamente contiene unmtodo astracto/

packae java&lanpulic inter#ace Hunnale V  pulic astract void run() W

P esto es todo lo que hay sore la inter#ace Hunnale&3omo se ve, una inter#ace s$lo proporciona un dise%o para las clases que vayan aser implementadas& .n el caso de Hunnale, #uer+a a la de#inici$n del mtodo

78

Page 79: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 79/98

  Tutorial de Java

run(), por lo tanto, la mayor parte del traajo se hace en la clase *hread& <nvista+o un poco más pro#undo a la de#inici$n de la clase *hread nos da idea de loque realmente está pasando/

pulic class *hread implements

Hunnale V  &&&  pulic void run() V  i#( tarea ] null )  tarea&run()   W  W  &&&  W

9e este trocito de c$dio sedesprende que la clase *hreadtamin implemente la inter#aceHunnale& tarea&run() se aseurade que la clase con que traaja (laclase que va a ejecutarse como unthread) no sea nula y ejecuta elmtodo run() de esa clase& 3uandoesto suceda, el mtodo run() de laclase hará que corra como un thread&

 Arranque de un )hread 6as aplicaciones ejecutan main() tras arrancar& .sta es la ra+$n de que main() seael luar natural para crear y arrancar otros threads& 6a línea de c$dio/

  t= ] new *est*h( "*hread =",(int)(Math&random()7FBBB) )

crea un nuevo thread& 6os dos arumentos pasados representan el nomre delthread y el tiempo que queremos que espere antes de imprimir el mensaje&

 El tener control directo sore los threads, tenemos que arrancarlos e2plícitamente&.n nuestro ejemplo con/  t=&start()

start(), en realidad es un mtodo oculto en el thread que llama al mtodo run()&

Manipulaci-n de un )hread Si todo #ue ien en la creaci$n del thread, t= deería contener un thread válido,que controlaremos en el mtodo run()&

<na ve+ dentro de run(), podemos comen+ar las sentencias de ejecuci$n como enotros proramas& run() sirve como rutina main() para los threads cuando run()

79

Page 80: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 80/98

  Tutorial de Java

termina, tamin lo hace el thread& *odo lo que queramos que haa el thread hade estar dentro de run(), por eso cuando decimos que un mtodo es Hunnale,nos olia a escriir un mtodo run()&

.n este ejemplo, intentamos inmediatamente esperar durante una cantidad de

tiempo aleatoria (pasada a travs del constructor)/

sleep( retardo )

.l mtodo sleep() simplemente le dice al thread que duerma durante losmiliseundos especi#icados& Se deería utili+ar sleep() cuando se pretendaretrasar la ejecuci$n del thread& sleep() no consume recursos del sistema mientrasel thread duerme& 9e esta #orma otros threads pueden seuir #uncionando& <nave+ hecho el retardo, se imprime el mensaje "'ola Mundo" con el nomre delthread y el retardo&

Suspensi-n de un )hread -uede resultar 5til suspender la ejecuci$n de un thread sin marcar un límite detiempo& Si, por ejemplo, está construyendo un applet con un thread de animaci$n,querrá permitir al usuario la opci$n de detener la animaci$n hasta que quieracontinuar& ;o se trata de terminar la animaci$n, sino desactivarla& -ara este tipode control de thread se puede utili+ar el mtodo suspend()&

t=&suspend()

.ste mtodo no detiene la ejecuci$n permanentemente& .l thread es suspendidoinde#inidamente y para volver a activarlo de nuevo necesitamos reali+ar unainvocaci$n al mtodo resume()/

t=&resume()

Parada de un )hread .l 5ltimo elemento de control que se necesita sore threads es el mtodo stop()&Se utili+a para terminar la ejecuci$n de un thread/t=&stop()

.sta llamada no destruye el thread, sino que detiene su ejecuci$n& 6a ejecuci$n nose puede reanudar ya con t=&start()& 3uando se desasinen las variales que seusan en el thread, el ojeto thread (creado con new) quedará marcado paraeliminarlo y el arae collector se encarará de lierar la memoria que utili+aa&

.n nuestro ejemplo, no necesitamos detener e2plícitamente el thread&Simplemente se le deja terminar& 6os proramas más complejos necesitarán uncontrol sore cada uno de los threads que lancen, el mtodo stop() puedeutili+arse en esas situaciones&

80

Page 81: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 81/98

  Tutorial de Java

Si se necesita, se puede comproar si un thread está vivo o no considerando vivoun thread que ha comen+ado y no ha sido detenido&t=&isElive()

.ste mtodo devolverá true en caso de que el thread t= est vivo, es decir, ya se

haya llamado a su mtodo run() y no haya sido parado con un stop() ni hayaterminado el mtodo run() en su ejecuci$n&

=.& +stados de n t>read9urante el ciclo de vida de un thread, ste se puede encontrar en di#erentesestados& 6a #iura siuiente muestra estos estados y los mtodos que provocan elpaso de un estado a otro& .ste diarama no es una máquina de estados #inita,pero es lo que más se apro2ima al #uncionamiento real de un thread &

3uevo )hread 

3uando un thread está en este estado, es simplemente un ojeto *hread vacío& .lsistema no ha destinado nin5n recurso para l& 9esde este estado solamentepuede arrancarse llamando al mtodo start(), o detenerse de#initivamente,llamando al mtodo stop() la llamada a cualquier otro mtodo carece de sentido ylo 5nico que provocará será la eneraci$n de una e2cepci$n de tipoIlleal*hreadState.2ception&

%jecutable6a llamada al mtodo start() creará los recursos del sistema necesarios para queel thread puede ejecutarse, lo incorpora a la lista de procesos disponiles paraejecuci$n del sistema y llama al mtodo run() del thread& .n este momento nos

encontramos en el estado ".jecutale" del diarama& P este estado es .jecutaley no .n .jecuci$n, porque cuando el thread está aquí no esta corriendo& Muchosordenadores tienen solamente un procesador lo que hace imposile que todos losthreads estn corriendo al mismo tiempo& !ava implementa un tipo de schedulin olista de procesos, que permite que el procesador sea compartido entre todos losprocesos o threads que se encuentran en la lista& Sin emaro, para nuestrosprop$sitos, y en la mayoría de los casos, se puede considerar que este estado es

81

Page 82: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 82/98

  Tutorial de Java

realmente un estado ".n .jecuci$n", porque la impresi$n que produce antenosotros es que todos los procesos se ejecutan al mismo tiempo&

3uando el thread se encuentra en este estado, todas las instrucciones de c$dioque se encuentren dentro del loque declarado para el mtodo run(), se

ejecutarán secuencialmente&

Parado.l thread entra en estado "-arado" cuando aluien llama al mtodo suspend(),cuando se llama al mtodo sleep(), cuando el thread está loqueado en unproceso de entradasalida o cuando el thread utili+a su mtodo wait() para esperara que se cumpla una determinada condici$n& 3uando ocurra cualquiera de lascuatro cosas anteriores, el thread estará -arado&

-ara cada una de los cuatro modos de entrada en estado -arado, hay una #ormaespecí#ica devolver aestado.jecutale&3ada #ormade recuperarese estado ese2clusiva porejemplo, si elthread hasido puesto adormir, unave+transcurridoslosmiliseundosque seespeci#iquen,l solo sedespierta y

vuelve a estar en estado .jecutale& 6lamar al mtodo resume() mientras est elthread durmiendo no serviría para nada&

6os mtodos de recuperaci$n del estado .jecutale, en #unci$n de la #orma dellear al estado -arado del thread, son los siuientes/45* Si un thread está dormido, pasado el lapso de tiempo46* Si un thread está suspendido, lueo de una llamada al mtodo resume()47* Si un thread está loqueado en una entradasalida, una ve+ que el comando

.S concluya su ejecuci$n48* Si un thread está esperando por una condici$n, cada ve+ que la variale que

controla esa condici$n varíe dee llamarse a noti#y() o noti#yEll()

82

Page 83: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 83/98

  Tutorial de Java

Muerto<n thread se puede morir de dos #ormas/ por causas naturales o porque lo maten(con stop())& <n thread muere normalmente cuando concluye de #orma haitual sumtodo run()& -or ejemplo, en el siuiente tro+o de c$dio, el ucle while es un

ucle #inito Jreali+a la iteraci$n FB veces y terminaJ/

%l m*todo isAlive/06a inter#ace de proramaci$n de la clase *hread incluye el mtodo isElive(), quedevuelve true si el thread ha sido arrancado (con start()) y no ha sido detenido(con stop())& -or ello, si el mtodo isElive() devuelve #alse, saemos que estamosante un ";uevo *hread" o ante un thread "Muerto"& Si nos devuelve true, saemosque el thread se encuentra en estado ".jecutale" o "-arado"& ;o se puededi#erenciar entre ";uevo *hread" y "Muerto", ni entre un thread ".jecutale" o"-arado"&

=.( Co"nicacion entre t>reads0tra clave para el 2ito y la ventaja de la utili+aci$n de m5ltiples threads en unaaplicaci$n, o aplicaci$n multithreaded, es que pueden comunicarse entre sí& Sepueden dise%ar threads para utili+ar ojetos comunes, que cada thread puedemanipular independientemente de los otros threads&

.l ejemplo clásico de comunicaci$n de threads es un modeloproductorconsumidor& <n thread produce una salida, que otro thread usa(consume), sea lo que sea esa salida& :amos entonces a crear un productor, queserá un thread que irá sacando caracteres por su salida crearemos tamin unconsumidor que ira recoiendo los caracteres que vaya sacando el productor y unmonitor que controlará el proceso de sincroni+aci$n entre los threads&uncionará como una tuería, insertando el productor caracteres en un e2tremos yleyndolos el consumidor en el otro, con elmonitor siendo la propia tuería&

83

Page 84: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 84/98

  Tutorial de Java

11.6+TODO) NATIVO)

<n mtodo nativo es un mtodo !ava (una instancia de un ojeto o una clase)cuya implementaci$n se ha reali+ado en otro lenuaje de proramaci$n, porejemplo, 3& :amos a ver c$mo se interan mtodos nativos en clases !ava&

 Ectualmente, el lenuaje !ava solamente proporciona mecanismos para interarc$dio 3 en proramas !ava&:eamos pues los pasos necesarios para me+clar c$dio nativo 3 y proramas!ava& Hecurriremos (f3$mo no) a nuestro saludo en este caso, el prorama'olaMundo tiene dos clases !ava/ la primera implementa el mtodo main() y laseunda, 'olaMundo, tiene un mtodo nativo que presenta el mensaje de saludo&6a implementaci$n de este seundo mtodo la reali+aremos en 3&

[email protected] +scri$ir C0digo Java.n primer luar, deemos crear una clase !ava, 'olaMundo, que declare unmtodo nativo& *amin deemos crear el prorama principal que cree el ojeto'olaMundo y llame al mtodo nativo&

6as siuientes líneas de c$dio de#inen la clase 'olaMundo, que consta de unmtodo y un semento estático de c$dio/

class 'olaMundo V  pulic native void presentaSaludo()  static V  System&load6irary( "hola" )  W  W

-odemos decir que la implementaci$n del mtodo presentaSaludo() de la clase'olaMundo está escrito en otro lenuaje, porque la palara reservada nativeaparece como parte de la de#inici$n del mtodo& .sta de#inici$n, proporcionasolamente la de#inici$n para presentaSaludo() y no porporciona ninunaimplementaci$n para l& 6a implementaci$n la proporcionaremos desde un #ichero#uente separado, escrito en lenuaje 3&6a de#inici$n para presentaSaludo() tamin indica que el mtodo es un mtodop5lico, no acepta arumentos y no devuelve nin5n valor& El iual que cualquierotro mtodo, los mtodos nativos deen estar de#inidos dentro de una clase !ava&

.l c$dio 3 que implementa el mtodo presentaSaludo() dee ser compilado enuna lirería dinámica y carado en la clase !ava que lo necesite& .sta cara,mapea la implementaci$n del mtodo nativo sore su de#inici$n&

.l siuiente loque de c$dio cara la lirería dinámica, en este caso hola& .lsistema !ava ejecutará un loque de c$dio estático de la clase cuando la carue&

84

Page 85: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 85/98

  Tutorial de Java

*odo el c$dio anterior #orma parte del #ichero 'olaMundo&java, que contiene laclase 'olaMundo& .n un #ichero separado, Main&java, vamos a crear unaaplicaci$n !ava que instancie a la clase 'olaMundo y llame al mtodo nativopresentaSaludo()&

class Main V  pulic static void main( Strin arsXY ) V  new 'olaMundo()&presentaSaludo()  W  W

3omo se puede oservar, llamamos al mtodo nativo del mismo modo que acualquier otro mtodo !ava a%adimos el nomre del mtodo al #inal del nomredel ojeto con un punto ("&")& .l conjunto de parntesis que siue al nomre delmtodo encierra los arumentos que se le pasen& .n este caso, el mtodopresentaSaludo() no recie nin5n tipo de arumento&

[email protected] Co"pi%ar e% C0digo Java<tili+aremos ahora el compilador javac para compilar el c$dio !ava que hemosdesarrollado& 3ompilaremos los dos #icheros #uentes de c$dio !ava que hemoscreado, tecleando los siuientes comandos/b javac 'olaMundo&javab javac Main&java

1@.& Crear e% 4ic>ero de Ca$ecera Ehora deemos utili+ar la aplicaci$n javah para conseuir el #ichero de caecera&h& .l #ichero de caecera de#ine una estructura que representa la clase'olaMundo sore c$dio 3 y proporciona la de#inici$n de una #unci$n 3 para laimplementaci$n del mtodo nativo presentaSaludo() de#inido en ese clase&.jecutamos javah sore la clase 'olaMundo, con el siuiente comando/b javah 'olaMundo

-or de#ecto, javah creará el nuevo #ichero &h en el mismo directorio en que seencuentra el #ichero &class, otenido al compilar con javac el c$dio #uente !avacorrespondiente a la clase& .l #ichero que creará, será un #ichero de caecera delmismo nomre que la clase y con e2tensi$n &h& -or ejemplo, el comando anteriorhará creado el #ichero 'olaMundo&h, cuyo contenido será el siuiente/

7 90 ;0* .9I* *'IS I6. J it is machine enerated 7Dinclude `native&hb7 'eader #or class 'olaMundo 7

Di#nde# _Included_'olaMundoDde#ine _Included_'olaMundo

85

Page 86: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 86/98

  Tutorial de Java

typede# struct 3lass'olaMundo V  char -E9 7 E;SI 3 requires structures to have a least one memer 7W 3lass'olaMundo'andle*o('olaMundo)

Di#de# __cpluspluse2tern "3" VDendi# 

 __declspec(dlle2port) void 'olaMundo_presentaSaludo(struct ''olaMundo 7)Di#de# __cplusplusWDendi# Dendi# 

.ste #ichero de caecera contiene la de#inici$n de una estructura llamada3lass'olaMundo& 6os miemros de esta estructura son paralelos a los miemrosde la clase !ava correspondiente es decir, los campos en la estructuracorresponden a las variales de la clase& -ero como 'olaMundo no tiene ninunavariale, la estructura se encuentra vacía& Se pueden utili+ar los miemros de laestructura para re#erenciar a variales instanciadas de la clase desde las#unciones 3& Edemás de la estructura 3 similar a la clase !ava, vemos que lallamada de la #unci$n 3 está declarada como/e2tern void 'olaMundo_presentaSaludo( struct ''olaMundo 7)

.sta es la de#inici$n de la #unci$n 3 que deeremos escriir para implementar elmtodo nativo presentaSaludo() de la clase 'olaMundo& 9eemos utili+ar esade#inici$n cuando lo implementemos& Si 'olaMundo llamase a otros mtodosnativos, las de#iniciones de las #unciones tamin aparecerían aquí&.l nomre de la #unci$n 3 que implementa el mtodo nativo está derivado delnomre del paquete, el nomre de la clase y el nomre del mtodo nativo& Esí, elmtodo nativo presentaSaludo() dentro de la clase 'olaMundo es'olaMundo_presentaSaludo()& .n este ejemplo, no hay nomre de paqueteporque 'olaMundo se considera enloado dentro del paquete por de#ecto&6a #unci$n 3 acepta un parámetro, aunque el mtodo nativo de#inido en la clase!ava no acepte ninuno& Se puede pensar en este parámetro como si #uese lavariale this de 344& .n nuestro caso, inoramos el parámetro this&

1@.( Crear e% 4ic>ero de st$s:olvemos a utili+ar la aplicaci$n javah para crear el #ichero de stus, que contienetodas las declaraciones de mtodos, con sus llamadas y arumentos, listos paraque nosotros rellenemos el cuerpo de los mtodos con los aloritmos quenecesitemos implementar& -roporciona la uni$n entre la clase !ava y su estructura3 paralela&

-ara enerar este #ichero, deemos indicar el parámetro &stus al ejecutar laaplicaci$n javah sore la clase 'olaMundo, de la siuiente #orma/

86

Page 87: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 87/98

  Tutorial de Java

b javah Jstus 'olaMundo

9el mismo modo que se eneraa el #ichero &h el nomre del #ichero de stusserá el nomre de la clase con la e2tensi$n &c& .n nuestro ejemplo, será

'olaMundo&c, y su contenido será el siuiente/

7 90 ;0* .9I* *'IS I6. J it is machine enerated 7Dinclude `Stu-reamle&hb

7 Stus #or class 'olaMundo 77 SPM@06/ "'olaMundopresentaSaludo():",!ava_'olaMundo_presentaSaludo_stu 7

 __declspec(dlle2port) stack_item7!ava_'olaMundo_presentaSaludo_stu(stack_item 7_-_,struct e2ecenv 7_.._) V e2tern void 'olaMundo_presentaSaludo(void 7) (void) 'olaMundo_presentaSaludo(_-_XBY&p) return _-_W

[email protected] +scri$ir %a ncion C.scriiremos la #unci$n 3 para el mtodo nativo en un #ichero #uente de c$dio 3&6a implementaci$n será una #unci$n haitual 3, que lueo interaremos con laclase !ava& 6a de#inici$n de la #unci$n 3 dee ser la misma que la que se haenerado con javah en el #ichero 'olaMundo&h& 6a implementaci$n queproponemos la uardaremos en el #ichero 'olaImp&c, y contendrá las siuienteslínea de c$dio/

Dinclude `Stu-reamle&hbDinclude "'olaMundo&hbDinclude `stdio&hb

87

Page 88: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 88/98

  Tutorial de Java

void 'olaMundo_presentaSaludo( struct ''olaMundo 7this ) V  print#( "'ola Mundo, desde el *utorial de !avaNn" )  return  W

3omo se puede ver, la implementaci$n no puede ser más sencilla/ hace unallamada a la #unci$n print#() para presentar el saludo y sale&.n el c$dio se incluyen tres #icheros de caecera/

Stus-reamle&h

-roporciona la in#ormaci$n para que el c$dio 3 pueda interactuar con el sistema!ava& 3uando se escrien mtodos nativos, siempre hará que incluir este #icheroen el c$dio #uente 3&

'olaMundo&h

.s el #ichero de caecera que hemos enerado para nuestra clase& 3ontiene laestructura 3 que representa la clase !ava para la que estamos escriiendo elmtodo nativo y la de#inici$n de la #unci$n para ese mtodo nativo&

 stdio&h

.s necesario incluirlo porque utili+amos la #unci$n print#() de la lirería estándar de3, cuya declaraci$n se encuentra en este #ichero de caecera&

[email protected] Crear %a *i$reria Din<"ica<tili+aremos el compilador 3 para compilar el #ichero &h, el #ichero de stus y el#ichero #uente &c para crear una lirería dinámica& -ara crearla, utili+aremos elcompilador 3 de nuestro sistema, haciendo que los #icheros 'olaMundo&c y'olaImp&c eneren una lirería dinámica de nomre hola, que será la que elsistema !ava carue cuando ejecute la aplicaci$n que estamos construyendo&:amos a ver c$mo eneramos esta lirería en <ni2 y en Kindows U>A&

4ni& *eclearemos el siuiente comando/

C cc J1 'olaMundo&c 'olaImp&c Jo lihola&so

.n caso de que no encuentre el compilador los #icheros de caecera, se puedeutili+ar el #la JI para indicarle el camino de 5squeda, por ejemplo/

C cc J1 JI^!E:E_'0M.include 'olaMundo&c 'olaImp&c Jo lihola&so

donde ^!E:E_'0M. es el directorio donde se ha instalado la versi$n actual del!ava 9evelopment Git&

5indo.s 678 .l comando a utili+ar en estecaso es el siuiente/

88

Page 89: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 89/98

  Tutorial de Java

c/Nbcl 'olaMundo&c 'olaImp&c Jhola&dll JM9 J69 javai&li

.ste comando #unciona con Microso#t :isual 344 F&2 y posteriores& Si queremosindicar al compilador donde se encuentran los #icheros de caecera y las lirerías,

tendremos que #ijar dos variales de entorno/

c/NbS.* I;36<9.]C!E:E'0M.CNincludeCI;36<9.Cc/NbS.* 6I@]C!E:E'0M.CNliC6I@C

donde C!E:E'0M.C es el directorio donde se ha instalado la versi$n actual del!ava 9evelopment Git&

1@.: +5ectar e% rogra"aP, por #in, utili+aremos el intrprete de !ava, java, para ejecutar el prorama quehemos construido siuiendo todos los pasos anteriormente descritos& Si tecleamosel comando/

b java Main

otendremos el resultado siuiente/C 'ola Mundo, desde el *utorial de !ava

Si no aparece este mensaje de saludo y lo que aparece en pantalla sone2presiones como <nsatis#ied6ink.rror, es porque no tenemos #ijadocorrectamente el camino de la lirería dinámica que hemos enerado& .ste caminoes la lista de directorios que el sistema !ava utili+ará para uscar las lirerías quedee carar& 9eemos aseurarnos de que el directorio donde se encuentranuestra lirería hola recin creada, #iura entre ellos&

Si #ijamos el camino correcto y ejecutamos de nuevo el prorama, veremos queahora sí otenemos el mensaje de saludo que esperáamos&

3on ello, hemos visto como interar c$dio 3 en proramas !ava& Tuedanmuchas cuestiones por medio, como la equivalencia de tipos entre !ava y 3, elpaso de parámetros, el manejo de cadenas, etc& -ero eso supondría entrar enmucha más pro#undidad dentro de !ava de la que aquí pretendemos (por ahora)&

11. +ntradaH)a%ida +st<ndar 

6os usuarios de <ni2, y aquellos #amiliari+ados con las líneas de comandos deotros sistemas como 90S, han utili+ado un tipo de entradasalida conocida

89

Page 90: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 90/98

  Tutorial de Java

com5nmente por entradasalida estándar& .l #ichero de entrada estándar (stdin) essimplemente el teclado& .l #ichero de salida estándar (stdout) es típicamente lapantalla (o la ventana del terminal)& .l #ichero de salida de error estándar (stderr)tamin se dirie normalmente a la pantalla, pero se implementa como otro #icherode #orma que se pueda distinuir entre la salida normal y (si es necesario) los

mensajes de error&

11.1 *a c%ase)#ste"!ava tiene accesoa la entradasalidaestándar a travsde la claseSystem& .nconcreto, los tres #icheros que se implementan son/

StdinSystem&in implementa stdin como una instancia de la clase InputStream& 3onSystem&in, se accede a los mtodos read() y skip()& .l mtodo read() permite leerun yte de la entrada& skip( lon n ), salta n ytes de la entrada&Stdout System&out implementa stdout como una instancia de la clase -rintStream& Sepueden utili+ar los mtodos print() y println() con cualquier tipo ásico !ava comoarumento&

Stderr System&err implementa stderr de la misma #orma que stdout& 3omo conSystem&out, se tiene acceso a los mtodos de -rintStream&

:amos a ver un peque%o ejemplo de entradasalida en !ava& .l c$dio siuiente,mi*ype&java, reproduce, o #unciona como la utilidad cat de <ni2 o type de 90S/

  import java&io&7  class mi*ype V  pulic static void main( Strin arsXY ) throws I0.2ception V  int c  int contador ] B

  while( (c ] System&in&read() ) ] UNnU )  V  contador44  System&out&print( (char)c )  W  System&out&println() 6ínea en lanco  System&err&println( "3ontados "4 contador 4" ytes en total&" )

90

Page 91: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 91/98

  Tutorial de Java

  W  W

11.2 C%ases co"nes de +ntradaH)a%ida

 Edemás de la entrada por teclado y salida por pantalla, se necesita entradasalidapor #ichero, como son/  ileInputStream  9ataInputStream  ile0utputStream  9ata0utputStream

*amin e2isten otras clases para aplicaciones más especí#icas, que no vamos atratar, por ser de un uso muy concreto/  -ipedInputStream  @u##eredInputStream  -ush@ackInputStream  Stream*okeni+er   -iped0utputStream  @u##ered0utputStream

12. 4IC'+RO) +N JAVA

*odos loslenuajes deproramaci$ntienen aluna#orma deinteractuar con lossistemas de#icheros locales!ava no es unae2cepci$n&3uando sedesarrollan appletspara utili+ar enred, hay que teneren cuenta que laentradasalidadirecta a #ichero esuna violaci$n deseuridad deacceso& Muchosusuarios

91

Page 92: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 92/98

  Tutorial de Java

con#iurarán sus naveadores para permitir el acceso al sistema de #icheros, perootros no&

-or otro lado, si se está desarrollando una aplicaci$n !ava para uso interno,proalemente será necesario el acceso directo a #icheros&

 Entes de reali+ar acciones sore un #ichero, necesitamos un poco de in#ormaci$nsore ese #ichero& 6a clase ile proporciona muchas utilidades relacionadas con#icheros y con la otenci$n de in#ormaci$n ásica sore esos #icheros&

12.1 Creaci0n de n o$5eto 4i%e-ara crear un ojeto ile nuevo, se puede utili+ar cualquiera de los tresconstructores siuientes/

  ile miichero  miichero ] new ile( "etckk" )o  miichero ] new ile( "etc","kk" )o  ile mi9irectorio ] new ile( "etc" )  miichero ] new ile( mi9irectorio,"kk" )

.l constructor utili+ado depende a menudo de otros ojetos ile necesarios para elacceso& -or ejemplo, si s$lo se utili+a un #ichero en la aplicaci$n, el primerconstructor es el mejor& Si en camio, se utili+an muchos #icheros desde un mismodirectorio, el seundo o tercer constructor serán más c$modos& P si el directorio oel #ichero es una variale, el seundo constructor será el más 5til&

12.2 4ic>eros de Acceso A%eatorio E menudo, no se desea leer un #ichero de principio a #in sino acceder al #icherocomo una ase de datos, donde se salta de un reistro a otro cada uno endi#erentes partes del #ichero& !ava proporciona una clase HandomEccessile paraeste tipo de entradasalida&

!reaci-n de un (ichero de Acceso Aleatorio'ay dos posiilidades para arir un #ichero de acceso aleatorio/3on el nomre del #ichero/

miHEile ] new HandomEccessile( Strin nomre,Strin modo )3on un ojeto ile/

miHEile ] new HandomEccessile( ile #ichero,Strin modo )

.l arumento modo determina si se tiene acceso de s$lo lectura (r) o delecturaescritura (rw)& -or ejemplo, se puede arir un #ichero de una ase de datospara actuali+aci$n/

92

Page 93: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 93/98

  Tutorial de Java

  HandomEccessile miHEile  miHEile ] new HandomEccessile( "tmpkk&d#","rw" )

 Acceso a la Informaci-n

6os ojetos HandomEccessile esperan in#ormaci$n de lecturaescritura de lamisma manera que los ojetos 9ataInput9ata0utput& Se tiene acceso a todas lasoperaciones read() y write() de las clases 9ataInputStream y 9ata0utputStream&

*amin se tienen muchos mtodos para moverse dentro de un #ichero/lon etile-ointer()9evuelve la posici$n actual del puntero del #icherovoid seek( lon pos )

3oloca el puntero del #ichero en una posici$n determinada& 6a posici$n se dacomo un despla+amiento en ytes desde el comien+o del #ichero& 6a posici$n Bmarca el comien+o de ese #ichero&lon lenth()9evuelve la lonitud del #ichero& 6a posici$n lenth() marca el #inal de ese #ichero&

 Actuali"aci-n de Informaci-nSe pueden utili+ar #icheros de acceso aleatorio para a%adir in#ormaci$n a #icherose2istentes/

  miHEile ] new HandomEccessile( "tmpkk&lo","rw" )  miHEile&seek( miHEile&lenth() )  3ualquier write() que haamos a partir de este punto del c$dio  a%adirá in#ormaci$n al #ichero

:amos a ver un peque%o ejemplo, 6o&java, que a%ade una cadena a un #icheroe2istente/import java&io&7

3ada ve+ que ejecutemos este proramita, se incorporarauna nueva linea al #ichero de lo que se crea la primera ve+ que seejecutaclass 6o V  pulic static void main( Strin arsXY ) throws I0.2ception V  HandomEccessile miHEile  Strin s ] "In#ormacion a incorporarNn*utorial de !avaNn"  Erimos el #ichero de acceso aleatorio  miHEile ] newHandomEccessile( "tmpjava&lo","rw" )  ;os vamos al #inal del #ichero

93

Page 94: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 94/98

  Tutorial de Java

  miHEile&seek( miHEile&lenth() )  Incorporamos la cadena al #ichero

miHEile&write@ytes( s )  3erramos el #ichero  miHEile&close()

  W  W1&. CO6UNICACION+) +N JAVA

1&.1 6ode%o de Co"nicaciones con Java.n !ava, crear una cone2i$n socket *3-I- se reali+a directamente con el paquete

 java&net& E continuaci$n mostramos un diarama de lo que ocurre en el lado delcliente y del servidor/

.l modelo de sockets más simple es/

.l servidor estalece un puerto y espera durante un cierto tiempo (timeoutseundos), a que el cliente estale+ca la cone2i$n& 3uando el cliente solicite unacone2i$n, el servidor arirá la cone2i$n socket con el mtodo accept()&.l cliente estalece una cone2i$n con la máquina host a travs del puerto que sedesine en puertoD &.l cliente y el servidor se comunican con manejadores InputStream y0utputStream&

'ay una cuesti$n al respecto de los sockets, que viene impuesta por laimplementaci$n del sistema de seuridad de !ava& Ectualmente, los applets s$lopueden estalecer cone2iones con el nodo desde el cual se trans#iri$ su c$dio&.sto está implementado en el !9G y en el intrprete de !ava de ;etscape& .sto

94

Page 95: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 95/98

  Tutorial de Java

reduce en ran manera la #le2iilidad de las #uentes de datos disponiles para losapplets& .l prolema si se permite que un applet se conecte a cualquier máquinade la red, es que entonces se podrían utili+ar los applets para inundar la red desdeun ordenador con un cliente ;etscape del que no se sospecha y sin ninunaposiilidad de rastreo&

1&.2 C%ases Uti%es en Co"nicaciones:amos a e2poner otras clases que resultan 5tiles cuando estamos desarrollandoproramas de comunicaciones, aparte de las que ya se han visto& .l prolema esque la mayoría de estas clases se prestan a discusi$n, porque se encuentran ajoel directorio sun& .sto quiere decir que son implementaciones Solaris y, por tanto,especí#icas del <ni2 Solaris& Edemás su E-I no está aranti+ada, pudiendocamiar& -ero, a pesar de todo, resultan muy interesantes y vamos a comentar unrupo de ellas solamente que se encuentran en el paquete sun&net&

Soc9et .s el ojeto ásico en toda comunicaci$n a travs de Internet, ajo el protocolo*3-& .sta clase proporciona mtodos para la entradasalida a travs de streamsque hacen la lectura y escritura a travs de sockets muy sencilla&

ServerSoc9et .s un ojeto utili+ado en las aplicaciones servidor para escuchar las peticionesque realicen los clientes conectados a ese servidor& .ste ojeto no reali+a elservicio, sino que crea un ojeto Socket en #unci$n del cliente para reali+ar toda lacomunicaci$n a travs de l&

DatagramSoc9et 6a clase de sockets datarama puede ser utili+ada para implementar dataramaso #iales (sockets <9-), no ordenados& Eunque la comunicaci$n por estos socketses muy rápida porque no hay que perder tiempo estaleciendo la cone2i$n entrecliente y servidor&

DatagramPac9et 3lase que representa un paquete datarama conteniendo in#ormaci$n de paquete,lonitud de paquete, direcciones Internet y n5meros de puerto&

MulticastSoc9et 3lase utili+ada para crear una versi$n multicast de las clase socket datarama&M5ltiples clientesservidores pueden transmitir a un rupo multicast (un rupo dedirecciones I- compartiendo el mismo n5mero de puerto)&

3et.or9Server <na clase creada para implementar mtodos y variales utili+adas en la creaci$nde un servidor *3-I-&

3et.or9!lient <na clase creada para implementar mtodos y variales utili+adas en la creaci$nde un cliente *3-I-&

95

Page 96: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 96/98

  Tutorial de Java

Soc9etImpl .s un Inter#ace que nos permite crearnos nuestro propio modelo de comunicaci$n&*endremos que implementar sus mtodos cuando la usemos& Si vamos adesarrollar una aplicaci$n con requerimientos especiales de comunicaciones, como pueden

se la implementaci$n de un corta#ueos (*3- es un protocolo no seuro), oacceder a equipos especiales (como un lector de c$dio de arras o un 1-Sdi#erencial), necesitaremos nuestra propia clase Socket&

1(. ARUIT+CTURA 6ode%oHVistaHContro%ador 

6a arquitectura M:3 (Model:iew3ontroller) #ue introducida como parte de laversi$n SmalltalkJQB del lenuajede proramaci$n Smalltalk& uedise%ada para reducir eles#uer+o de proramaci$nnecesario en la implementaci$nde sistemas m5ltiples ysincroni+ados de los mismosdatos& Sus característicasprincipales son que el Modelo,las :istas y los 3ontroladores setratan como entidadesseparadas esto hace quecualquier camio producido en elModelo se re#lejeautomáticamente en cada unade las :istas&

 Edemás del prorama ejemploque hemos presentado alprincipio y que posteriormenteimplementaremos, este modelo

de arquitectura se puede emplear en sistemas de representaci$n rá#ica de datos,como se ha citado, o en sistemas 3E9, en donde se presentan partes del dise%ocon di#erente escala de aumento, en ventanas separadas&

.n la #iura siuiente, vemos la arquitectura M:3 en su #orma más eneral& 'ayun Modelo, m5ltiples 3ontroladores que manipulan ese Modelo, y hay varias:istas de los datos del Modelo, que camian cuando camia el estado de eseModelo&

96

Page 97: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 97/98

  Tutorial de Java

%ste modelo de arquitectura presenta varias ventajas:'ay una clara separaci$n entre los componentes de un prorama lo cual nospermite implementarlos por separado&

'ay un E-I muy ien de#inido cualquiera que use el E-I, podrá reempla+ar elModelo, la :ista o el 3ontrolador, sin aparente di#icultad&6a cone2i$n entre el Modelo y sus :istas es dinámica se produce en tiempo deejecuci$n, no en tiempo de compilaci$n&

 El incorporar el modelo de arquitectura M:3 a un dise%o, las pie+as de unprorama se pueden construir por separado y lueo unirlas en tiempo deejecuci$n& Si uno de los 3omponentes, posteriormente, se oserva que #uncionamal, puede reempla+arse sin que las otras pie+as se vean a#ectadas& .steescenario contrasta con la apro2imaci$n monolítica típica de muchos proramas!ava& *odos tienen un rame que contiene todos los elementos, un controlador deeventos, un mont$n de cálculos y la presentaci$n del resultado& Ente estaperspectiva, hacer un camio aquí no es nada trivial&

1(.1 Deinici0n de %as partes.l Modelo es el ojeto que representa los datos del prorama& Maneja los datos y

controla todas sus trans#ormaciones& .l Modelo no tiene conocimiento especí#icode los 3ontroladores o de las :istas, ni siquiera contiene re#erencias a ellos& .s elpropio sistema el que tiene encomendada la responsailidad de mantener enlacesentre el Modelo y sus :istas, y noti#icar a las :istas cuando camia el Modelo&

6a :ista es el ojeto que maneja la presentaci$n visual de los datos representadospor el Modelo& 1enera una representaci$n visual del Modelo y muestra los datos alusuario& Interact5a con el Modelo a travs de una re#erencia al propio Modelo&

.l 3ontrolador es el ojeto que proporciona sini#icado a las ordenes del usuario,actuando sore los datos representados por el Modelo& 3uando se reali+a al5n

camio, entra en acci$n, ien sea por camios en la in#ormaci$n del Modelo o poralteraciones de la :ista& Interact5a con el Modelo a travs de una re#erencia alpropio Modelo&

:amos a mostrar un ejemplo concreto& 3onsideremos como tal el sistema descritoen la introducci$n a este capítulo, una pie+a eomtrica en tres dimensiones, querepresentamos en la #iura siuiente/

97

Page 98: Java

7/18/2019 Java

http://slidepdf.com/reader/full/java55cf9a08550346d033a02d72 98/98

  Tutorial de Java

.n este caso, la pie+a central de la escena en tres dimensiones es el Modelo& .lModelo es una descripci$n matemática de los vrtices y las caras que componen

la escena& 6os datos que descrien cada vrtice o cara pueden modi#icarse(qui+ás como resultado de una acci$n del usuario, o una distorsi$n de la escena, oun aloritmo de somreado)& Sin emaro, no tiene noci$n del punto de vista,mtodo de presentaci$n, perspectiva o #uente de lu+& .l Modelo es unarepresentaci$n pura de los elementos que componen la escena&

6a porci$n del prorama que trans#orma los datos dentro del Modelo en unapresentaci$n rá#ica es la :ista& 6a :ista incorpora la visi$n del Modelo a laescena es la representaci$n rá#ica de la escena desde un punto de vistadeterminado, ajo condiciones de iluminaci$n determinadas&

.l 3ontrolador sae que puede hacer el Modelo e implementa el inter#ace deusuario que permite iniciar la acci$n& .n este ejemplo, un panel de datos deentrada es lo 5nico que se necesita, para permitir a%adir, modi#icar o orrarvrtices o caras de la #iura&

Web de Manuales