Está en la página 1de 12

2

Esta obra de scar Belmonte et al. est bajo una licencia Creative O a Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported

Indice general
1. Introduccin o 1.1. Origen del lenguaje de programacin Java . . . . . . . . . . . . . o 1.2. Caracter stica de Java . . . . . . . . . . . . . . . . . . . . . . . . 1.3. El entorno de desarrollo integrado Eclipse . . . . . . . . . . . . . 1.3.1. Principales caracter sticas del entorno de desarrollo Eclipse 1.3.2. Descarga e instalacin de Eclipse . . . . . . . . . . . . . . o 1.3.3. Congurando el aspecto de Eclipse: Perspectivas y Vistas 1.3.4. El primer ejemplo . . . . . . . . . . . . . . . . . . . . . . 1.4. Herramientas de desarrollo . . . . . . . . . . . . . . . . . . . . . . 1.4.1. Aadiendo nueva funcionalidad a Eclipse: los plug-ins . . n 2. Clases 2.1. Denicin de una clase . . . . . . . . . . . . . . o 2.2. Miembros de una clase . . . . . . . . . . . . . . 2.2.1. Atributos de una clase . . . . . . . . . . 2.2.2. Mtodos de una clase. . . . . . . . . . . e 2.2.3. Constructores. . . . . . . . . . . . . . . 2.2.4. Sobrecarga de mtodos y constructores . e 2.3. Tipos de datos en Java. . . . . . . . . . . . . . 2.3.1. Arrays de datos en Java. . . . . . . . . . 2.4. Estructuras de control. . . . . . . . . . . . . . . 2.4.1. Estructuras de control de repeticin. . . o 2.4.2. Estructuras de control de seleccin. . . . o 2.5. Modicadores de acceso. . . . . . . . . . . . . . 2.6. Modicadores static y final. . . . . . . . . . 2.7. El recolector de basura. . . . . . . . . . . . . . 2.8. Finalizacin. . . . . . . . . . . . . . . . . . . . o 2.9. Comentarios. Comentarios de documentacin. . o 13 13 14 15 16 16 16 18 21 22 23 24 25 25 26 28 32 33 34 36 37 39 40 42 43 44 45 51 52 52 54 56 59 59 60 61

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

3. Herencia e Interfaces 3.1. Herencia. . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Extensin de una clase. . . . . . . . . . . . . . . . . o 3.2.1. Sobrescribir atributos. . . . . . . . . . . . . . 3.2.2. Sobrescribir mtodos. . . . . . . . . . . . . . e 3.2.3. La palabra reservada super. . . . . . . . . . . 3.2.4. El constructor por defecto y la clase Object. 3.2.5. El operador instanceof. . . . . . . . . . . . 3.2.6. El modicador final. . . . . . . . . . . . . . 3

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

4 3.2.7. Mtodos static. . . . e Clases abstractas. . . . . . . . Interfaces. . . . . . . . . . . . Enumeraciones. . . . . . . . . Paquetes en Java. . . . . . . . Clases e interface anidados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INDICE GENERAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 63 65 68 69 71 75 76 76 77 78 82 84 87 87 88 88 91 93 94 94 95 95 96 98 99 100 101 102 103 105 106 107 108 109 110 110 110 112 117 118 120 120 121 122

3.3. 3.4. 3.5. 3.6. 3.7.

4. Subversion 4.1. Qu es un sistema de control de versiones? . . e 4.2. Principales caracter sticas de Subversion . . . . 4.3. Creacin de un repositorio . . . . . . . . . . . . o 4.4. Trabajo con repositorios . . . . . . . . . . . . . 4.4.1. Obteniendo informacin del repositorio o 4.5. Integracin con Eclipse . . . . . . . . . . . . . . o 5. Excepciones 5.1. Qu es una excepcin? . . . . . e o 5.1.1. Tipos de excepciones . . . 5.2. Cmo se gestiona una excepcin o o 5.3. Creacin de excepciones propias . o

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6. Pruebas unitarias con JUnit 6.1. Qu son las pruebas unitarias? . . . . . . . . . . . . . . . . . e 6.1.1. Principios FIRST para el diseo de pruebas unitarias n 6.2. Pruebas unitarias con JUnit . . . . . . . . . . . . . . . . . . . 6.2.1. Creacin de clases de prueba . . . . . . . . . . . . . . o 6.2.2. La anotacin @Test . . . . . . . . . . . . . . . . . . . o 6.2.3. Las anotaciones @Before y @After . . . . . . . . . . . 6.2.4. Las anotaciones @BeforeClass y @AfterClass . . . . 6.2.5. Pruebas con bater de datos de entrada . . . . . . . . a 6.2.6. Ejecutar varias clases de prueba. Test Suites . . . . . 6.3. Cobertura de las pruebas . . . . . . . . . . . . . . . . . . . . 6.3.1. EclEmma y su plug-in para Eclipse . . . . . . . . . . . 7. Entrada y Salida 7.1. Flujos (Streams) . . . . . . . . . . . . . . . . 7.2. Flujos de bytes . . . . . . . . . . . . . . . . . 7.3. Flujos de caracteres . . . . . . . . . . . . . . 7.4. Conexin entre ujos de bytes y de caracteres o 7.5. El sistema de cheros y ujos a cheros . . . 7.5.1. El sistema de cheros . . . . . . . . . 7.5.2. Flujos a cheros . . . . . . . . . . . . 7.6. Serializacin . . . . . . . . . . . . . . . . . . . o

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

8. Algunas clases de utilidad del paquete estndar a 8.1. La clase Scanner . . . . . . . . . . . . . . . . . . . 8.2. Trabajo con cadenas de caracteres . . . . . . . . . 8.2.1. La clase String . . . . . . . . . . . . . . . 8.2.2. Las clases StringBuffer y StringBuilder 8.3. Clases recubridoras . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

INDICE GENERAL 8.4. Colecciones . . . . . . . . . . . . . . . . . . . . . . 8.5. Trabajo con fechas . . . . . . . . . . . . . . . . . . 8.5.1. La clase Date . . . . . . . . . . . . . . . . . 8.5.2. Las clases Calendar y GregorianCalendar 8.6. Matemticas . . . . . . . . . . . . . . . . . . . . . a 8.6.1. La clase Math . . . . . . . . . . . . . . . . . 8.6.2. La clase Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 124 128 128 129 129 129 130 133 133 134 135 138 139 139 141 143 144 144 145 145 146 146 147 148 150 151 151 153 154 155 155 157 162 162 162 163 164 166 166 168 173 173 174 175 176

9. Programacin con genricos o e 9.1. Qu son los tipos de datos genricos? . . . . . . . . . e e 9.2. Mtodos genricos . . . . . . . . . . . . . . . . . . . . e e 9.3. Clases genricas . . . . . . . . . . . . . . . . . . . . . . e 9.4. Ampliacin del tipo genrico . . . . . . . . . . . . . . o e 9.4.1. Tipos genricos con l e mite superior . . . . . . . 9.4.2. Comodines . . . . . . . . . . . . . . . . . . . . 9.5. Borrado de tipo y compatibilidad con cdigo heredado o 10.Construccin de proyectos con Ant o 10.1. Qu es Ant . . . . . . . . . . . . . . . . . e 10.2. Denicin del proyecto . . . . . . . . . . . o 10.2.1. Objetivos . . . . . . . . . . . . . . 10.2.2. Tareas . . . . . . . . . . . . . . . . 10.3. Compilar el cdigo fuente de un proyecto o 10.4. Propiedades . . . . . . . . . . . . . . . . . 10.5. Estructuras path-like . . . . . . . . . . . 10.6. Ejecucin de las Pruebas Unitarias . . . . o 10.7. Generacin de la documentacin . . . . . o o 10.8. Empaquetado de la aplicacin . . . . . . . o 10.9. Ejecucin y limpieza . . . . . . . . . . . . o

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

11.Interfaces grcas de usuario a 11.1. APIs para la programacin de interfaces grcos de usuario en o a Java: AWT y Swing . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Contenedores y Componentes . . . . . . . . . . . . . . . . . . . . 11.3. Gestores de Aspecto (Layout Managers) . . . . . . . . . . . . . . 11.4. Deteccin de eventos: Escuchadores . . . . . . . . . . . . . . . . . o 11.5. Algunos componentes Swing . . . . . . . . . . . . . . . . . . . . . 11.5.1. JLabel, muestra texto o iconos . . . . . . . . . . . . . . . 11.5.2. JButton, botones que el usuario puede pulsar . . . . . . . 11.5.3. JTextField, campos de introduccin de texto . . . . . . . o 11.5.4. JRadioButton, botones de opciones . . . . . . . . . . . . 11.5.5. JCheckBox, botones de seleccin mltiple . . . . . . . . . o u 11.5.6. JList, listas de seleccin . . . . . . . . . . . . . . . . . . o 11.6. El patrn de diseo Modelo/Vista/Controlador . . . . . . . . . . o n 12.Applets 12.1. Qu son los Applets? . . . . . . . . . . . . e 12.2. Ciclo de vida de un Applet . . . . . . . . . 12.3. Cdigo HTML para contener un Applet . . o 12.4. Lectura de parmetros de la pgina HTML a a

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

INDICE GENERAL 12.5. Convertir una aplicacin Swing en un Applet . . . . . . . . . . . 176 o 12.6. Comunicacin entre Applets . . . . . . . . . . . . . . . . . . . . . 177 o

13.Control de errores con MyLyn y Bugzilla 13.1. Sistema de control de tareas MyLyn . . . . . . . . . . . . . . . . 13.1.1. Cual es el objetivo de MyLyn . . . . . . . . . . . . . . . . 13.1.2. Trabajar con MyLyn . . . . . . . . . . . . . . . . . . . . . 13.2. Sistema de gestin de errores Bugzilla . . . . . . . . . . . . . . . o 13.2.1. Cual es el objetivo de Bugzilla . . . . . . . . . . . . . . . 13.2.2. Instalacin de Bugzilla . . . . . . . . . . . . . . . . . . . . o 13.2.3. Trabajar con Bugzilla . . . . . . . . . . . . . . . . . . . . 13.3. Acceso a Bugzilla desde MyLyn y Eclipse . . . . . . . . . . . . . 13.3.1. Benecios de la combinacin de Bugzilla y MyLyn desde o Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3.2. Trabajo con MyLyn y Bugzilla desde Eclipse . . . . . . .

181 182 182 182 188 188 188 195 199 201 201

14.Programacin concurrente con Hilos o 207 14.1. Qu es un hilo? Utilidades. Consideraciones sobre el uso de hilos 208 e 14.2. Creacin de hilos en Java . . . . . . . . . . . . . . . . . . . . . . 209 o 14.2.1. Creacin de un Hilo extendiendo a la clase Thread . . . . 209 o 14.2.2. Creacin de un Hilo mediante una clase interna . . . . . . 210 o 14.2.3. Creacin de un Hilo mediante una clase interna annima . 211 o o 14.3. Ciclo de vida de un hilo . . . . . . . . . . . . . . . . . . . . . . . 212 14.4. Control de hilos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 14.5. Sincronizacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 o 14.5.1. Sincronizacn utilizando los cerrojos intr o nsecos . . . . . . 215 14.5.2. Sincronizacin utilizando el interface Lock . . . . . . . 218 o 15.Programacin para la Red o 15.1. Trabajo con URLs . . . . . . . . . . . 15.1.1. Qu es una URL? . . . . . . . e 15.1.2. Leer desde una URL . . . . . . 15.1.3. Escribir a una URL . . . . . . 15.2. Trabajo con Sockets . . . . . . . . . . 15.2.1. Qu es un Socket? . . . . . . . e 15.2.2. Sockets bajo el protocolo TCP 15.2.3. Sockets bajo el protocolo UDP 221 222 222 223 223 225 225 225 227 231 232 233 233 233 233 234 234 235 235 236 238

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

16.Patrones de dise o n 16.1. Principios de POO . . . . . . . . . . . . . 16.2. Qu son los patrones de diseo? . . . . . e n 16.3. Qu es el acoplamiento entre clases y por e 16.4. Grupos de patrones de diseo . . . . . . . n 16.5. El patrn de diseo Singleton . . . . . . . o n 16.5.1. Situacin que intenta resolver . . . o 16.5.2. Ejemplo de implementacin . . . . o 16.6. El patrn de diseo Factory Method . . . o n 16.6.1. Situacin que intenta resolver . . . o 16.6.2. Ejemplo de implementacin . . . . o 16.7. El patrn de diseo Abstract Factory . . . o n

. . . . . . . . . . . . . . . . . . . . . . . . . . qu hay que evitarlo? e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

INDICE GENERAL 16.7.1. Situacin que intenta resolver o 16.7.2. Ejemplo de implementacin . o 16.8. El patrn de diseo Strategy . . . . . o n 16.8.1. Situacin que intenta resolver o 16.8.2. Ejemplo de implementacin . o 16.9. El patrn de diseo Observer . . . . o n 16.9.1. Situacin que intenta resolver o 16.9.2. Ejemplo de implementacin . o 16.10. l patrn de diseo Decorator . . . . E o n 16.10.1.Situacin que intenta resolver o 16.10.2.Ejemplo de implementacin . o A. build.xml B. Aplicacin Hipoteca o C. Ejemplo sincronizacin o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7 238 238 244 245 245 247 247 248 249 250 250 255 259 265

INDICE GENERAL

Prefacio
La escritura de un libro es una tarea ingente. La motivacin para abordarla debe o ser, al menos, tan grande como la tarea que se desea acometer. Para nosotros, la motivacin ha consistido en escribir un libro que se distinguiera del resto de o libros que abordan el aprendizaje del lenguaje de programacin Java. o Por un lado, existen excelentes libros que muestran cmo programar en Java. o Por otro lado existen excelentes libros, en nmero inferior, que muestran cmo u o utilizar herramientas de ayuda y soporte al desarrollo de proyectos en Java. Pensamos que, entre ellos, exist cabida para escribir un libro que abordase el a aprendizaje de Java al mismo tiempo que las herramientas imprescindibles de ayuda al desarrollo. Dentro de nuestra Universidad, la Jaume I, hemos impartido, y seguimos hacindolo, cursos sobre el lenguaje de programacin Java para todo tipo de e o alumnado: desde alumnos de las distintas titulaciones de informtica, alumnos a extranjeros en el Master Europeo Erasmus Mundus sobre tecnolog Geoesas paciales, hasta profesionales que quieren mantener al d su conocimiento y a mejorar sus expectativas laborales. Esta experiencia nos ha dado la conanza suciente como para animarnos a escribir el presente libro. Y, a pesar del contacto casi diario con Java y sus tecnolog reconocemos as, que an nos queda mucho por aprender, que el mundo que brinda el aprendizaje u de Java es inmenso y que se renueva constantemente. Esto ultimo es s ntoma de que la comunidad alrededor de esta tecnolog est viva y posee un gran a a entusiasmo.

Objetivos del libro


Dos son los objetivos principales del este libro: Presentar el lenguaje de programacin Java. o Presentar algunas de las herramientas de desarrollo que ayudan en el desarrollo de proyectos utilizando Java. Con un poco ms de detalle, en el primer objetivo hemos pretendido no slo a o presentar el lenguaje de programacin, adems indicamos unas directrices para o a crear cdigo de calidad, cdigo que sea fcil leer, fcil mantener y que se puede o o a a probar de manera automtica. a El segundo de los objetivos es casi una necesidad imperiosa a los equipos de desarrollo que siguen utilizando como herramienta de control de versiones un directorio compartido. O a aquellos equipos de desarrollo que siguen probando 9

10

INDICE GENERAL

sus aplicaciones de manera manual. O para aquellos equipos de desarrollo que utilizan como sistema de seguimiento de errores el correo electrnico. Y un largo o etctera de prcticas desaconsejadas. e a

Cmo est organizado este libro o a


La Figura 1 muestra la organizacin en cap o tulos del presente libro. Cada uno de los recuadros representa un cap tulo. Los cap tulos se han agrupado en dos grandes bloques. En el primero de ellos Java bsico hemos agrupado los cap a tulos que consideramos introductorios, y que representan el ncleo de la programacin u o orientada a objetos en Java. En el segundo grupo Java avanzado aparecen los cap tulos que consideramos aspectos avanzados del lenguaje con respecto a los cap tulos del primer grupo. En ambos grupos hay cap tulos que no aparecen en la l nea principal del ujo, estos cap tulos son los que presentan herramientas que consideramos de gran utilidad en el desarrollo de proyectos informticos utilizando tecnolog a as Java. El orden de introduccin de estas herramientas a sido fuente de largas o conversaciones: Es conveniente introducir al principio la herramienta JUnit siguiendo una orientacin hacia el desarrollo guiado por pruebas? Debemos o delegar hasta el segundo bloque de cap tulos el dedicado a la construccin de o proyectos con Ant? Hemos optado por seguir un orden quizs ms conservado y a a menos arriesgado, intentando presentar las herramientas en el momento en que conceptualmente se entienda cual es la necesidad que vienen a cubrir. Esperamos que esta ordenacin haga el trnsito suave entre el aprendizaje de Java como o a lenguaje de programacin y las herramientas de ayuda al desarrollo. o

Quien deber leer este libro a


El publico objetivo de este libro son los desarrolladores que quieran aprender el lenguaje de programacin Java y ya posean conocimientos de programacin o o estructurada y orientacin a objetos. Los conceptos del lenguaje son presentados o desde la base, suponiendo que es la primera vez que el lector se aproxima al lenguaje de programacin Java. o Pero este libro tambin est pensado para aquellas personas que conocen el e a lenguaje de programacin Java y an no han descubierto la gran cantidad de o u herramientas de ayuda que existen en el desarrollo de proyecto.

Agradecimientos
La seccin de agradecimientos es posiblemente una de las ms complicadas de o a escribir. Debe tener un equilibrio entre el espacio dedicado a ella y el reconocimiento a todas las personas, que de un modo u otro han contribuido a que un libro tenga su forma nal. Para no dejarnos por citar el nombre de nadie, preferimos ampliar nuestro agradecimiento a colectivos. En primer lugar a nuestro alumnos, por que a n de cuentas es a ellos a los que va dirigido este libro. Con sus preguntas, apreciaciones, comentarios y dudas nos han ayudado a darnos cuenta de donde estaban los escollos en la lectura de este libro.

INDICE GENERAL

11

Figura 1: Organizacin del libro. o

12

INDICE GENERAL

Tambin a nuestros compaeros de la Universidad, porque con sus comene n tarios y recticaciones nos han ayudado a eliminar errores en los contenidos. Y nalmente a nuestros amigos por su nimo constante para que esta labor a llegase a buen puerto. A todos ellos gracias.