programación en-java-6-luis-joyanes-aguilar-freelibros.org

601

Upload: mariana-libano

Post on 14-Apr-2017

698 views

Category:

Engineering


102 download

TRANSCRIPT

  • www.FreeLibros.org
  • programacin en00_Joyanes Preliminares.indd I00_Joyanes Preliminares.indd I 12/5/11 12:49:5512/5/11 12:49:55
  • 00_Joyanes Preliminares.indd 2 16/5/11 13:43:17
  • Luis Joyanes AguilarCatedrtico de Lenguajes y Sistemas InformticosUniversidad Pontificia de SalamancaIgnacio Zahonero Martnez Profesor Asociado de Programacin y Estructura de DatosUniversidad Pontificia de SalamancaAlgoritmos, programacin orientada a objetose interfaz grfica de usuarioprogramacin enMXICO BOGOT BUENOS AIRES CARACAS GUATEMALA MADRID NUEVA YORK SAN JUAN SANTIAGO SO PAULO AUCKLAND LONDRES MILN MONTREALNUEVA DELHI SAN FRANCISCO SINGAPUR ST. LOUIS SIDNEY TORONTO00_Joyanes Preliminares.indd III00_Joyanes Preliminares.indd III 12/5/11 12:49:5512/5/11 12:49:55
  • Director General Mxico: Miguel ngel Toledo CastellanosEditor sponsor: Pablo Eduardo Roig VzquezCoordinadora editorial: Marcela I. Rocha MartnezEditora de desarrollo: Karen Estrada ArriagaSupervisor de produccin: Zeferino Garca GarcaProGraMaCin En Java 6. algoritmos, programacin orientada a objetos e interfaz grfica de usuariosPrimera edicinProhibida la reproduccin total o parcial de esta obra,por cualquier medio, sin la autorizacin escrita del editor.DERECHOS RESERVADOS 2011, respecto a la primera edicin porMcGRAW-HILL/INTERAMERICANA EDITORES, S.A. DE C.V.A Subsidiary of The McGraw-Hill Companies, Inc.Prolongacin Paseo de la Reforma 1015, Torre A,Piso 17, Colonia Desarrollo Santa Fe,Delegacin lvaro Obregn,C.P. 01376, Mxico, D. F.Miembro de la Cmara Nacional de la Industria Editorial Mexicana, Reg. Nm. 736iSBn: 978-607-15-0618-41234567890 1098765432101Impreso en Mxico Printed in Mexico00_Joyanes Preliminares.indd 4 13/5/11 11:59:44
  • CONTENIDOPrlogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIXAgradecimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXVIntroduccin a la programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Breve historia de las computadoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.1.1 Generacin de computadoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Organizacin y componentes de una computadora . . . . . . . . . . . . . . . . . . . . 4 1.2.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4 Lenguaje de computadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.1 Unidades de medida de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.2 Representacin de la informacin en las computadoras (cdigos de caracteres) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.5 Lenguajes de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.5.1 Lenguaje ensamblador (assembly language) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.5.2 Lenguaje de programacin de alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.5.3 El caso la mquina virtual Java (JVM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6 Internet y la web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.7 La revolucin Web 2.0 y cloud computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.7.1 Los social media . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.7.2 Desarrollo de programas web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.7.3 Cloud computing (computacin en nube) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.8 Web semntica y Web 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.9 Java como lenguaje y plataforma de programacin . . . . . . . . . . . . . . . . . . . . 20 1.10 Historia de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.10.1 Caractersticas de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Metodologa de programacin, creacin y desarrollo de programas en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.1 Resolucin de problemas con Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26captulo 1captulo 200_Joyanes Preliminares.indd V00_Joyanes Preliminares.indd V 12/5/11 12:49:5712/5/11 12:49:57
  • VI CONTENIDO 2.1.1 Anlisis del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.1.2 Diseo del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.1.3 Codificacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1.4 Compilacin-interpretacin de un programa en Java . . . . . . . . . . . . . . . . . . . 30 2.1.5 Verificacin y depuracin de un programa Java . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1.6 Documentacin y mantenimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2 Creacin de un programa en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.3 Metodologa de la programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.1 Programacin estructurada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.2 Programacin orientada a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.4 Metodologa de desarrollo basada en clases . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.5 Entornos de programacin en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.5.1 El kit de desarrollo Java: JDK 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.6 Entornos de desarrollo integrado (EDI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.6.1 Herramientas para desarrollo en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.6.2 NetBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.6.3 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.6.4 BlueJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.6.5 Otros entornos de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.7 Compilacin sin entornos de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Elementos bsicos de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.1 Estructura general de un programa en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.1.1 Declaracin import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.1.2 Declaracin de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.1.3 Mtodo main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1.4 Mtodos definidos por el usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.1.5 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.2 Elementos de un programa en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.2.1 Tokens (Elementos lxicos del programa) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.2.2 Signos de puntuacin y separadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.2.3 Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.3 Tipos de datos en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.3.1 Enteros: int, byte, short, long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.3.2 Tipos de coma flotante (float/double) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.3.3 Caracteres (char) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.3.4 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.3.5 El tipo de dato void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.4 Tipo de datos enumeracin (enum) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63captulo 300_Joyanes Preliminares.indd VI00_Joyanes Preliminares.indd VI 12/5/11 12:49:5812/5/11 12:49:58
  • Contenido VII 3.5 Conversin de tipos (cast) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.6 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.6.1 Constantes literales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.6.2 Constantes declaradas final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.7 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.7.1 Declaracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.7.2 Inicializacin de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.8 Duracin de una variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.8.1 Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.8.2 Variables de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.8.3 Acceso a variables de clase fuera de la clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.9 Entradas y salidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 3.9.1 Salida (System.out) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.9.2 Salida con formato: printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.9.3 Entrada (system.in) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.9.4 Entrada con la clase Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.10 Tipos de datos primitivos (clases envoltorio) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Operadores y expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.1 Operadores y expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.2 Operador de asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.3 Operadores aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.3.1 Asociatividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.3.2 Uso de parntesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.4 Operadores de incremento y decremento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4.5 Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.6 Operadores lgicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.6.1 Evaluacin en cortocircuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.6.2 Operadores | y & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.6.3 Asignacin booleana (lgica) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.7 Operadores de manipulacin de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.7.1 Operadores de asignacin adicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.7.2. Operadores de desplazamiento de bits (>>, >>>,
  • VIII CONTENIDO 4.11 Operador instanceof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.12 Conversiones de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.12.1 Conversin implcita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.12.2 Reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.12.3 Conversiones explcitas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.13 Operador suma (+) con cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.14 Prioridad y asociatividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.15 strictfp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Estructuras de seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.1 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.2 Sentencia if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 5.3 Sentencia if de dos alternativas: if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5.4 Sentencias if-else anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.4.1 Sangra en las sentencias if anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.4.2 Comparacin de sentencias if anidadas y secuencias de sentencias if . . 115 5.5 Sentencia de control switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5.5.1 Sentencia break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 5.5.2 Caso particular de case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.5.3 Uso de switch en mens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.6 Expresiones condicionales, operador ?: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.7 Evaluacin en cortocircuito de expresiones lgicas . . . . . . . . . . . . . . . . . . . . . 123 5.8 Puesta a punto de programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 5.9 Errores frecuentes de programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Estructuras de control I: bucles (lazos) . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.1 Sentencia while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6.1.1 Terminaciones anormales de un bucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 6.1.2 Bucles controlados por centinelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 6.1.3 Bucles controlados por indicadores o banderas . . . . . . . . . . . . . . . . . . . . . . 138 6.1.4 Sentencia break en bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 6.1.5 La sentencia break con etiqueta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142captulo 5captulo 600_Joyanes Preliminares.indd VIII00_Joyanes Preliminares.indd VIII 12/5/11 12:49:5812/5/11 12:49:58
  • Contenido IX 6.2 Repeticin: bucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 6.2.1 Usos de bucles for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 6.2.2 Precauciones en el uso de for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 6.2.3 Bucles infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 6.2.4 Los bucles for vacos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6.2.5 Expresiones nulas en bucles for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 6.2.6 Sentencia continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 6.3 Bucle for each (Java 5.0 y Java 6) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.4 Repeticin: bucle do...while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.4.1 Diferencias entre while y do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 6.5 Comparacin de bucles while, for y do-while . . . . . . . . . . . . . . . . . . . . . 156 6.6 Diseo de bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.6.1 Bucles para diseo de sumas y productos . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.6.2 Fin de un bucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 6.7 Bucles anidados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 6.6 Transferencia de control: sentencias break y continue . . . . . . . . . . . . . . . 163 6.6.1 Sentencia break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 6.6.2 Sentencia continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Fundamentos de programacin orientada a objetos y UML . . . . . . 171 7.1 Conceptos fundamentales de orientacin a objetos . . . . . . . . . . . . . . . . . . . . . 172 7.1.1 Abstraccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 7.1.2 Encapsulamiento y ocultacin de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 7.1.3 Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 7.1.4 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 7.1.5 Reutilizacin (reusabilidad) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 7.2 Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 7.3 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.3.1 Estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.3.2 Comportamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.3.3 Identidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.4 Identificacin de clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7.5 Relaciones entre clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 7.6 UML: modelado de aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 7.6.1 Qu es un lenguaje de modelado? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 7.6.2 Desarrollo de software orientado a objetos con UML . . . . . . . . . . . . . . . . . . 182 7.7 Diseo y representacin grfica de clases y objetos en UML . . . . . . . . . . . . . 182 7.7.1 Representacin grfica de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 7.7.2 Representacin grfica de objetos en UML. . . . . . . . . . . . . . . . . . . . . . . . . . 183captulo 700_Joyanes Preliminares.indd IX00_Joyanes Preliminares.indd IX 12/5/11 12:49:5912/5/11 12:49:59
  • X CONTENIDO 7.8 Herencia: clases derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 7.8.1 Niveles de herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 7.8.2 Declaracin de una clase derivada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 8.1 Clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 8.1.1 Qu son los objetos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.1.2 Qu son las clases? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.2 Declaracin de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 8.2.1 Creacin de un objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.2.2 Visibilidad de los miembros de la clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 8.2.3 Mtodos de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 8.3 Implementacin de las clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8.4 Clases pblicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8.5 Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 8.5.1 Sentencia package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 8.5.2 Sentencia import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 8.6 Constructores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 8.6.1 Constructor por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 8.6.2 Constructores sobrecargados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 8.7 Recoleccin de basura (objetos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 8.7.1 Mtodo finalize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 8.8 Autorreferencia del objeto: this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 8.9 Miembros static de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 8.9.1 Variables static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 8.9.2 Mtodos static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 8.10 Consideraciones prcticas de diseo de clases . . . . . . . . . . . . . . . . . . . . . . . . . . 210 8.10.1 Mtodos y clases predefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 8.10.2 Clases definidas por el usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 8.11 Biblioteca de clases de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 8.11.1 Clase System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 8.11.2 Clase Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 8.11.3 Operador instanceof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 8.11.4 Clase Math, funciones matemticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220captulo 800_Joyanes Preliminares.indd X00_Joyanes Preliminares.indd X 12/5/11 12:49:5912/5/11 12:49:59
  • Contenido XIMtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.1 Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 9.2 Mtodo main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 9.3 Retorno de un mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.3.1 Llamada a un mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.4 Acceso a mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.5 Paso de argumentos a mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 9.5.1 Paso de parmetros por valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 9.5.2 Lista de parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 9.5.3 Modificador final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 9.6 Mtodos abstractos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.7 Sobrecarga de mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 9.7.1 Sobrecarga de constructores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 9.8 mbito o alcance de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 9.8.1 mbito de la clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 9.8.2 mbito del mtodo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.8.3 mbito del bloque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 9.8.4 Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 9.9 Mtodos predefinidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Arreglos (arrays). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 10.1 Arreglos (arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 10.1.1 Declaracin de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 10.1.2 Creacin de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 10.1.3 Subndices de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 10.1.4 Tamao de los arreglos, atributo length . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 10.1.5 Verificacin del ndice de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 10.1.6 Inicializacin de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 10.1.7 Copia de arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 10.2 Bucle for each para recorrido de arreglos y colecciones (Java SE 5.0 y 6) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 10.3 Arreglos multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 10.3.1 Inicializacin de arreglos multidimensionales . . . . . . . . . . . . . . . . . . . . . . . 252 10.3.2 Arreglos irregulares o triangulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 10.3.3 Acceso a los elementos de arreglos bidimensionales . . . . . . . . . . . . . . . . . . 254 10.3.4 Arreglos de ms de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256captulo 10captulo 900_Joyanes Preliminares.indd XI00_Joyanes Preliminares.indd XI 12/5/11 12:50:0012/5/11 12:50:00
  • XII CONTENIDO 10.4 Utilizacin de arreglos como parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 10.4.1 Precauciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 10.5 Clase Vector y ArrayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 10.5.1 Clase Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 10.5.2 Clase ArrayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 11.1 Cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 11.1.1 Declaracin de variables objeto cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 11.1.2 Inicializacin de variables de cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 11.1.3 Constructores de un objeto cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 11.2 Lectura de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 11.2.1 Mtodo read() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 11.2.2 Mtodos print() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 11.3 Asignacin de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 11.4 Cadenas como parmetros; arreglos de cadenas . . . . . . . . . . . . . . . . . . . . . . . . 282 11.4.1 Arreglos de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 11.5 Longitud y concatenacin de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 11.5.1 El mtodo length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 11.5.2 Concatenacin de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 11.6 Obtencin de caracteres de una cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 11.6.1 Obtencin de un carcter: mtodo charAt() . . . . . . . . . . . . . . . . . . . . . . 285 11.6.2 Obtencin de un arreglo de caracteres: mtodo getChars() . . . . . . . . . 286 11.6.3 Obtencin de una subcadena: mtodo substring() . . . . . . . . . . . . . . . . 287 11.7 Comparacin de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 11.7.1 Mtodo compareTo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 11.7.2 Mtodos equals() e equalsIgnoreCase(). . . . . . . . . . . . . . . . . . . . . . 289 11.7.3 Mtodo regionMatches() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 11.7.4 Mtodos startsWith() y endsWith() . . . . . . . . . . . . . . . . . . . . . . . . . . 291 11.8 Conversin de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 11.8.1 Mtodo toUpperCase() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 11.8.2 Mtodo toLowerCase() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 11.8.3 Mtodo trim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 11.8.4 Mtodo replace() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 11.8.5 Mtodo toCharArray() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 11.9 Conversin de otros tipos a cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 11.10 Bsqueda de caracteres y cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295captulo 1100_Joyanes Preliminares.indd XII00_Joyanes Preliminares.indd XII 12/5/11 12:50:0012/5/11 12:50:00
  • Contenido XIII 11.10.1 Mtodo indexOf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 11.10.2 Mtodo lastIndexOf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300Extensin de clases: interfaces, clases internas y enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 12.1 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 12.1.1 Implementacin de una interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 12.1.2 Jerarqua de interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 12.2 Herencia de clases e implementacin de interfaces . . . . . . . . . . . . . . . . . . . . . 307 12.2.1 Variables de tipo interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 12.3 Clases abstractas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 12.4 Clases internas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 12.4.1 Clases internas miembro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 12.4.2 Clases internas locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 12.4.3 Clases internas static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 12.5 Clases annimas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 12.6 Enumeraciones (clases enum) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 13.1 Clases derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 13.1.1 Declaracin de una clase derivada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 13.1.2 Diseo de clases derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 13.1.3 Sobrecarga de mtodos en la clase derivada . . . . . . . . . . . . . . . . . . . . . . . . . 327 13.2 Herencia pblica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 13.3 Constructores en herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 13.3.1 Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 13.3.2 Referencia a la clase base: super . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 13.4 Conversin entre objetos de clase derivada y clase base . . . . . . . . . . . . . . . . . 335 13.5 Clases no derivables: atributo final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 13.6 Herencia mltiple (no soportada en Java) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340captulo 12captulo 1300_Joyanes Preliminares.indd XIII00_Joyanes Preliminares.indd XIII 12/5/11 12:50:0012/5/11 12:50:00
  • XIV CONTENIDOPolimorfi smo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 14.1 Ligadura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 14.2 Clases y mtodos abstractos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 14.2.1 Mtodos abstractos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 14.2.2 Ligadura dinmica mediante mtodos abstractos . . . . . . . . . . . . . . . . . . . . 349 14.3 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 14.3.1 Uso del polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 14.3.2 Ventajas del polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 14.3.3 Ligadura dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 14.4 Mtodos no derivables: atributo final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356Genericidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 15.1 Genericidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 15.2 Declaracin de una clase genrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 15.3 Objetos de una clase genrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 15.3.1 Restricciones con tipos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 15.4 Clase genrica Pila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 15.4.1 Utilizacin de la plantilla de una clase genrica . . . . . . . . . . . . . . . . . . . . . . 364 15.5 Mtodos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 15.5.1 Definicin de un mtodo genrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 15.5.2 Llamada a un mtodo genrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 15.6 Genericidad y mquina virtual Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 15.7 Lmites al tipo genrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 15.8 Herencia y genericidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 15.8.1 Comodn de genericidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 15.9 Genericidad frente a polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 16.1 Condiciones de error en programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 16.1.1 Por qu considerar las condiciones de error? . . . . . . . . . . . . . . . . . . . . . . . 382captulo 14captulo 15captulo 1600_Joyanes Preliminares.indd XIV00_Joyanes Preliminares.indd XIV 12/5/11 12:50:0012/5/11 12:50:00
  • Contenido XV 16.2 Tratamiento de los cdigos de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 16.3 Manejo de excepciones en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 16.4 Mecanismo del manejo de excepciones en Java . . . . . . . . . . . . . . . . . . . . . . . . 384 16.4.1 Modelo de manejo de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 16.4.2 Diseo de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 16.4.3 Bloques try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 16.4.4 Lanzamiento de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 16.4.5 Captura de una excepcin: catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 16.4.6 Clusula finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 16.5 Clases de excepciones definidas en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 16.5.1 RuntimeException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 16.5.2 Excepciones comprobadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 16.5.3 Mtodos que informan de la excepcin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 16.6 Nuevas clases de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 16.7 Especificacin de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405Archivos y fl ujos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 17.1 Flujos y archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 17.2 Clase File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 17.2.1 Informacin de un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 17.3 Flujos y jerarqua de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 17.3.1 Archivos de bajo nivel: FileInputStream y FileOutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 17.3.2 Archivos de datos: DataInputStream y DataOutputStream . . . . . . . . 414 17.3.3 Flujos PrintStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 17.4 Archivos de caracteres: flujos de tipo Reader y Writer . . . . . . . . . . . . . . . . 420 17.4.1 Leer archivos de caracteres: InputStreamReader, BufferedReader y FileReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 17.4.2 Flujos que escriben caracteres: Writer, PrintWriter . . . . . . . . . . . . . . 422 17.5 Archivos de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 17.5.1 Clase de objeto persistente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 17.5.2 Flujos ObjectOutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 17.5.3 Flujos ObjectInputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429captulo 1700_Joyanes Preliminares.indd XV00_Joyanes Preliminares.indd XV 12/5/11 12:50:0112/5/11 12:50:01
  • XVI CONTENIDOAlgoritmos de ordenacin y bsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . 431 18.1 Ordenacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 18.2 Algoritmos de ordenacin bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 18.3 Ordenacin por seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 18.3.1 Codificacin del algoritmo de seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 18.3.2 Complejidad del algoritmo de seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 18.4 Ordenacin por insercin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 18.4.1 Algoritmo de ordenacin por insercin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 18.4.2 Codificacin del algoritmo de ordenacin por insercin . . . . . . . . . . . . . . 436 18.4.3 Complejidad del algoritmo de insercin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 18.5 Ordenacin Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 18.5.1 Algoritmo de ordenacin Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 18.5.2 Codificacin del algoritmo de ordenacin Shell . . . . . . . . . . . . . . . . . . . . . 439 18.5.3 Anlisis del algoritmo de ordenacin Shell . . . . . . . . . . . . . . . . . . . . . . . . . . 439 18.6 Ordenacin de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 18.6.1 Ordenacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 18.7 Bsqueda en listas: bsqueda secuencial y binaria . . . . . . . . . . . . . . . . . . . . . . 443 18.7.1 Bsqueda secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 18.7.2 Bsqueda binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 18.7.3 Algoritmo y codificacin de la bsqueda binaria . . . . . . . . . . . . . . . . . . . . . 444 18.7.4 Anlisis de los algoritmos de bsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 18.7.5 Complejidad de la bsqueda secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 18.7.6 Anlisis de la bsqueda binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 18.7.7 Comparacin de la bsqueda binaria y secuencial . . . . . . . . . . . . . . . . . . . . 447Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 19.1 La naturaleza de la recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 19.2 Mtodos recursivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 19.2.1 Recursividad indirecta: mtodos mutuamente recursivos . . . . . . . . . . . . . . 457 19.2.2 Condicin de terminacin de la recursin . . . . . . . . . . . . . . . . . . . . . . . . . . 458 19.3 Recursin versus iteracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 19.3.1 Directrices en la toma de decisin iteracin/recursin . . . . . . . . . . . . . . . . 460 19.4. Recursin infinita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 19.5 Algoritmos divide y vence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 19.6 Torres de Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 19.6.1 Diseo del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463captulo 18captulo 1900_Joyanes Preliminares.indd XVI00_Joyanes Preliminares.indd XVI 12/5/11 12:50:0112/5/11 12:50:01
  • Contenido XVII 19.6.2 Implementacin de las torres de Hanoi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 19.6.3 Anlisis del algoritmo torres de Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 19.6.4 Bsqueda binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 19.6.5 Anlisis del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 19.7 Ordenacin por mezclas: mergesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 19.7.1 Algoritmo mergesort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474Grfi cos I. GUI/Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 20.1 Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 20.1.1 Paquetes de las API de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 20.1.2 Swing versus AWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 20.2 Crear un marco o clase JFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 20.2.1 Mtodos propios de JFrame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 20.3 Administrador de diseo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 20.3.1 BorderLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 20.3.2 FlowLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 20.3.3 GridLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 20.3.4 BoxLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 20.3.5 BoxLayout-Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 20.3.6 Combinar gestores de posicionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 20.3.7 Desactivar el gestor de posicionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 20.4 Botones y etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 20.4.1 Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 20.4.2 Botones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 20.4.3 JComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 20.5 Componentes de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 20.5.1 JTextComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 20.5.2 JTextField, JPasswordField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 20.5.3 JTextArea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501Grfi cos II. Componentes y eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 21.1 Ventanas de dilogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 21.2 Seleccin de archivos: JFileChooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 21.2.1 Mtodos de inters de JFileChooser . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507captulo 20captulo 2100_Joyanes Preliminares.indd XVII00_Joyanes Preliminares.indd XVII 12/5/11 12:50:0112/5/11 12:50:01
  • XVIII CONTENIDO 21.2.1 Filtros de seleccin de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 21.3 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 21.4 Gestin de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 21.4.1 Oyente de un evento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 21.5 Jerarqua de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 21.6 Componentes grficos como fuentes de eventos . . . . . . . . . . . . . . . . . . . . . . . 513 21.6.1 Listeners y eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519Applets: programacin en internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 22.1 Concepto de applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 22.2 Creacin de un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 22.2.1 Creacin prctica de un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 22.2.2 Documento HTML para applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 22.2.3 Compilacin y ejecucin de un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 22.3 Ciclo de vida de un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 22.4 Dibujar imgenes en un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 22.4.1 void paint(Graphics g) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 22.4.2 void resize(int ancho, int alto) . . . . . . . . . . . . . . . . . . . . . . . . 530 22.4.3 void repaint() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 22.5 Clases graphics, font y color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 22.6 Parmetros en un applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 22.7 Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 22.8 Conversin de un programa aplicacin en un applet . . . . . . . . . . . . . . . . . . . . 534 22.9 Recursos web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535Conceptos clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Apndice A. Cdigos de numeracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 Apndice B. Cdigos ASCII y UNICODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 Apndice C. Palabras reservadas de Java (versiones 2, 5 y 6) . . . . . . . . . . . . . . . . . . 555 Apndice D. Prioridad de operadores Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 Apndice E. Bibliotecas de clases de Java SE 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Apndice F. Especificaciones de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 Apndice G. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564ndice analtico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565captulo 2200_Joyanes Preliminares.indd XVIII00_Joyanes Preliminares.indd XVIII 12/5/11 12:50:0212/5/11 12:50:02
  • Contenido XIXUna primera reflexin acerca de JavaLa empresa Sun Microsystems anunci formalmente el nacimiento de Java en mayo de 1995 en una conferencia del sector industrial de computacin. La promesa de que la tecnologa Java1 se convertira en un aglutinante o integrador (universal glue fue el tr-mino original empleado) que conectara a los usuarios con la informacin proceden-te de servidores web, bases de datos, proveedores de informacin o cualquier otra fuente de informacin imaginable, comenz pronto a hacerse una realidad palpable. Java se granje la atencin de la comunidad tecnolgica y de negocios. La expansin de la World Wide Web, que por aquella poca comenz su expansin despus de su nacimiento en los primeros aos de esa dcada, de la mano de su creador Tim Berners-Lee, y la posibi-lidad de Java como herramienta para su uso en los primeros navegadores convirti pron-to a esta tecnologa en un referente en los negocios y en la industria.Java se utiliza hoy da con gran profusin en las empresas y es clave en el desarrollo de la web; sus caractersticas de seguridad tanto para desarrolladores como para usuarios fortalecieron su uso. Java se utiliza actualmente en el desarrollo de grandes proyectos tec-nolgicos empresariales, para soportar y mejorar la funcionalidad de los servidores web (los equipos que proporcionan los contenidos que visualizamos a diario en navegadores como Firefox, Explorer, Chrome, Opera o Safari), aplicaciones para cualquier tipo de dis positivos, desde telfonos celulares hasta reproductores de audio, video, fotografa o videoconsolas; as como para dispositivos embebidos en los grandes sistemas de comu-nicacin como aviones, barcos, trenes, etctera. Java tambin presenta caractersticas de programacin avanzada, lo que le hace muy til para realizar tareas tales como progra-mar redes o conectar bases de datos y proyectos concurrentes. Desde su presentacin en 1996, Sun (ahora propiedad de Oracle) ha lanzado siete versiones importantes de Java: 1.0, 1.1, 1.2, 1.3, 1.4, 5.0 y 62 y ya anunci Java 7, la cual se encuentra en fase de pruebas, as como Java 8. Oracle anunci el 19 de noviembre de 2010 que el Java Development Kit (JDK) de la versin 7 estar disponible el 28 de julio de 2011. Ese mismo da tambin anunci que las especificaciones de Java 7 y Java 8 ini-ciaban el proceso de aprobacin por el Community Process Executive Committe. El 14 de enero de 2011 Oracle, a travs del blog de Mark Reinhold,3 arquitecto jefe de Java anunci que el JDK 7 Project ha sido terminado y el 3 de febrero anunci, en el mismo blog, que el borrador de JDK 7 est disponible para preguntas, comentarios y sugeren-cias. La versin 7 y, naturalmente, la ms lejana Java 8, entendemos que convivir duran-te los prximos aos con las versiones anteriores.En los ltimos aos, la interfaz de programacin de aplicaciones (API, application programming interface) creci desde 20 clases a ms de 3 000 (3 777 en Java 6) y proba-blemente superarn las 4 000 en la futura versin. Las API actuales generan desarrollos 1 Trmino empleado porque es mucho ms que un lenguaje de programacin. 2 La versin existente en el sitio web de Oracle en el momento de la revisin fi nal de este libro era Java Platform, Standard Edition (SE) versin 6 update 24 (JDK y JDR), misma que se puede descargar en: www.oracle.com/technetwork/java/javase/down-loads/index.html 3 El blog de Mark Reinhold se encuentra en la direccin: http://blogs.sun.com/mr/PRLOGO00_Joyanes Preliminares.indd XIX00_Joyanes Preliminares.indd XIX 12/5/11 12:50:0212/5/11 12:50:02
  • XX PRLOGOpara reas tan diversas como construccin de interfaces grficas de usuario, gestin y administracin de bases de datos, seguridad, procesamiento con XML, etctera. Por todas estas y muchas ms razones (que no alcanza a cubrir esta breve introduc-cin pero que iremos conociendo a lo largo del libro y en su pgina web asociada y que el lector apreciar a medida que avance su formacin, ya sea dirigida por sus maestros y profesores o de manera autodidacta si lo lee en solitario o en grupo de trabajo), Java se ha convertido en un lenguaje de programacin clave en la formacin tanto en univer-sidades como en institutos tecnolgicos o centros de formacin profesional. La versatili-dad de Java permite que los planes de estudio consideren su enseanza de muy diversas maneras, en asignaturas de iniciacin a la programacin de computadoras y a continua-cin, programacin orientada a objetos, o bien como continuacin de otras asignaturas como Fundamentos de programacin o Programacin I, en otros lenguajes, ya sean algortmi-cos con pseudocdigo o estructurados como Pascal o C, o complemento de otros lengua-jes orientados a objetos como C++.El libro se basa en las caractersticas fundamentales de Java Standard Edition (SE) 6, conocida popularmente como Java 6 y es compatible con las anteriores 5.0 y 2 porque as fue desarrollada por sus creadores; tambin servir para Java 7, al menos en lo relativo a las caractersticas, sintaxis y estructuras del lenguaje.Por qu hemos escrito este libro y a quin va dirigido?Bienvenido a Programacin en Java 6. Este libro se ha diseado para un primer curso de Programacin de Computadoras (Fundamentos o Metodologa de programacin y/o Progra-macin I) segn los diferentes nombres de los currculos de los pases iberoamericanos, incluyendo lgicamente Espaa, Portugal y Brasil, y su con tinuacin en Programacin II o Programacin orientada a objetos, como evolucin natural del estudiante en carreras de Ingeniera de Sistemas Computacionales (Sistemas), Ingeniera Informtica (los actuales grados de Ingeniera en Espaa), otras Ingenieras como Telecomunicaciones, Indus-triales, Electrnica, Geogrfica, Mecnica, etctera y tambin pensando en el tronco co-mn de Ciencias Matemticas, Fsicas (carrera de los autores), etctera. En el mbito sajn o en las instituciones que sigan el currculo de Computer Science de ACM, el libro sigue las directrices de CS1 y CS2. La programacin de computadoras sigue exigiendo en la segunda dcada del siglo xxi una formacin fuerte en algoritmos y en tcnicas bsicas de programacin, as como un curso de programacin orientada a objetos, junto al manejo de tcnicas especiales de ordenacin y bsqueda en listas, archivos y flujos, y otras propiedades importantes en el estudio algortmico como recursividad o recursin. Hoy da las materias anteriores de-ben complementarse con un conocimiento de interfaces grficos de usuario y los pri-meros pasos en programacin de aplicaciones para la web mediante los navegadores en internet antes citados.Java es el lenguaje de programacin moderno que permite el aprendizaje y la forma-cin de todas las tcnicas mencionadas; razn fundamental por la que decidimos escribir este libro.Aprovechamos la experiencia adquirida en nuestra primera obra de Java, Programa-cin en Java 2, as como la de nuestra obra avanzada Estructura de datos en Java, adems de otras obras nuestras utilizadas en la comunidad universitaria universidades, insti-tutos tecnolgicos y escuelas de ingeniera tales como Fundamentos de programacin, Programacin en C y Programacin en C++. Con la realimentacin, consejos y propuestas que nos proporcionaron los alumnos, lectores y autodidactas, y sobre todo maestros y profesores, hemos escrito este libro tratando de llegar al mayor nmero posible de per-sonas en el mbito iberoamericano.00_Joyanes Preliminares.indd XX00_Joyanes Preliminares.indd XX 12/5/11 12:50:0212/5/11 12:50:02
  • Prlogo XXIHoy en da, los estudiantes universitarios de primeros cursos navegan por internet y utilizan sus computadoras para disear sus proyectos de clase; muchas otras personas navegan en internet para buscar informacin y comunicarse con otros individuos. Todas es-tas actividades son posibles porque existen programas de computadora o software, de-sarrollados por personas que utilizan los lenguajes de programacin (programadores).Java es el lenguaje de programacin que, en la actualidad y en el futuro, permite realizar todas estas tareas; fue creado para facilitar tareas generales y especficas de pro-gramacin y desarrollo profesional y es actualizado de forma continua.Nuestro objetivo principal es ensearle cmo debe escribir programas en el lengua-je de programacin Java, pero antes de que usted comience su aprendizaje, conside-ramos muy importante que comprenda la terminologa de programacin y por ello, pensando sobre todo en los estudiantes que se inician en ella, hemos escrito los captulos 1 y 2 a modo de breve curso de introduccin a Fundamentos de programacin4 o a Programacin I.Cmo usar este libro?El principal enfoque de esta obra es su destino final, aprendizaje de la programacin y, en particular, la programacin en Java. Pretendemos, apoyndonos en nuestra larga ex-periencia, ofrecer un servicio a los estudiantes que se inician en la programacin de computadoras como primera herramienta o aquellos que procedan de asignaturas basa-das en algoritmos y programacin estructurada y que han utilizado en su aprendizaje de pseudocdigo o lenguajes de programacin clsicos tales como Pascal, C, e incluso Fortran porque todava algunas escuelas de ciencias e ingeniera siguen utilizndolo como herramienta de aprendizaje debido a su larga tradicin; de hecho los autores de este libro aprendieron a programar con dicho lenguaje en la carrera de Ciencias Fsicas y por ello podemos dar fe de su uso. Tambin va dirigido a aquellos alumnos que desean introducirse a la programacin orientada a objetos posteriormente en la organizacin del libro mostraremos nuestra propuesta de curso de orientacin a objetos o que mi-gran del lenguaje C++, o quieren introducirse en Java directamente por sus caractersti-cas especiales.Java es un lenguaje muy potente; adems de las caractersticas tradicionales de todo lenguaje, generalmente orientado a objetos, dispone de herramientas para proporcionar soporte para crear programas que utilicen una interfaz grfica de usuario (IGU o GUI, graphical user interface). Por estas circunstancias el libro se puede utilizar de tres formas diferentes, cuya eleccin debe hacer el lector o, en el caso de enseanza reglada, por el maestro o profesor y que proponemos a continuacin:Enfoque integrado. Recomendado para los alumnos que se inician en asignaturas como Programacin I, Fundamentos de programacin, etctera o en modo autodi-dacta; los captulos se deben estudiar secuencialmente. Enfoque de programacin orientada a objetos. Dirigida a los alumnos que deseen una formacin bsica de programacin y, a continuacin, seguir la asignatura de Pro-gramacin orientada a objetos; los captulos 1 a 6 se estudiarn en orden secuencial o segn la conveniencia del lector, y a partir de su conocimiento, los captulos 7 a 9 y 12 a 17, dejando los captulos 10 y 11 para su estudio en el momento que considere el lector; posteriormente estudiar los captulos 18 al 22. 4 Si desea profundizar en este tema con la ayuda de un lenguaje algortmico, como el pseudocdigo, le sugerimos consultar la bibliografa recomendada en la pgina web del libro o nuestra obra Fundamentos de programacin, 4a. edicin, o el Portal Tec-nolgico y de Conocimiento de McGraw-Hill (www.mhe.es/joyanes) que consideramos tiles.00_Joyanes Preliminares.indd XXI00_Joyanes Preliminares.indd XXI 12/5/11 12:50:0212/5/11 12:50:02
  • XXII PRLOGOEnfoque de interfaz grfica de usuario. En este caso se recomienda comenzar con los captulos bsicos 1 a 6 en secuencia, estudiar los captulos 10 y 11, y a continua-cin pasar a los captulos 20 al 22; lo cual implica omitir los captulos de objetos: 7 a 9, para estudiarlos a su conveniencia, y, posteriormente, 12 a 17; los captulos 18 y 19 los podr estudiar en cualquier momento a partir del captulo 11.Todo el cdigo fuente, explicaciones, ejemplos y ejercicios, fueron escritos, compila-dos y ejecutados para asegurar la calidad con Java 6 y, en muchos casos, hemos probado la versin 7.0, disponible en el sitio oficial de Oracle y que recomendamos y utilizamos a lo largo del libro, lo puede consultar en el Apndice F.Pgina web del libro (OLC)En la pgina web oficial del libro (www.mhhe.com/uni/joyanespj6e) el lector po-dr encontrar la siguiente documentacin:Apndices especficos de la web que complementan los de la edicin impresa. Talleres prcticos complementarios con temas terico-prcticos para ampliar y pro- fundizar determinados captulos del libro.Cdigo fuente de los programas ms notables del libro, junto con los correspondien- tes a los ejemplos y ejercicios desarrollados y explicados en el libro.Bibliografa y sitios web recomendados con enlaces destacados, sitios de fabricantes, revistas y peridicos online. Enlaces web recomendados por Oracle/Sun. Enlace con el Portal Tecnolgico y de Conocimiento ( www.mhe.es/joyanes).Documentacin actualizada de la plataforma Java. Tutoriales y cursos de programacin en Java y otra documentacin complementaria en formato de PowerPoint. Documentacin complementaria de todo tipo para programadores y desarrolladores. Organizacin del libroJava rene las caractersticas de un lenguaje de programacin tradicional con enfoque orientado a objetos, dispone de una extensin y una enorme biblioteca de clases que au-menta con cada versin (ver captulo 1, tabla 1.4) y con entornos de desarrollo tra-dicionales, sin uso de interfaces grficas de usuario y de programacin en la web y carac-tersticas de un lenguaje de programacin moderno con una interfaz grfica de usuario y posibilidad de escribir programas especficos web (applets) que pueden correr en nave-gadores, como Firefox de Mozilla, Explorer de Microsoft, Chrome de Google, Safari de Apple, etctera, y que seguramente, usted utiliza a diario en su institucin, hogar, o en su telfo-no celular. Intentamos conjugar ambas caractersticas de Java y aunque anteriormente dimos consejos prcticos para utilizar este libro, ahora comentamos a detalle cmo orga-nizamos el libro y su contenido.El captulo 1 introduce al lector en la historia de las computadoras, la web y los len-guajes de programacin; el lector puede saltar total o parcialmente el captulo si est familiarizado con estos conceptos. Sin embargo, sugerimos que lea los apartados dedi-cados a la web y cloud computing (computacin en la nube), la plataforma de internet que facilitar el uso del software como un servicio, as como del hardware y otros compo-nentes de computacin. En este captulo tambin describimos las caractersticas princi-pales de Java y de la mquina virtual Java, la potente herramienta que desarrollaron los creadores del lenguaje para hacer a Java independiente de la plataforma sobre la que trabaje el programador.00_Joyanes Preliminares.indd XXII00_Joyanes Preliminares.indd XXII 12/5/11 12:50:0212/5/11 12:50:02
  • Prlogo XXIIIEl captulo 2 se pens para lectores sin formacin previa en programacin; describe el procedimiento de resolucin de problemas con computadoras y el proceso de ejecucin de un programa Java; tambin explica las metodologas de programacin tpicas y tradi-cionales basadas en clases (orientacin a objetos), as como los entornos ms popula res de desarrollo integrados de Java. Tambin se presentan las tcnicas tradicionales de pro-gramacin estructurada junto con las tcnicas de programacin orientada a objetos. En el captulo 3 se describen los elementos bsicos de Java con nfasis en las platafor-mas Java SE 5.0 y Java 6, anunciando la futura Java SE 7 que posiblemente estar disponi-ble a partir del ao 2011. Explica con detenimiento la estructura general de un programa en Java, as como los elementos que la componen.Estos tres primeros captulos conforman un breve curso de introduccin a la progra-macin y su comprensin permitir iniciarse a pleno rendimiento en la programacin en Java. En esta primera parte se mezclan los importantes conceptos de algoritmos, pro-gramas, entornos de desarrollo y la construccin de los primeros programas en Java junto con las metodologas de programacin tradicionales y orientadas a objetos. El captulo 4 describe todos los operadores y expresiones que las computadoras ne-cesitan para realizar cualquier tipo de clculo aritmtico, lgico y de manipulacin de bits, junto con los operadores necesarios para toma de decisiones, conversin de tipos de datos as como la prioridad y asociatividad que deben cumplir los operadores en la escritura y ejecucin de expresiones.Los captulos 5 y 6 tratan sobre las estructuras de control que permiten alterar el flujo de control secuencial de las instrucciones de un programa y que se dividen en dos grandes grupos: a) secuenciales y b) repetitivas o iterativas. El captulo 7 se dedica a analizar los fundamentos tericos de la programacin orien-tada a objetos (POO); describe sus principios fundamentales junto con los conceptos de clases y objetos, elementos clave de este tipo de programacin; tambin hace una intro-duccin a UML, el lenguaje de modelado unificado por excelencia, empleado en la mayora de los proyectos de desarrollo profesional a los que el programador se enfrenta-r en su vida laboral.Los captulos 8 y 9 se centran en el anlisis y diseo de clases y objetos as como en los mtodos que forman parte de ellos; introduce la declaracin de tales elementos y su implementacin. Explica los conceptos importantes de paquetes y de biblioteca de clases, caractersticas sobresalientes y diferenciadoras de Java; analiza los mtodos y las clases predefinidas junto con los mtodos y clases definidos por el usuario.El captulo 10 cubre las primeras estructuras de datos que estudiar el lector: arreglos o arrays, listas y tablas, desde un punto de vista prctico; el captulo ampla y presta aten-cin especial a lo explicado en el captulo 6 respecto al bucle for each que fue introdu-cido por primera vez en Java 5.0 y que permite hacer recorridos en arreglos. El captulo examina los diferentes tipos de arreglos y la clase Vector y ArrayList que facilitan la manipulacin de datos y algoritmos de bsqueda en listas.El captulo 11 se centra en el estudio de las cadenas (strings) o secuencias de caracte-res tan necesarias en la manipulacin de datos de texto; estudia la clase String para manipular todo tipo de operaciones con cadenas. El captulo 12 es la prolongacin de los captulos 8 y 9, profundizando en los concep-tos de clases y objetos e introduciendo los nuevos conceptos de interfaces y clases abstrac-tas. Junto con los captulos 7, 8 y 9 constituye los fundamentos bsicos de la programacin orientada a objetos que se completa con los captulos 13 a 17 y conforman el curso de introduccin a la programacin orientada a objetos.El captulo 13 describe la herencia, una de las propiedades fundamentales de la orien-tacin a objetos y principio clave en este tipo de diseo, la cual facilita la reutilizacin de clases; el captulo tambin analiza cmo se derivan clases a partir de otras ya existentes y 00_Joyanes Preliminares.indd XXIII00_Joyanes Preliminares.indd XXIII 12/5/11 12:50:0312/5/11 12:50:03
  • XXIV PRLOGOestudia el concepto de herencia simple y herencia mltiple (aunque sta, por los proble-mas de diseo que suele plantear, con muy buen criterio fue omitida por los creadores de Java, al contrario de lo que sucede en C++, que s la implementa). El captulo 14 estudia los conceptos de polimorfismo y de ligadura junto con sus ventajas, inconvenientes y mtodos para su implementacin.El captulo 15 se dedica a estudiar la genericidad, una de las caractersticas destacadas de la orientacin a objetos, la cual permite el diseo y construccin de tipos de datos ge-nricos o plantillas (templates). Describe el diseo y creacin de clases genricas y los mtodos genricos y su aplicacin en las mquinas virtuales Java. El captulo 16 se dedica al tratamiento de errores mediante la aparicin y ejecucin de excepciones; analiza las condiciones de error en los programas y los mtodos de ma-nipulacin de excepciones en Java. Tambin describe las clases de excepciones definidas en Java y sistemas de especificacin de excepciones.El captulo 17 se centra en el estudio y manipulacin de flujos y archivos de datos; trata los diferentes tipos de archivos y presenta mtodos y procedimientos para su diseo correcto junto con los archivos de objetos predefinidos.El captulo 18 se dedica a analizar tcnicas avanzadas de ordenacin y bsqueda de informacin en listas y archivos; estudia los mtodos clsicos y ms eficientes de ordena-cin y bsqueda.La recursividad es una propiedad muy importante en el diseo de algoritmos y tiene numerosas aplicaciones en el campo matemtico, fsico, etctera; el captulo 19 describe dicho concepto junto con los mtodos ms reconocidos para decidir cundo utilizarla y cundo usar la repeticin o iteracin. Analiza problemas tradicionales de la vida diaria que se resuelven mediante mtodos recursivos, tales como las torres de Hanoi, la bsque-da binaria o la ordenacin de archivos mediante un mtodo conocido como mergesort (fusin de archivos). Los captulos 20 y 21 estudian con detenimiento el tratamiento de grficos mediante las API y la herramienta swing de AWT; proporciona criterios y mtodos de diseo y construccin de ventanas, etiquetas, botones, etctera. Un concepto importante que ofrece Java es el de evento as como su gestin; el captulo 21 lo estudia; tambin describe la jerarqua de eventos y los componentes grficos como fuentes de eventos.El captulo 22 se dedica al importante concepto de applet, la aplicacin Java para ma-nejar programas en la web y que puedan ejecutarse en navegadores; explica el concepto y cmo crear de modo prctico un ap