Transcript of Programación en-java-6-luis-joyanes-aguilar-freelibros.org
- 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