como programar java 9ed, ocr completo cap 1-19 (merged)

1

Upload: debate-utpl

Post on 13-Nov-2014

4.088 views

Category:

Automotive


2 download

DESCRIPTION

Soporta búsqueda de texto , Libro de buena calidad y lo más completo posible , también consta de información organizada por capítulos en las pestañas de búsquedas

TRANSCRIPT

  • 1. CO M O PROGRAMAROCR CAPTULOS 1-19PAUL D EITEL H A R V EY D EITEL ALWAYSLEARNINGwww.FreeLibros.mePEARSON

2. ACCESO A LOS CAPTULOS ADICIONALES DEL LIBRO Para acceder a los captulos 12 a 19 (en espaol), 20 a 31 y Apndices M a Q (en ingls) mencionados en el texto, visite el sitio Web de este libro:www.pearsonenespafiol.coin/deitel Utilice una moneda para descubrir el cdigo de acceso. (No use objetos filosos porque podra daarlo).IMPORTANTE: Este cdigo de acceso tiene vigencia de 2 das!Asegrese que el cdigo no aparezca daado ya que slo puede usarse una vez y no ser reemplazado en ningn caso. www.FreeLibros.me 3. www.FreeLibros.me 4. www.FreeLibros.me 5. P R O G Is g M A R NOVENA E D I C l d ^Paul DetelDeitel & Associates, Inc. Harvey DetelDeitel & Associates, Inc. TraductorAlfonso Vidal Romero Elizondo Ingeniero en Sistemas Electrnicos ITESM, Campus Monterrey Revisin tcnicaRoberto Martnez Romn Departamento de Tecnologa de Informacin y Computacin ITESM, Campus Estado de Mxico Domingo Acosta Infante Departamento de Ingeniera en Informtica Instituto Tecnolgico de MoreliaPEARSON www.FreeLibros.me 6. DEITEL, PAUL y HARVEY DEITEL Cmo programar en Java Novena edicin PEARSON EDUCACIN, Mxico, 2012 ISBN: 978-607-32-1150-5 rea: Computacin Formato: 20 X 25.5 cm Pginas: 616Authorized translation from the English language edition entitled JAVA HOW TO PROGRAM, 9thEdition, by Paul Deitel & Harvey Deitel, published by Pearson Education, Inc., publishing as Prentice Hall, Copyright 2012. All rights reserved. ISBN 9780132575669 Traduccin autorizada de la edicin en idioma ingls titulada JAVA HOW TO PROGRAM, 9a. edicin por Paul Deitel y Harvey Deitel, publicada por Pearson Education, Inc., publicada como Prentice Hall, Copyright 2012. Todos los derechos reservados. Esta edicin en espaol es la nica autorizada.Edidn en espaolDireccin Educacin Superior: Mario Contreras Editor Sponsor: Luis Miguel Cruz Castillo e-mail: [email protected] Bernardino Gutirrez Hernndez Editor de Desarrollo: Supervisor de Producdn: Jos D. Hernndez Garduo Gerente Editorial Educacin Superior Latinoamrica: Marisa de Anta NOVENA EDICIN, 2012 D.R. 2012 por Pearson Educacin de Mxico, S.A. de C.V. Atlacomulco 500-5o. piso Col. Industrial Atoto 53519, Naucalpan de Jurez, Estado de Mxico Cmara Nacional de la Industria Editorial Mexicana. Reg. nm. 1031. Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema de recuperacin de informacin, en ninguna forma ni por ningn medio, sea electrnico, mecnico, fotoqumico, magntico o electroptico, por fotocopia, grabacin o cualquier otro, sin permiso previo por escrito del editor. El prstamo, alquiler o cualquier otra forma de cesin de uso de este ejemplar requerir tambin la autorizacin del editor 0 de sus representantes. ISBN VERSIN IMPRESA: 978-607-32-1150-5 ISBN VERSIN E-BOOK: 978-607-32-1151-2 ISBN E-CHAPTER: 978-607-32-1152-9 Impreso en Mxico. Printed in Mxico. 1 2 3 4 5 6 7 8 9 0 - 15 14 13 12PEARSON www.FreeLibros.me 7. En memoria desargento Shriver, 'Elprimer director del Cuerpo de Taz y fundador de numerosas organizaciones sociales: Tor una vida de marcar a diferencia. Paul y Harvey D eitelwww.FreeLibros.me 8. www.FreeLibros.me 9. Contenido xxiiiPrefacioxxxiiiAntes de empezar 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14Introduccin a las computadoras y a Java Introduccin Computadoras: hardware y software Jerarqua de datos Organizacin de una computadora Lenguajes mquina, lenguajes ensambladores y lenguajes de alto nivel Introduccin a la tecnologa de los objetos Sistemas operativos Lenguajes de programacin Java y un tpico entorno de desarrollo en Java Prueba de una aplicacin en Java Web 2.0: Las redes sociales Tecnologas de software Cmo estar al da con las tecnologas de informacin Conclusin2Introduccin a las aplicaciones en Java Introduccin Su primer programa en Java: imprimir una lnea de texto Modificacin de nuestro primer programa en Java Cmo mostrar texto con pri n tf Otra aplicacin en Java: suma de enteros Conceptos acerca de la memoria Aritmtica Toma de decisiones: operadores de igualdad y relacinales Conclusin2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.93 Introduccin a las clases, objetos, mtodos y cadenas3.1 3.2 3-3 3.4 3.5 3.6Introduccin Declaracin de una clase con un mtodo e instanciamiento de un objeto de una clase Declaracin de un mtodo con un parmetro Variables de instancia, mtodos establecery mtodos obtener Comparacin entre tipos primitivos y tipos por referencia Inicializacin de objetos mediante constructores www.FreeLibros.me12 56 810 1113 16 18 22 26 29 31 3237 38 38 44 46 47 52 53 56 6071 72 72 76 79 84 85 10. Contenido883.7 3.8 3.9Los nmeros de punto flotante y el tipo doubl e (Opcional) Caso de estudio de GUI y grficos: uso de cuadros de dilogo Conclusin44.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15Instrucciones de control: Parte I Introduccin Algoritmos Seudocdigo Estructuras de control Instruccin i f de seleccin simple Instruccin i f . .. el se de seleccin doble Instruccin de repeticin whi 1e Cmo formular algoritmos: repeticin controlada por un contador Cmo formular algoritmos: repeticin controlada por un centinela Cmo formular algoritmos: instrucciones de control anidadas Operadores de asignacin compuestos Operadores de incremento y decremento Tipos primitivos (Opcional) Caso de estudio de GUI y grficos: creacin de dibujos simples Conclusin5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11Instrucciones de control: Parte 2 Introduccin Fundamentos de la repeticin controlada por contador Instruccin de repeticin for Ejemplos sobre el uso de la instruccin for Instruccin de repeticin do. .. whi 1e Instruccin de seleccin mltiple swi tch Instrucciones break y continu Operadores lgicos Resumen sobre programacin estructurada (Opcional) Caso de estudio de GUI y grficos: dibujo de rectngulos y valos Conclusin151 152 152 1546 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9Mtodos: un anlisis ms detallado Introduccin Mdulos de programas en Java Mtodos s t a t i c, campos s t a t i c y la clase Math Declaracin de mtodos con mltiples parmetros Notas acerca de cmo declarar y utilizar los mtodos La pila de llamadas a los mtodos y los registros de activacin Promocin y conversin de argumentos Paquetes de la API de Java Caso de estudio: generacin de nmeros aleatorios 6.9.1 Escalamiento y desplazamiento generalizados de nmeros aleatorios 6.9.2 Repetitividad de nmeros aleatorios para prueba y depuracin Caso de estudio: un juego de probabilidad (introduccin a las enumeraciones) Alcance de las declaraciones Sobrecarga de mtodos (Opcional) Caso de estudio de GUI y grficos: colores y figuras rellenas Conclusin197 198 1986.10 6.11 6.12 6.13 6.14www.FreeLibros.me92 95102103 103 104 104 107 107 112 113 118 125 130 130 134 134138158 162 164 172 173 179 184 187200202205 206 207 208 210 214 214 215 219 222 224 227 11. Contenido77.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7 .1 07.11 7.12 7.13 7.14 7.15 7.16Arreglos y objetos ArrayList Introduccin Arreglos Declaracin y creacin de arreglos Ejemplos acerca del uso de los arreglos Caso de estudio: simulacin para barajar y repartir cartas Instruccin for mejorada Paso de arreglos a los mtodos Caso de estudio: la clase L i broC al i f i c a c i ones que usa un arreglo para almacenar las calificaciones Arreglos multidimensionales Caso de estudio: la clase L ib ro C a l i f i c a c i o n e s que usa un arreglo bidimensional Listas de argumentos de longitud variable Uso de argumentos de lnea de comandos La clase Arrays Introduccin a las colecciones y la clase A rra y L i st (Opcional) Caso de estudio de GUI y grficos: dibujo de arcos Conclusinix240 241 242 243 244 254 258 259 262 268271 278 279 281 284 286 289Clases y objetos: un anlisis ms detallado Introduccin Caso de estudio de la clase Ti empo Control del acceso a los miembros Referencias a los miembros del objeto actual mediante th is Caso de estudio de la clase Ti empo: constructores sobrecargados Constructores predeterminados y sin argumentos Observaciones acerca de los mtodos Establecer y Obtener Composicin Enumeraciones Recoleccin de basura y el mtodo f i nal i ze Miembros de clase s t a t i c Declaracin s ta tic import Variables de instancia f i nal 8 .1 4 Caso de estudio de la clase T i empo: creacin de paquetes 8.15 Acceso a paquetes 8.16 (Opcional) Caso de estudio de GUI y grficos: uso de objetos con grficos 8.17 Conclusin311 312 312 316 317 320 326 326 328 331 333 334 338 339 340 345 347 3519359 360 361 363 364 364 3708 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8. 11 8.12 8.139.1 9.2 9.3 9.4Programacin orientada a objetos: herencia Introduccin Superclases y subclases Miembros protected Relacin entre las superclases y las subclases 9.4.1 Creacin y uso de una clase Empl eadoPorComi s i on 9.4.2 Creacin y uso de una clase Empl eadoBaseMasComi s i on 9.4.3 Creacin de una jerarqua de herencia Empl eadoPorComi s i on9.4.4 9.4.5Empl eadoBaseMasComi sio nLa jerarqua de herencia Empl eadoPorComi s i on-Empl eadoBaseMasComi sion mediante el uso de variables de instancia p rotected La jerarqua de herencia Empl eadoPorComi s i on-Empl eadoBaseMasComi sion mediante el uso de variables de instancia p r i va te www.FreeLibros.me375 377 380 12. xContenido9.5 9.6Los constructores en las subclases Ingeniera de software mediante la herencia9 .7L a clase Obj e c t10 10.1 10.2 10.3 10.4 10.5Programacin orientada a objetos: polimorfismo Introduccin Ejemplos del polimorfismo Demostracin del comportamiento polimrfico Clases y mtodos abstractos Caso de estudio: sistema de nmina utilizando polimorfismo 10.5.1 La superclase abstracta Empl eado 10.5.2 La subclase concreta Empl eadoAsal ari ado 10.5.3 La subclase concreta Empl eadoPorHoras 10.5.4 La subclase concreta Empl eadoPo rComi s i on 10.5.5 La subclase concreta indirecta Empl eadoBaseMasComi sion 10.5.6 El procesamiento polimrfico, el operador i nstanceof y la conversin descendente 10.5.7 Resumen de las asignaciones permitidas entre variables de la superclase y de la subclase Mtodos y clases f i na l Caso de estudio: creacin y uso de interfaces 10.7.1 Desarrollo de una jerarqua PorPagar 10.7.2 La interfaz PorPagar 10.7.3 La clase Factu ra 10.7.4 Modificacin de la clase Empl eado para implementar la interfaz PorPagar 10.7.5 Modificacin de laclase Empl eadoAsal a r i ado para usarla en la jerarqua PorPagar 10.7.6 Uso de la nterfaz PorPagar para procesar objetos F a ctu ra y Empleado mediante el polimorfismo 10.7.7 Interfaces comunes de la API de Java (Opcional) Caso de estudio de GUI y grficos: realizar dibujos usando polimorfismo Conclusin9.8 9.910.6 10.710.8 10.9(Opcional) Caso de estudio de GUI y grfi eos: mostar texto e imgenes usando etiquetas ConclusinI I 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 11.12 11.13Manejo de excepciones: un anlisis ms profundo Introduccin Ejemplo: divisin entre cero sin manejo de excepciones Ejemplo: manejo de excepciones tipo A ritm e tic E x c e p tio n elnputM ism atchException Cundo utilizar el manejo de excepciones Jerarqua de excepciones en Java Bloque fin a lly Limpieza de la pila y obtencin de informacin de un objeto excepcin Excepciones encadenadas Declaracin de nuevos tipos de excepciones Precondiciones y poscondiciones Aserciones (Nuevo en Java SE 7): Clusula catch mltiple: atrapar varias excepciones en un catch (Nuevo en Java SE 7): Clusula t ry con recursos (t ry-with-reso urces): desasignacin automtica de recursos 11.14 Conclusin www.FreeLibros.me385 386 387 388 391 394 395 397 398 400 403 404 407 408 410 412 413 418 418 419 421 422 422 425 427 428 430 431 433 438 439 439 442 447 447 450 454 457 459 460 461 462 463 463 13. ContenidoxiATabla de precedencia de operadoresA -lBConjunto de caracteres ASCIIA-3CPalabras clave y palabras reservadasA-4DA-5Tipos primitivosEUso de la documentacin de la API de Java E. 1 Introduccin E.2 Navegacin por la API de JavaA-6 A-6 A-6FUso del depurador Introduccin Los puntos de interrupcin y los comandos run, stop, cont y p ri nt Los comandos p ri nt y s et Cmo controlar la ejecucin mediante los comandos step, step up y next El comando watch El comando cl ea r ConclusinA-14 A-15 A-15 A-19 A-21 A-24 A-27 A-29GSalida con formato Introduccin Flujos Aplicacin de formato a la salida con pri ntf Impresin de enteros Impresin de nmeros de punto flotante Impresin de cadenas y caracteres Impresin de fechas y horas Otros caracteres de conversin Impresin con anchuras de campo y precisiones Uso de banderas en la cadena de formato de p ri nt f Impresin con ndices como argumentos Impresin de literales y secuencias de escape Aplicacin de formato a la salida con la clase Formatte r ConclusinA-31 A-32 A-32 A-32 A-33 A-34 A-36 A-3 7 A-39 A-41 A-43 A-47 A-47 A-48 A-49HSistemas numricos Introduccin Abreviatura de los nmeros binarios como nmeros octales y hexadecimales Conversin de nmeros octales y hexadecimales a binarios Conversin de un nmero binario, octal o hexadecimal a decimal Conversin de un nmero decimal a binario, octal o hexadecimal Nmeros binarios negativos: notacin de complemento a dosA-54 A-55 A-58 A-59 A-59 A-60 A-62E1 E2 F.3 E4 F.5 F.6 F.7 G.l G.2 G.3 G.4 G.5 G.6 G.7 G.8 G.9 G. 10 G. 11 G.12 G. 13 G .l4 H .l H.2 H.3 H.4 H.5 H.6www.FreeLibros.me 14. x iiI 1.1ContenidoGroupLayout Introduccin Fundamentos de GroupLayout Creacin de un objeto SelectorColores Recursos Web sobre GroupLayoutA-67 A-67 A-67 A-68 A-78JJ.l J.2 J.3 J.4Componentes de integracin Java Desktop Introduccin Pantallas de inicio La clase Desktop Iconos de la bandejaA-79 A-79 A-79 A-81 A-83K K.l K.2 K.3 K.4 K.5 K.6Mashups Introduccin Mashups populares Algunas API de uso comn en mashups Centro de recursos Deitel sobre mashups Centro de recursos Deitel sobre RSS Cuestiones de rendimiento y confiabilidad de los mashupsA-85 A-85 A-85 A-86 A-86 A-87 A-87LUnicode Introduccin Formatos de transformacin de Unicode Caracteres y glifos Ventajas/Desventajasde Unicode Uso de Unicode Rangos de caracteresA-88 A-88 A-89 A-90 A-90 A-91 A-931.21.31.4L.l L2 L.3 L.4 L5 L.6ndiceI-lLos captulos 12a 19 se encuentran en espaol en el sitio W eb del libro12 Caso de estudio del ATM , Parte I : Diseo orientado a objetos con UML 12.1 Introduccin al caso de estudio 12.2 Anlisis del documento de requerimientos 12.3 Cmo identificar las clases en un documento de requerimientos 12.4 Cmo identificar los atributos de las clases 12.5 Cmo identificar los estados y actividades de los objetos 12.6 Cmo identificar las operaciones de las clases 12.7 Cmo indicar la colaboracin entre objetos 12.8 Conclusinwww.FreeLibros.me469 470 470 478 484 489 493 499 506 15. Contenido13 Caso de estudio del ATM , Parte 2: Implementacii de un diseo orientado a objetos 13.1 Introduccin 13.2 Inicio de la programacin de las clases del sistema ATM 13.3 Incorporacin de la herencia y el polimorfismo en el sistema ATM 13.4 Implementacin del caso de estudio del ATM 13.4.1 La clase ATM 13.4.2 Laclase P a n t a lla 13.4.3 La clase Teclado 13 .4.4 La clase Di sp e n sa d o rE f e c t i vo 13.4.5 Laclase RanuraDeposito 13 .4.6 Laclase Cuenta 13.4.7 La clase BaseDatos Banco 13.4.8 La clase T ra n s a c c i n 13.4.9 Laclase Sol i c itu d Sal do 1 3 .4.10 La clase R e ti ro 13.4.11 La clase Depos i to 13.4.12 Laclase CasoEstud i oATM 13-5 Conclusin 14 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8Componentes de la GUI: Parte I Introduccin Nueva apariencia visual Nimbus de Java Entrada/salida simple basada en GUI con JOpti onPane Generalidades de los componentes de Swing Mostrar texto e imgenes en una ventana Campos de texto y una introduccin al manejo de eventos con clases anidadas Tipos de eventos comunes de la GUI e interfaces de escucha Cmo funciona el manejo de eventos14.9JB u tto n14.10 Botones que mantienen el estado 14 .10 .1JCheckBox1 4 .1 0 .2JR a d io B u tto n14.11 J ComboBox: uso de una clase interna annim a para el manejo de eventos 14.12 J L i s t14.13 Listas de seleccin mltiple 14.14 Manejo de eventos de ratn 14.15 Clases adaptadoras 14.16 Subclase de JP a n e l para dibujar con el ratn 14.17 Manejo de eventos de teclas 14.18 Introduccin a los administradores de esquemas 14 .18 .1F lo w Layo u t1 4 .1 8 .2 B o rd e rLa y o u t 1 4 .1 8 .3 G rid L a y o u t14.19 Uso de paneles para administrar esquemas ms complejos 14.20 JT e x tA re a14.21 Conclusinwww.FreeLibros.mex 510 511 511 516 522 523 528 529 530 531 532 534 537 538 539 543 546 546 549 550 551 552 555 557 561567 569 571 574 574 577580 584586589 594 597 601 604 605 608 611 613 615 618 16. xivContenido15 Grficos y Java 2D63116 Cadenas, caracteres y expresiones regulares672 673 673 674 674 675 676 681 683 684 68415.1 15.2 15-3 15.4 15.5 15.6 15.7 15.8 15.9Introduccin Contextos y objetos de grficos Control de colores Manipulacin de tipos de letra Dibujo de lneas, rectngulos y valos Dibujo de arcos Dibujo de polgonos y polilneas La API Java 2D Conclusin16.1 Introduccin 16.2 Fundamentos de los caracteres y las cadenas 16.3 La clase String 16.3.1 Constructores de St ri ng 16.3.2 Mtodos 1 ength, charA t y getChars de S trin g 16.3.3 Comparacin entre cadenas 16.3.4 Localizacin de caracteres y subcadenas en las cadenas 16.3.5 Extraccin de subcadenas de las cadenas 16.3.6 Concatenacin de cadenas 16.3.7 Mtodos varios de S tri ng 16.3.8 Mtodo valueOf de Stri ng 16.4 La clase S tri ngBui lder 16.4.1 Constructores de S tri ngBui ld er 16.4.2 Mtodos 1 ength, c a p a c ity , se tLe n g th y ensureCapaci t y de S t r i ngBui ld e r 16.4.3 Mtodos charA t, setC harA t, getChars y re ve rse de S t r i ngBui ld e r 16.4.4 Mtodos append de S tri ngBui lder 16.4.5 Mtodos de insercin y eliminacin de Stri ngBui lder 16.5 La clase C h a ra cte r 16.6 Divisin de objetos S tri ng en tokens 16.7 Expresiones regulares, la clase P a tte rn y la clase Matcher 16.8 Conclusin 1 7 A rchivos, flujos y sealizacin de objetos17.1 17.2 17.3 17.4Introduccin Archivos y flujos La clase F ile Archivos de texto de acceso secuencial 17.4.1 Creacin de un archivo de texto de acceso secuencial 17.4.2 Cmo leer datos de un archivo de texto de acceso secuencial 17.4.3 Caso de estudio: un programa de solicitud de crdito 17.4.4 Actualizacin de archivos de acceso secuencial 17.5 Sealizacin de objetos 17.5.1 Creacin de un archivo de acceso secuencial mediante el uso de la sealizacin de objetos 17.5.2 Lectura y deserializacin de datos de un archivo de acceso secuencial 17.6 Clases adicionales de java, i o 17.6.1 Interfaces y clases para entrada y salida basada en bytes 17.6.2 Interfaces y clases para entrada y salida basada en caracteres www.FreeLibros.me632 634 635 642 647 651 654 657 664686 687688 688690 691 693 694 699 700 708719 720 720 722 726 726 733 736 741 742 743 749 751 751 753 17. Contenido17.7 Abrir archivos con JFileChooser 17.8 Conclusin 18 18.1 18.2 18.3 18.4 18.5 18.6 18.7 18.8 18.9 18.10Recursividad Introduccin Conceptos de recursividad Ejemplo de uso de recursividad: factoriales Ejemplo de uso de recursividad: serie de Fibonacci La recursividad y la pila de llamadas a mtodos Comparacin entre recursividad e iteracin Las torres de Hanoi Fractales Vuelta atrs recursiva (backtracking) Conclusin19 Bsqueda, ordenamiento y Big O 19.1 Introduccin 19.2 Algoritmos de bsqueda 19.2.1 Bsqueda lineal 19.2.2 Bsqueda binaria 19.3 Algoritmos de ordenamiento 19.3.1 Ordenamiento por seleccin 19.3.2 Ordenamiento por insercin 19.3.3 Ordenamiento por combinacin 19.4 Conclusinxv754 757 765 766 767 768 771 774 776 777 779 790 790 798 799 800 800 804 809 810 814 817 824Los captulos 20 a 3 1 se encuentran en ingls en el sitio W eb del libro20 Generic Collections20.1 20.2 20.3 20.4 20.5 20.6Introduction Collections Overview Type-Wrapper Classes for Primitive Types Autoboxing and Auto-Unboxing Interface Col 1 e c t i on and Class C o ll e c tio n s Lists 2 0 .6 .1A r r a y L is t and I t e r a t o r2 0 .6 .2L in k e d L is t20.7 Collections Methods 2 0 .7.1 Method s o r t 20.7.2 Method s h u f f ie 20.7.3 Methods r e v e rs e , f i 11, copy, max and mi n 20.7.4 Method binarySearch 20.7.5 MethodsaddAll, fre q u e n c y and d i s j o i n t 20.8 Stack Class of Package java, til 20.9 Class PriorityQueueand Interface Que ue 20.10 Sets 20.11 Maps www.FreeLibros.me829 830 830 831 832 832 833 834836 841 842 845 847 849 851 853 855856 859 18. xv20.12 20.13 20.14 20.15 20.16ContenidoP roperties Class Synchronized Collections Unmodifiable Collections Abstract Implementations Wrap-Up863866 866 867 8672 1 Generic Classes and Methods21.1 21.2 21.3 21.421.5 21.6 21.7 21.8 21.9 21.10Introduction Motivation for Generic Methods Generic Methods: Implementation and Compile-Time Translation Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type Overloading Generic Methods Generic Classes Raw Types Wildcards in Methods That AcceptType Parameters Generics and Inheritance: Notes Wrap-Up873 874 874 877 880 883 883 891 895 899 90022 Custom Generic Data Structures904 905 905 906 907 917 921 924 93023 Applets and Java Web Start941 942 943 947 949 951 951 952 954 956 956 957 96124 Multimedia: Applets and Applications967 968 969 975 98222.1 22.2 22.3 22.4 22.5 22.6 22.7 22.8Introduction Self-Referential Classes Dynamic Memory Allocation Linked Lists Stacks Queues Trees Wrap-Up23-1 Introduction 23.2 Sample Applets Provided with the JDK 23-3 Simple Java Applet: Drawing a String 23-3.1 Executing Wel comeAppl et in the appletviewer 23-3.2 Executing an Applet in a Web Browser 23.4 Applet Life-Cycle Methods 23-5 Initialization with Method i ni t 23.6 Sandbox Security Model 23.7 Java Web Start and the Java Network Launch Protocol (JNLP) 23.7.1 Packaging the DrawTes t Applet for Use with Java Web Start 23.7.2 JNLP Document for the DrawTest Applet 23.8 Wrap-Up 24.1 24.2 24.3 24.4Introduction Loading, Displaying and Scaling Images Animaring a Series of Images Image Mapswww.FreeLibros.me 19. Contenido24.5 24.6 24.7 24.8Loading and Playing Audio Clips Playing Video and Other Media with Java Media Framework Wrap-Up Web Resources2 5 GUI Components: Part 225-1 25.2 25-3 25.4 25-5 25.6 25.7 25.8 25.9 25.10IntroductionJ S Iid e rWindows: Additional Notes Using Menus with Frames JPopupMenu Pluggable Look-and-Feel JDesktopPane and JlnternalFrame JTabbedPane Layout Managers: BoxLayout and Gri dBagLayout Wrap-Up2 6 Multithreading26.1 26.2 26.3 26.426.5 26.6 26.7 26.8 26.9 26.10 26.11 26.12 26.13 26.14Introduction Thread States: Life Cycle of a Thread Creating and Executing Threads with Executor Framework Thread Synchronization 26.4.1 Unsynchronized Data Sharing 26.4.2 Synchronized Data Sharing Making Operations Atomic Producer/Consumer Relationship without Synchronization Producer/Consumer Relationship: ArrayBlocki ngQueue Producer/Consumer Relationship with Synchronization Producer/Consumer Relationship: Bounded Buffers Producer/Consumer Relationship: The Lock and Condi t i on Interfaces Concurrent Collections Overview Multithreading with GUI 26.11.1 Performing Computations in a Worker Thread 26.11.2 Processing Intermedate Results with Swi ngWorker Interfaces Cali abl e and Fu tu re Java SE 7: Fork/Join Framework Wrap-Up2 7 Networking27.1 27.2 27.3 27.4 27.5 27.6 27.7 27.8 27.9 27.10Introduction Manipulating URLs Reading a File on a Web Server Establishing a Simple Server Using Stream Sockets Establishing a Simple Client Using Stream Sockets Client/Server Interaction with Stream Socket Connections Datagrams: Connectionless Client/Server Interaction Client/Server Tic-Tac-Toe Using a Multithreaded Server [Web Bonus] Case Study: DeitelMessenger Wrap-Up www.FreeLibros.mex v ii985 988 992 992 10001001 1001 1005 1006 1014 1017 10221026 1028 1040 1045 1046 1048 1051 1054 1055 1059 1062 1070 1073 1079 1086 1093 1095 1096 1102 1109 1109 1110 I 118 1119 1120 1125 1128 1130 1130 1142 1150 1165 1165 20. x v Contenido28 Accessing Databases w ith JDBC28.1 28.2 28.3 28.428.5 28.6 28.7 28.8 28.9 28.10 28.1128.12 28.13 28.14 28.15Introduction Relational Databases Relational Database Overview: The books Database SQL 28.4.1 Basic SELECT Query 28.4.2 WHERE Clause 28.4.3 ORDER BY Clause 28.4.4 Merging Data from Mltiple Tables: INNER JOIN 28.4.5 I NSERT Statement 28.4.6 U PDATE Statement 28.4.7 DELETE Statement Instructions for Installing MySQL and MySQL Connector/J Instructions for Setring Up a MySQL User Account Creating Database books in MySQL Manipularing Databases with JDBC 28.8.1 Connecring to and Querying a Database 28.8.2 Querying the books Database RowSet Interface Java DB/Apache Derby29.5 29.6 29.7 29.8 29.91226 1227 1227 1228Introduction HyperTextTransfer Protocol (HTTP) Transacrions Multirier Application Architecture Your First JSF Web App 29.4.1 The Default i ndex .xhtml Document: Introducing Facelets 29.4.2 Examining the WebTi meBean Class 29.4.3 Building the WebTi me JSF Web App in NetBeans Model-View-Controller Architecture of JSF Apps Common JSF Components Validation Using JSF Standard Validators SessionTracking 29.8.1 Cookies 29.8.2 SessionTracking with @ Sessi onScoped Beans Wrap-Up30 JavaServer Faces Web Apps: Part 230.1 Introduction 30.2 Accessing Databases in Web Apps 30.2.1 Setring Up the Database 3 0 .2 .21172 1173 1174 1177 1178 1179 1181 1182 1184 1185 1186 1186 1187 1188 1189 1189 1194 1207 1209 1211P repa red Statem entsStored Procedures Transaction Processing Wrap-Up Web Resources29 JavaServer Faces Web Apps: Part I 29.1 29.2 29.3 29.4I 171@ManagedBean C lassA d d ressB ean30.2.3 i ndex. xhtml Facelets Page 3 0 .2 .4 adden t r y . xhtm l Facelets Pagewww.FreeLibros.me12351236 1237 1240 1241 1242 1244 1246 1250 1250 1254 1261 1262 1263 12691276 1277 1277 1279 1282 1286 1288 21. Contenido30.3 Ajax 30.4 Adding Ajax Functionality to the Validation App 30.5 Wrap-Up 31 31.1 31.2 31.3 31.4 31.5 31.631.7 31.8 31.9 31.10 31.1131.12Web Services Introduction Web Service Basics Simple Object Access Protocol (SOAP) Representational State Transfer (REST) JavaScript Object Notation (JSON) Publishing and Consuming SOAP-Based Web Services 31.6.1 Creating a Web Application Project and Adding a Web Service Class in NetBeans 3 1 .6 .2 Defining the Wel comeSOAP Web Service in NetBeans 31.6.3 Publishing the Wel come SOAPWeb Service from NetBeans 31.6.4 Testing the Wel comeSOAP Web Service with GlassFish Application ServersTesterW eb Page 1308 31.6.5 Describing a Web Service with the Web Service Description Language (WSDL) 3 1 .6 .6 Creating a Client to Consume the Wel comeSOAP Web Service 31.6.7 Consuming the Wel comeSOAPWeb Service Publishing and Consuming REST-Based XML Web Services 31.7.1 Creating a REST-Based XML Web Service 31.7.2 Consuming a REST-Based XML Web Service Publishing and Consuming REST-Based JSON Web Services 31.8.1 Creating a REST-Based JSON Web Service 31.8.2 Consuming a REST-Based JSON Web Service Session Tracking in a SOAP Web Service 31.9.1 Creating a B la c k ja c k Web Service 31.9.2 Consuming the BI ack j ack Web Service Consuming a Database-Driven SOAP Web Service 31.10.1 Creating the R e se rv a ti on Database 31.10.2 Creating a Web Application to Interact with the R ese rva tio n Service 1343 Equation Generator: Returning User-Defmed Types 31.11.1 Creating the EquationGeneratorXML Web Service 3 1 .1 1 .2 Consuming the Equatio nG enerato rXM L Web Service 31.11.3 Creating the EquationGenerator JSON Web Service 31.11.4 Consuming the EquationGeneratorJSONW eb Service Wrap-Upwww.FreeLibros.mex x1290 1292 1295 1299 1300 1302 1302 1302 1303 1303 1303 1304 1307 1309 1310 1312 1315 1315 1318 1320 1320 1322 1324 1325 1328 1339 1340 1346 1349 1350 1354 1354 1357 22. XXContenidoLos apndices M a Q se encuentran en ingls en el sitio W eb del libroMCreating Documentation w ith javadoc M. 1 Introduction M.2 Documentation Comments M.3 Documenting Java Source Code M .4javadocNBit Manipulation Introduction Bit Manipulation and the Bitwise Operators B itS e t ClassM.5 Files Produced by javadoc N .l N.2 N.3M-i M -l M -l M -l M-8 M-9 N-l N -l N -l N -llO Labeled break and co n ti nue Statements 0.1 Introduction 0 .2 Labeled break Statement 0 .3 Labeled conti nue Statement0 -1PUML 2: Additional Diagram Types Introduction Additional Diagram TypesP-l P-l P-lQDesign Patterns Introduction Creational, Structural and Behavioral Design Patterns Q .2.1 Creational Design Patterns Q.2.2 Structural Design Patterns Q.2.3 Behavioral Design Patterns Q.2.4 Conclusin Design Patterns in Packages jav a. awt and javax. swi ng Q .3.1 Creational Design Patterns Q.3.2 Structural Design Patterns Q.3.3 Behavioral Design Patterns Q.3.4 Conclusin Concurrency Design Patterns Design Patterns Used in Packages java, i o and java, net Q .5.1 Creational Design Patterns Q.5.2 Structural Design Patterns Q.5.3 ArchitecturaJ Patterns Q.5.4 Conclusin Design Patterns Used in Package jav a.u ti 1 Q .6.1 Creational Design Patterns Q.6.2 Behavioral Design Patterns Wrap-UpP. 1 P.2 Q .l Q.2Q.3Q.4 Q.5Q.6 Q.7www.FreeLibros.meo -i o-i0-2Q-iQ -l Q-2Q-3 Q-5Q-6Q-7 Q-7 Q-7 Q-8Q -l 0 Q-13 Q-14Q-i 5 Q-i 5 Q-15 Q-16 Q-19 Q-19 Q-19 Q-19 Q-20 23. PrefacioNo vivas ms enfragmentos, conctate. Edgar Morgan Foster Bienvenido a Cmo programar en Java, novena edicin. Este libro presenta las tecnologas de vanguardia para estudiantes, profesores y desarroliadores de software. El nuevo captulo 1 atrae la atencin de los estudiantes con hechos y cifras fascinantes, para que encuentren ms emocionante el hecho de estudiar sobre las computadoras y la programacin. Ofrece los siguiente: una tabla sobre algunos proyectos de investigacin que se hacen posibles gracias a las computadoras; un anlisis sobre el hardware y las tendencias tecnolgicas actuales; jerarqua de datos; una tabla de plataformas de aplicaciones mviles y de Internet; una nueva seccin sobre redes sociales; una introduccin a Andr id; una tabla de los servicios Web ms populares; una tabla de las publicaciones tecnolgicas y de negocios, adems de los sirios Web que le ayudarn a estar al da con las noticias y ten dencias ms recientes sobre tecnologa; y ejercicios actualizados. El libro es apropiado para secuencias de cursos introductorios apoyados en las recomendaciones curriculares de ACM/IEEE y sirve como preparacin para el examen de Colocacin avanzada (AP) de ciencias computacin ales. Nos enfocamos en las mejores prcticas de ingeniera de software. La base del libro es nuestro reconocido mtodo de cdigo activo: los conceptos se presentan en el contexto de programas funcionales completos, en lugar de hacerlo a travs de fragmentos separados de cdigo. Cada ejemplo de cdigo completo viene acompaado de ejemplos de ejecuciones actuales. Todo el cdigo fuente est disponible en www. dei t e l . com/ books/j htp9/ (en ingls) y en el sirio Web de este libro www. pearsonenespaol. com/dei tel (en espaol). Si surge alguna duda o pregunta mientras lee este libro, enve un correo electrnico a dei tel @dei t e l . com; le responderemos a la brevedad. Para obtener actualizaciones sobre este libro, visite vavw . dei t e l . com/books/ jhtp9/, sganos en Facebook (vmm dei t e l . com/dei tel f an) yTwitter (@dei tel). Tambin puede suscribirse al boletn de correo electrnico DeitePBuzz Online (vom. dei t e l . com/newsl etter/subscri be. html). Caractersticas nuevas y mejoradasHe aqu las actualizaciones que realizamos a la 9a edicin:Java Standard Edition (SE) 7 Fcil de usar como libro para Java SE 6 y Java SE 7. Hay unas cuantas caractersticas de Java Standard Edition (SE) 7 que afectan a los cursos de ciencias computacionales CS 1 y CS 2. Cubrimos esas caractersticas en secciones modulares opcionales que se pueden incluir u omitir con facilidad. He aqu una parte de la nueva funcionalidad: objetos Stri ng en instrucciones switch, la instruc cin try con recursos (try-with-resources) para administrar objetos AutoCl osabl e, multi-catch para definir un solo manejador de excepciones en sustitucin de varios que realizan la misma tarea, las API del sistema de archivos NIO y la inferencia de tipos de objetos genricos a partir de la variable a la que estn asignados, mediante el uso de la notacin o . Tambin veremos las generalidades sobre las nuevas caractersticas de la API concurrente. www.FreeLibros.me 24. xxPrefacioNuevas API del sistema de archivos de Java SE 7. Ofrecemos una versin en lnea alternativa (en ingls) del captulo 17, Archivos, flujos y sealizacin de objetos, que se volvi a implementar con las nuevas API del sistema de archivos de Java SE 7. Versiones A utoC losable de Connection, S ta tem en ty ResultSetdeJava SE 7. Con el cdigo fuen te para el captulo 28 (en ingls), proporcionam os una versin del prim er ejemplo del captulo que se implement mediante el uso de las versiones A utoClosable de Connection, S tatem enty R esultSet. Los objetos A utoC losable reducen la probabilidad de fugas de recursos cuando se utilizan con la instruccin tr y con recursos (try-w ith-reso urces) de Java SE 7, la cual cierra de manera autom tica los objetos AutoClosabl e que se asignan en los parntesis despus de la palabra clave try .Caractersticas pedaggicas Mejoramos el conjunto de ejercicios Marcar la diferencia* Le alentamos a utilizar las computadoras e Internet para investigar y resolver problemas sociales relevantes. Estos ejercicios estn diseados para aumentar la conciencia y el anlisis en torno a los problemas importantes a los que se enfrenta el mundo. Esperamos que usted los aborde con sus propios valores, polticas y creencias. D un vis tazo a nuestro nuevo Centro de recursos para marcar una diferencia (en ingls) en www. dei t e l . com/ Maki ngADi f ference, en donde obtendr ideas adicionales que tal vez desee investigar ms a fondo. Nmeros de pgina para los trminos clave en los resmenes de cada capitulo. En la lista de trmi nos clave que aparece en el resumen de cada captulo incluimos el nmero de pgina donde se define el trmino. Comentarios en video. En el sitio Web de este libro encontrar comentarios en video (Video No tes), en ingls, en las que el coautor Paul Deitel explica con detalle la mayora de los programas de los captulos bsicos. Los profesores nos han dicho que estos comentarios constituyen un recurso valioso para sus estudiantes. Tecnologa de objetos Programacin y diseo orientados a objetos. En el captulo 1 presentamos la terminologa y los conceptos bsicos de la tecnologa de objetos. En el captulo 3 los estudiantes desarrollan sus primeras clases y objetos personalizados. Al presentar los objetos y las clases en los primeros captulos hace mos que los estudiantes de inmediato piensen en objetos y dominen estos conceptos [en los cursos que requieren una metodologa en la que se presenten los objetos en captulos posteriores, le reco mendamos el libro Java How to Program, Late Objects Versin, 8a edition (en ingls), el cual presenta en los primeros seis captulos los fundamentos de la programacin (incluyendo dos sobre instruc ciones de control) y contina con varios captulos que introducen los conceptos de programacin orientada a objetos en forma gradual]. Manejo de excepciones. Integramos el manejo bsico de excepciones en los primeros captulos del libro; adems los profesores pueden extraer con facilidad ms material del captulo 11, Manejo de excepciones: un anlisis ms detallado, para mostrarlo con anticipacin. Las clases A rra ysy A rra yL ist. El captulo 7 cubre la clase Arrays que contiene mtodos para realizar manipulaciones comunes de arreglos y la clase ArrayLi s t que implementa una estruc tura de datos tipo arreglo, cuyo tamao se puede ajustar en forma dinmica. Esto va de acuerdo con nuestra filosofa de obtener mucha prctica al utilizar las clases existentes, al tiempo que el estudiante aprende a definir sus propias clases. Casos de estudio orientados a objetos (OO). La presentacin de las clases y los objetos en los pri meros captulos del libro aportan casos de estudio de Tiempo, Empleado y LibroC ali ficac io n es, que se entretejen a travs varias secciones y captulos, e introducen conceptos de O O cada vez ms profundos.www.FreeLibros.me 25. PrefacioxxiEjemplo prctico opcional: uso de UML para desarrollar un diseo orientado a objetos y una implementacin en Java de un cajero automtico (ATM). El UML (Lenguaje Unificado de Modelado) es el lenguaje grfico estndar en la industria para modelar sistemas orientados a ob jetos. Los captulos 12 y 13 (en el sitio Web) contienen un Ejemplo prctico opcional sobre diseo orientado a objetos mediante el uso de UML. Diseamos e implementamos el software para un cajero automtico (ATM) simple. Analizamos un documento de requerimientos tpico, el cual espe cifica elsistemaque se va a construir. Determinamos las clases necesarias para implemen trese sistema, los atributos que deben tener esas clases, los comportamientos que necesitan exhibir, y especificamos cmo deben interactuar las clases entre s para cumplir con los requerimientos del sistema. A partir del diseo creamos una implementacin completa en Java. A menudo los estudiantes informan que pasan por un momento de revelacin: el Ejemplo prctico les ayuda a atar cabos y comprender en verdad la orientacin a objetos. Se reorden la presentacin de estructuras de datos. Empezamos con la clase genrica Ar rayLi s t en el captulo 7. Como los estudiantes comprendern los conceptos bsicos sobre los genricos en los pri meros captulos del libro, nuestros anlisis posteriores sobre las estructuras de datos ofrecen un trata miento ms detallado de las colecciones de genricos, puesto que ensean a utilizar las colecciones integradas de la API de Java. Luego mostramos cmo implementar los mtodos y las clases genricas. Por ltimo, mostraremos cmo crear estructuras de datos genricas personalizadas.Desarrollo Web y de bases de datos (material en ingls en el sitio Web del libro) JDBC 4. El captulo 28, trata sobre JDBC 4; aqu se utilizan los sistemas de administracin de bases de datos Java DB/Apache Derby y MySQL. El captulo contiene un Ejemplo prctico de O O sobre cmo desarrollar una libreta de direcciones controlada por una base de datos; en este ejemplo se de muestran las instrucciones preparadas y el descubrimiento automtico de controladores de JDBC 4. Java Server Faces (JSF) 2.0. Los captulos 29 y 30 se actualizaron para introducir la tecnologa JavaServer Faces (JSF) 2.0, que simplifica en gran medida la creacin de aplicaciones Web con JSF. El captulo 29 presenta ejemplos sobre la creacin de interfaces GUI de aplicaciones Web, la vali dacin de formularios y el rastreo de sesiones. El captulo 30 habla sobre las aplicaciones JSF con troladas por datos y habilitadas para Ajax. Este captulo cuenta con una libreta de direcciones Web muldnivel controlada por una base de datos, la cual permite a los usuarios agregar contactos y bus carlos. Esta aplicacin habilitada para Ajax proporciona al lector una sensacin real del desarrollo de software Web 2.0. Servicios Web. El captulo 31, Web Services, demuestra cmo crear y consumir servicios Web basa dos en SOAP^ REST. Los Ejemplos prcticos presentan el desarrollo de los servicios Web del juego de blackjack y un sistema de reservaciones de una aerolnea. Java Web Start y el Protocolo de lanzamiento de red deJava (JNLP). Presentamos Java Web Start y JNLP, que permiten lanzar applets aplicaciones a travs de un navegador Web. Los usuarios pueden instalar estos applets y aplicaciones en forma local para ejecutarlos despus. Los progra mas tambin pueden solicitar permiso al usuario para acceder a los recursos locales del sistema y a los archivos: con lo cual usted podr desarrollar applets y aplicaciones ms robustas que se ejecuten en forma segura mediante el modelo de seguridad de caja de arena (sandbox) de Java, el cual se aplica al cdigo descargado. Multihilos (en ingls en el sitio Web) Multihilos. Rediseamos por completo el captulo 26, Multithreading [con agradecimiento especial a la orientacin de Brian Goetz y Joseph Bowbeer, dos de los coautores de Java Concurrency in Practice, Addison-Wesley, 2006]. La clase SwingWorker. Utilizamos la clase Swi ngWorker para crear interfaces de usuario multihilos. www.FreeLibros.me 26. x x ivPrefacioGUI y grficos Presentacin escalable de GUI y grficos. Los profesores que impartan cursos introductorios tie nen una amplia gama de dnde elegir en cuanto a la cantidad de GUI y grficos por cubrir: desde cero hasta una secuencia introductoria de 10 secciones breves, las cuales se entrelazan con los pri meros captulos hasta llegar a un anlisis detallado en los captulos 14, 15 y 25 y en el apndice I (este ltimo y el apndice, en ingls en el sitio Web). Administrador de esquemas GroupLayout. Analizamos el administrador de esquemas Grou pLayout dentro del contexto de la herramienta de diseo de GUI en el entorno de desarrollo integrado (IDE) NetBeans. Herramientas de ordenamiento y filtrado de JTabl e. El captulo 28 (en ingls en el sitio Web) uti liza estas herramientas para reordenar los datos en un objeto JTable y filtrarlos mediante expresio nes regulares. Otras caractersticas Android Debido al enorme inters en los telfonos inteligentes y tabletas basadas en Android, hemos integrado una introduccin de tres captulos para el desarrollo de aplicaciones de Android (los encon trar en ingls en el sitio Web del libro). Estos captulos son de nuestro nuevo libro Androidfor Programmers: An App-Driven Approach de la serie Deitel Developer. Una vez que aprenda Java, descubrir que es bastante simple desarrollar y ejecutar aplicaciones Android en el emulador gratuito que puede descargar de developer.android.com. Conceptos comunes de ingeniera de software. Analizamos el desarrollo gil de software, la refactorizacin, los patrones de diseo, LAMP, SaaS (Software as a Service), PaaS (Platform as a Service), la computacin en la nube, el software de cdigo abierto y muchos conceptos ms. Grfico de dependenciasEl grfico de la siguiente pgina muestra las dependencias entre los captulos para ayudar a los profe sores a planear su programa de estudios. Cmo programar en Java 9a edicin es un libro extenso, apro piado para una gran variedad de cursos de programacin en distintos niveles, en especial CS 1 y CS 2, adems de las secuencias de cursos de introduccin en disciplinas relacionadas. El libro tiene una organizacin modular, claramente delineada. Los captulos 1 a 11 y 14 a 17 forman una secuencia de programacin elemental accesible, con una slida introduccin a la programacin orientada a objetos. Los captulos opcionales 12 y 13 constituyen una introduccin accesible al diseo orientado a obje tos con UML. Tanto la trayectoria de GUI y grficos como los captulos 14, 15, 23, 24 y 25 forman una secuencia sustancial de GUI, grficos y multimedia. Los captulos 18 a 22 forman una excelente cadena de estructuras de datos. Los captulos 26 y 27 constituyen una slida introduccin a los con ceptos de multihilos y el trabajo en red a travs de Internet. Los captulos 28 a 31 forman una secuencia enriquecida de desarrollo Web con uso intensivo de bases de datos. Mtodos de enseanzaCmo programar en Java 9a edicin oontiene cientos de ejemplos funcionales completos. Hacemos hin capi en la claridad de los programas y nos concentramos en crear software bien diseado.www.FreeLibros.me 27. PrefacioGrfico de dependencias de captulos y mdulosI Introduccin a las computadoras y a Java[Nota: las flechas que apuntan hada un captulo indican las dependencias de ste. Algunos captulos tienen varias dependencias].2 Introduccin a lasapfcacionesen Java-Introduccin(Opcional) Trayectoria de GUI y grficos 3.8 Uso de cuadros de dilogoIntroduccin a la programacin, las clases y los objetos4.14 5.106.137.15 8.16Uso de objetos con grficos4 Instrucciones de control: Parte II9.8 Mostrar texto e imgnes usando etiquetasi6 Mtodos: un anlisis ms detalladoI 10 Programadn orientada a objetos: polimorfismo10.8 Realizar dibujos usando polimorfismo. 7 Arreglos y objetos A r r a y L i s tI I Manejo de excepcionesVDiseo orientado a objetos con UMLGU I, grficos, applets y multimediaCadenas y archivos12 (Opcional) Diseo orientado a objetos con UMLI13 (Opcional) Implementacin de un diseo orientado a objetos/^ st ructuras de datos14Componentes de GUI: Parte I 16Cadenas, caracteres y expresiones regulares15 Grficos y Java2D- 17 Archivos, flujos y serializadn de objetosIMultihilos y redes24 Multimedia: Applets and ApplicationsI27 Networking325GUICom ponents: Rart 219 Bsqueda, ordenamiento y Big O21 Generic Classes and Methods22 Cu stom Generic Data StructuresDiseo de aplicaciones de escritorio y Web controladas por bases de datos 28 JDBC4 ------------29 JSF Web Apps: Part I30 JSF Web Apps: Part 2 El captulo 18 depende de los captulos 14 y 15 para la GUI y los grficos que se utilizan en un ejemplo.- * 23 Applets and Java Web Start526 Multithreading218 Recursividad1I.Dibujo de arcos5 Instrucciones de control: Parte 2 9 Programadn orientada a objetos: herencia20 Generic CollectionsCobres y figuras rellenasInstrucciones de control, mtodos y arreglos8 Clases y objetos:-* iri anlisis ms detalladoDibujo de rectngulos yvalosI3 Introduccin a lascbses. objetos, mtodos y cadenasProgramacin orientada a objetosCreacin de dibujos simples31 Web Services2.El captulo 2 6 depende del captulo 14para la GUI que se utiliza en un ejemplo yde los captulos 2 0 -2 1 para otro ejemplo. 3. El captulo 27depende del captulo 23 para un ejemplo que utiliza un applet. El Ejemplo prctico extenso (en W eb) depende del captulo 25 para la GUI y del captulo 26 para los multihilos. 4. El captulo 28dependedel captulo 14 para la GUI que se utiliza en un ejemplo. 5. En los captulos 2 4 y 2 7 se cubren ms applets.www.FreeLibros.mexxv 28. xxviPrefacioResaltado de cdigo. Colocamos rectngulos de color gris alrededor de los segmentos de cdigo clave en cada programa. Uso de fuentes para dar nfasis. Resaltamos en negritas, dentro del texto, y en el ndice, los trmi nos clave en los lugares donde se define. Enfatizamos los componentes en pantalla en la fuente Helvtica en negritas (por ejemplo, el men Archivo) y enfatizamos el texto del programa en la fuente Lucida (por ejemplo, in t x = 5;). Acceso Web. Todo el cdigo fuente utilizado en este libro se puede descargar de: Captulos 2 a 19 (en espaol): www.pearsonenespaol .com/deitel Captulos2 a31 (en ingls): www.dei te l .com/books/jhtp9 Objetivos. Las citas de apertura van seguidas de una lista de objetivos del captulo. Ilustraciones/figuras. Integramos una gran cantidad de tablas, dibujos lineales, diagramas UML, pro gramas y salidas de programa. lips de programacin. Incluimos tips de programacin para ayudarle a enfocarse en los aspectos im portantes del desarrollo de programas. Estos tips y prcticas representan lo mejor que hemos podido recabar a lo largo de siete dcadas combinadas de experiencia en la programacin y la enseanza. Buenas prcticas de programacinLas Buenas prcticas de programacin son tcnicas que le ayudarn a producir progra mas ms claros, comprensiblesy fciles de mantener. Errores comunes de programacinAlponer atencin en estos Errores comunes de programacin se reduce la probabilidad deque ustedpueda caer en ellos. Tips para prevenir erroresEstos tips contienen sugerencias para exponer los errores o gusanos informticos y elimi narlos de sus programas; muchos de ellos describen aspectos de java que evitan que en tren siquiera a susprogramas.Tips de rendimientoEstos recuadros resaltan las oportunidades para hacer que sus programas se ejecuten ms rpido o para minimizar la cantidad de memoria que ocupan. Tips de portabilidadLos Tips de portabilidad le ayudan a escribir cdigo que pueda ejecutarse en varias plataformas. Observaciones de ingeniera de softwareLas Observaciones de ingeniera de software resaltan temas de arquitecturay diseo, lo cualafecta la construccin de los sistemas de sofiware, especialmente los de gran escala. * n i Observaciones de apariencia visualB5B Las Observaciones de apariencia visual resaltan las convenciones de la interfaz grficatle usuario. Adems, le ayudan a disear interfaces grficas de usuario atractivasy amiga bles en conformidad con las normas de la industria. www.FreeLibros.me 29. Prefaciox x v iiVietas de resumen. Presentamos un resumen detallado del captulo, estilo lista con vietas, seccin por seccin. Para facilitar la referencia, incluimos dentro del texto el nmero de pgina donde aparecen bs trminos clave. Ejercicios de autoevaluacin y respuestas. Se proveen diversos ejercicios de autoevaluacin con sus respuestas para que los estudiantes practiquen por su cuenta. Todos los ejercicios en el Ejemplo prctico opcional sobre el ATM estn resueltos en su totalidad. Ejercicios. Los ejercicios de los captulos abarcan: Recordatorio simple de la terminologa y los conceptos importantes. Cul es el error en este cdigo? Qu hace este cdigo? Escritura de instrucciones individuales y pequeas porciones de mtodos y clases. Escritura de mtodos, clases y programas completos. Proyectos importantes. En muchos captulos, ejerciciosdel tipo Hacer la diferencia. ndice. Incluimos un ndice extenso. Donde se definen los trminos clave se resaltan con un nmero de pgina en negritas. Software utilizado enCmo programaren Java 9aedicinPodr descargar todo el software necesario para este libro sin costo a travs de Web. En la seccin Antes de empezar, despus de este Prefacio, encontrar vnculos para cada descarga. Para escribir la mayora de los ejemplos de este libro utilizamos el kit de desarrollo gratuito Java Standard Edition Development Kit (JDK) 6. Para los mdulos opcionales de Java SE 7 utilizamos la ersin JDK 7 de acceso anticipado de OpenJDK. En los captulos 29 a 31 tambin utilizamos el IDE Netbeans; en el captulo 28 usamos MySQL y MySQL Connector/J. Encontrar recursos y descargas de software adicionales en nuestros Centros de recursos de Java, ubicados en: www.deitel.com/ResoureeCenter s .html Suplementos para el profesor (en ingls)Los siguientes suplementos estn disponibles slo para profesores a travs del Centro de recursos para el pro fesor de Pearson (www.pearsonenespaol.com/deitel): Diapositivas de PowerPoint!oon todo el cdigo y las figuras del texto, adems de elementos en vietas que sintetizan los puntos clave. Test Item File (Archivo de pruebas) oon preguntas de opcin mltiple (aproximadamente dos por cada seccin del libro). Manual de soluciones con soluciones para la gran mayora de los ejercicios de final de captulo. El acceso a estos recursos est limitado estrictamente a profesores universitarios que impartan cla ses con base en el libro. Slo ellos pueden obtener acceso a travs de los representantes de Pearson. No se proveen soluciones para los ejercicios de proyectos. Revise nuestro Centro de recursos de proyectos de programacin (www.dei te l .com/Programmi ngProjects/), en donde encontrar muchos ejercicios adicionales y proyectos nuevos. Si no es un miembro docente registrado, pngase en contacto con su representante de Pearson.www.FreeLibros.me 30. x x v iiiPrefacioReconocimientosQueremos agradecer a Abbey Deitel y Barbara Deitel por las extensas horas que dedicaron a este proyecto. Somos afortunados al haber trabajado en este proyecto con el dedicado equipo de editores profesionales de Pearson. Apreciamos la orientacin, inteligencia y energa de Michael Hirsch, editor en jefe de Cien cias computacionales. Carole Snyder reclut a los revisores del libro y se hizo cargo del proceso de revisin. Bob Engelhardt se hizo cargo de la produccin del libro. Revisores Queremos agradecer los esfuerzos de los revisores de la octava y novena ediciones, quienes revisaron ex haustivamente el texto y los programas, y proporcionaron innumerables sugerencias para mejorar la presentacin: Lance Andersen (Oracle), Soundararajan Angusamy (Sun Microsystems),Joseph Bowbeer (Consultor), WilliamE. Duncan (Louisiana State University), Diana Franklin (Universityof California, Santa Barbara), Edward E Gehringer (North Carolina State University), Huiwei Guan (Northshore Community College), Ric Heishman (George Masn University), Dr. Heinz Kabutz (JavaSpecialists. eu), Patty Kraft (San Diego State University), Lawrence Premkumar (Sun Microsystems), Tim Margush (University of Akron), Sue McFarland Metzger (Villanova University), Shyamal Mitra (The University of Texas at Austin), Peter Pilgrim (Consultor), Manjeet Rege, Ph.D. (Rochester Insritute of Techno logy), Manfred Riem (Java Champion, Consultor, Robert Half), Simn Ritter (Oracle), Susan Rodger (Duke University), Amr Sabry (Indiana University), Jos Antonio Gonzlez Seco (Parlamento de Andaluca), Sang Shin (Sun Microsystems), S. Sivakumar (Astra Infotech Prvate Limited), Raghavan Rags Srinivas (Inmit), Monica Sweat (Georgia Tech), Vinod Varma (Astra Infotech Prvate Limited) y Alexander Zuev (Sun Microsystems). Bueno, ah lo tiene! A medida que lea el libro, apreciaremos con sinceridad sus comentarios, crticas, correcciones y sugerencias para mejorarlo. Dirija toda su correspondencia a: d e it e l@ d e it e l. comLe responderemos oportunamente. Esperamos que disfrute el trabajo con este libro. Buena suerte! Pauly Harvey Deitel Acerca de los autoresPaul J. Deitel, CEO y Director Tcnico de Deitel & Associates, Inc., es egresado del Sloan School of Management del MIT, en donde estudi Tecnologa de la Informacin. A travs de Deitel & Asso ciates, Inc., ha impartido cursos de Java, C, C++, C#, Visual Basic y programacin en Internet a clientes de la industria, como: Cisco, IBM, Siemens, Sun Microsystems, Dell, Lucent Technologies, Fidelity, NASA en el Centro Espacial Kennedy, el National Severe Storm Laboratory, White Sands Missile Range, Rogue Wave Software, Boeing, SunGard Higher Education, Stratus, Cambridge Technology Partners, One Wave, Hyperion Software, Adra Systems, Entergy, CableData Systems, Nortel Networks, Puma, iRobot, Invensys y muchos ms. l y su coautor, el Dr. Harvey M. Deitel, son autores de los li bros de programacin ms vendidos en el mundo. Dr. Harvey M. Deitel, Presidente y Consejero de Estrategia de Deitel & Associates, Inc., tiene 50 aos de experiencia en el campo de la computacin. El Dr. Deitel obtuvo una licenciatura y una maes tra por el MIT y un doctorado de la Universidad de Boston. Tiene muchos aos de experiencia como profesor universitario, la cual incluye un puesto vitalicio y el haber sido presidente del Departamento de Ciencias de la Computacin en Boston College antes de fundar, con su hijo Paul J. Deitel, Deitel & Associates, Inc. l y Paul son coautores de varias docenas de libros y paquetes multimedia LiveLessons, y piensan escribir muchos ms. Los textos de los Deitel se han ganado el reconocimiento internacional y han sido traducidos al japons, alemn, ruso, chino, espaol, coreano, francs, polaco, italiano, portu gus, griego, urdti y turco. El Dr. Deitel ha impartido cientos de seminarios profesionales para grandes empresas, instituciones acadmicas, organizaciones gubernamentales y diversos sectores del ejrcito. www.FreeLibros.me 31. Prefaciox x ixCapacitacin corporativa de Deitel & Associates, Inc.Deitel & Associates, Inc., es una empresa reconocida a nivel mundial, dedicada al entrenamiento cor porativo y la creacin de contenido. La empresa proporciona cursos impartidos por profesores en las instalaciones de sus clientes en todo el mundo, sobre la mayora de los lenguajes y plataformas de programacin, como Java, C++, Visual C++, C, Visual C#, Visual Basic, XML, Python, tec nologa de objetos, programacin en Internet y World Wide Web, desarrollo de aplicaciones para Android e Phone, y una lista cada vez mayor de cursos adicionales de programacin y desarrollo de software. Los fundadores de Deitel & Associates, Inc. son Paul J. Deitel y el Dr. Harvey M. Deitel. Entre sus clientes estn muchas de las empresas ms grandes del mundo, agencias gubernamentales, sectores del ejrcito e instituciones acadmicas. A lo largo de su sociedad editorial de 35 aos con Hentice Hall/Pearson, Deitel & Associates, Inc. ha publicado libros de texto de vanguardia sobre programacin, libros profesionales, y cursos de video UveLessons con base en DVD y Web. Puede contactarse con Deitel & Associates, Inc. y con los autores por medio de correo electrnico: d e it e l d e it e l. comPara conocer ms acerca de Deitel & Associates, Inc., sus publicaciones y su currculum mundial de la Serie de Capacitacin Corporativa Dive Int

cd C :e xa m p le sch 0 1 A T M ------------------------------------------=iC : exam p lesch01ATM>Fig. l.l I | Abrir una ventana Smbolo del sistema en Windows XP y cambiar de directorio.Ejecute la aplicacin del ATM. Escriba el comando ja v a E jem p lo Practico A TM y oprima Intro (figura 1.12). Recuerde que el comando j ava, seguido del nombre del archivo . el a s s de la aplicacin (en este caso, E jem p lo P ractico A T M ), ejecuta la aplicacin. Si especificamos la extensin .el ass al usar el comando ja v a se produce un error [Nota: los comandos en Java son sensibles a maysculas/minsculas. Es importante escribir el nombre de esta aplicacin con las letras A, T y M maysculas en ATM, una letra E mayscula en Ejemplo y una letra P ma yscula en Practico. De lo contrario, la aplicacin no se ejecutar.] Si recibe el mensaje de error E x c e p tio n in th re a d m ain ja v a .la n g .N o C la s s D e fF o u n d E r ro r : Ejem p lo P ractico A T M ,entonces su sistema tiene un problema con CLASSPATH. Consulte la seccin Antes de empezar este libro para obtener instrucciones acerca de cmo corregir este problema.I Administrator Command PromptJn Jx JC : > c d C:exam plesch01ATM C : exampl esch01 A TM >java ATT^CaseStudyFig. 1.12 | Uso del comando ja v a para ejecutar la aplicacin del ATM.4.Escriba un nmero de cuenta. Cuando la aplicacin se ejecuta por primera vez, muestra el mensaje j B ie n v e n id o !" y le pide un nmero de cuenta. Escriba 12345 en el indicador E s c r ib a su numero de c u e n t a : (figura 1.13) y oprima Intro. www.FreeLibros.me 60. 24Captulo IIntroduccin a las computadoras y a JavaMensaje de bienvenida del ATMIndicador para introducir el nmero de cuentaGa Adminstrate Command Prompt-java ATMCaseStudy C :e xam p le s ch01ATM >java ATMCaseStudy- sJO J-X f dW elcom e!---P le a s e e n te r y o u r account number: 12345 --------_________________________________________________ dF ig . 1.13 | La aplicacin pide al usuario un nmero de cuenta.5. Escriba un NIP. U na vez que introduzca un nm ero de cuenta vlido, la aplicacin mostrar el indicador E scriba su NIP:. Escriba 54321 como su N IP (Nm ero de Identificacin Personal) vlido y oprim a Intro. A continuacin aparecer el m en principal del ATM, que contiene una lista de opciones (figura 1.14). En el captulo 14 le mostraremos cmo puede introducir un N IP en forma privada mediante el uso de un objeto JPassw ordField.Introduzca un NIP vlidoMen principal ATM09 Admmistrator Comma d Prompt-java ATMCaseStudy Welcome! P le a s e e n te r your- iD lX i....4 __ tiicco u n t number: 12345E n te r your P IN : 54 321 1 2 3 4-v ie w my b a la n ce W ithdraw cash D e p o sit funds E x itE n te r a c h o ic e : _______________________________________________ dFig. 1.14 | El usuario escribe un nmero NIP vlido y aparece el men principal de la aplicacin del ATM.6. Revise el saldo de la cuenta. Seleccione la opcin 1, Ve r mi sal do del men del ATM (fi gura 1.15). Acontinuacin laaplicacin mostrar dos nmeros: Sal do di sponi bl e ($ 1,000.00) y Sal do to ta l (SI, 200.00). El saldo disponible es la mxima cantidad de dinero en su cuenta, disponible para retirarla en un momento dado. En algunos casos, ciertos fondos como los de psitos recientes, no estn disponibles de inmediato para que el usuario pueda retirarlos, por lo que el saldo disponible puede ser menor que el saldo total, como en este caso. Despus de mostrar la informacin de los saldos de la cuenta, se vuelve a mostrar el men principal de la aplicacin. 7. Retire dinero de la cuenta. Seleccione la opcin 2, Ret i rar efectivo", del men de la apli cacin. A continuacin aparecer (figura 1.16) una lista de montos en dlares (por ejemplo: 20, 40,60,100 y 200). Tambin tendr la oportunidad de cancelar la transaccin y regresar al men principal. Retire $100 seleccionando la opcin 4. La aplicacin mostrar el mensaje Tome su efectivo ahora y regresar al men principal. [Nota: por desgracia, esta aplicacin slo simula el comportamiento de un verdadero ATM, por lo cual no dispensa efectivo en realidad]. www.FreeLibros.me 61. 1.10Prueba de una aplicacin en Java25Informacin del saldo de la cuentaE J Administrator Command Prompt - iava ATMCaseStudy E n te r a c h o ic e : 1_ |D |X | jB a la n c e I n f o r m a t io n :-------- A v a ila b le b a la n c e : $1,0 0 0 .0 0 - T o ta l b a la n c e : $ 1 ,2 0 0 .0 0 Main men: 1 - V iew my b a la n ce 2 - W ithdraw cash 3 - D e p o sit funds 4 - E x it E n te r a c h o ic e :AF ig . 1.15 | La aplicacin del ATM muestra la informacin del saldo de la cuenta del usuario.Men de retiro del ATMFig. 1.16 | Se retira el dinero de la cuenta y la aplicacin regresa al men principal.8. Confirme que la informacin de la cuenta se haya actualizado. En el men principal, se leccione la opcin 1 de nuevo para ver el saldo actual de su cuenta (figura 1.17). Observe que tanto el saldo disponible como el saldo total se han actualizado para reflejar su transaccin de retiro. 9. Finalice la transaccin. Para finalizar su sesin actual en el ATM, seleccione la opcin 4, Sal i r del men principal (figura 1.18.) El ATM saldr del sistema y mostrar un mensaje de despedida al usuario. A continuacin, la aplicacin regresar a su indicador original, pi diendo el nmero de cuenta del siguiente usuario. 10. Salga de la aplicacin del ATM y cierre la ventana Smbolo del sistema. La mayora de las aplicaciones cuentan con una opcin para salir y regresar al directorio del Smbolo del sistema desde el cual se ejecut la aplicacin. Un ATM real no proporciona al usuario la opcin de apagar la mquina ATM. En vez de ello, cuando el usuario ha completado todas las transac ciones deseadas y elige la opcin del men para salir, el ATM se reinicia y muestra un indica dor para el nmero de cuenta del siguiente usuario. Como se muestra en la figura 1.18, la www.FreeLibros.me 62. 26Captulo IIntroduccin a las computadoras y a JavaAdministrator Command Prompt - java ATMCaseStudy E n te r a c h o ic e : 1 B a la n c e In fo rm a tio n : A v a ila b le b a la n c e : $ 90 0.0 0 T o t a l b a la n c e :$1,100.00Confirmacin de la informacin actualizada del saldo de la cuenta despus de la transaccin de retiro.Main men: 1 - V iew my b a la n ce 2 - W ithdraw cash 3 - D e p o sit funds 4 - E x it E n te r a c h o ic e :Fig. 1.17 | Verificacin del nuevo saldo.GSJ Administrator Command Prompt - java ATMCaseStudy Enter a c h o ic e : 4 I xl I xitin g th e s y s t e m ... tank you l Goodbye!Mensiav Welcoael Itelco n * to Java ^rograamlngl, C :trxaple*(.t 02f ig02_01>El programa imprime en la pantalla Bienvenido a l a programacin en la va!Fig. 2.2 | Ejecucin de B ie n v e n id o l desde el Smbolo del sistemawww.FreeLibros.meUsted escribe este comando para ejecutar la aplicacin 80. 44Captulo 2Introduccin a las aplicaciones en JavaTip para prevenir errores 2.7Altratarde ejecutar unprograma enJava, si recibe un mensaje como E x c e p ti on i n threa d main " ja v a . 7ang. NoClas sD efFou n dError: B i enven i d o l , quiere decirque su variable de entorno CLASSPATH no est configurada de manera correcta. Consulte con cuidado las instrucciones de instalacin en la seccin Antes de empezar este libro. En algunos sistemas, tal vez necesite reiniciar su equipo o abrir una nueva ventana de comandospara que estos ajustes tengan efecto. 2.3 Modificacin de nuestro primer programa en Java En esta seccin modificaremos el ejemplo de la figura 2.1 para imprimir texto en una lnea mediante el uso de varias instrucciones,y para imprimir texto en varias lneas mediante una sola instruccin. Cmo mostrar una sola lnea de texto con varias instrucciones Es posible mostrar la lnea de texto B ie n v e n id o a l a program acin en Ja v a ! de varias formas. La clase B ie n v e n i do2, que se muestra en la figura 2.3, utiliza dos instrucciones (lneas 9 y 10) para producir el resultado que se muestra en la figura 2.1. [Nota: de aqu en adelante, resaltaremos las caractersticas nuevas y las caractersticas clave en cada listado de cdigo, como se muestra en las lneas 9 y 10 de este programa]. 1/ / F i g - 2 . 3 : B ie n ve n id o 2 .ja v a2/ / Im p rim ir una lin e a de te x to con v a r ia s in s tr u c c io n e s .4p u b lic c la s s Bienvenido25{3 6/ / e l mtodo main empieza la e je cu ci n7p u b lic s t a t ic vo id m ain( S t r in g []8 9 10 1112{de la a p lic a c i n en Javaargs )S y s te m .o u t.p rin t( Bienvenido a ) ; S y s te m .o u t.p rin tln C l a programacin en J a v a ! ) ; } / / f i n del mtodo main } / / f in de la c la s e Bienvenido2B ie n v e n id o a l a program acin en Ja v a !Fig. 2.3 | Impresin de una lnea de texto con varias instrucciones.El programa es similar al de la figura 2.1, por lo que aqu slo hablaremos de los cambios. La lnea 2 / / Im p rim ir una lin e a de te x to con v a r ia s in s tru c c io n e s .es un comentario de fin de lnea que describe el propsito de este programa. La lnea 4 comienza la declaracin de la clase Bi enveni do2. Las lneas 9 y 10 del mtodo mai n S y s t e m .o u t .p r in t ( Bienvenido a " ) ; S y s t e m .o u t .p r in t ln C l a programacin en J a v a ! ) ;muestran una lnea de texto. La primera instruccin utiliza el mtodo p r i n t de S ystem , o u t para mos trar una cadena. Cada instruccin p r i n t o p r i n t l n contina mostrando caracteres a partir de donde la ltima instruccin p r in t o p r i n t l n dej demostrarlos. A diferencia de p r i n t l n, despus de mostrar su argumento, p r in t oposiciona el cursor de salida al inicio de la siguiente lnea en la ventana de coman dos; el siguiente carcter que muestra el programa en la ventana de comandos aparecerjusto despus del ltimo carcter que muestre p r i n t. Por lo tanto, la lnea 10 coloca el primer carcter de su argumento www.FreeLibros.me 81. 2.3Modificacin de nuestro primer programa en Java45(la letra 1) inmediatamente despus del ltimo carcter que muestra la lnea 9 (el carcter de espacio antes del carcter de comilladoble de cierre de la cadena). Cmo mostrar varias lineas de texto con una sola instruccin Una sola instruccin puede mostrar varias lneas mediante el uso de los caracteres de nueva lnea, los cuales indican a los mtodos p rin t y p rin tln de System.out cundo deben colocar el cursor de salida al inicio de la siguiente lnea en la ventana de comandos. Al igual que las lneas en blanco, los espacios y los tabuladores, los caracteres de nueva lnea son caracteres de espacio en blanco. El pro grama de la figura 2.4 muestra cuatro lneas de texto mediante el uso de caracteres de nueva lnea para determinar cundo empezar cada nueva lnea. La mayor parte del programa es idntico a los de las figuras 2.1 y 2.3. 1 / / F i g . 2 . 4 : B ie n ve n id o 3 .ja v a 2 / / Im p rim ir v a r ia s lin e a s de te x to con una so la in s t r u c c i n . 34p u b lic c l a s s B ie n ve n id o 35{6/ / e l mtodo main empieza la eje cu ci n de la a p lic a c i n en la v a7p u b lic s t a t i c v o id m a in ( S t r i n g [ ]8 910 11{a rg s )S y s t e m .o u t .p r in t ln C "B ie n ve n id o n a n la programacionnen l a v a ! ) ;} / / f i n del mtodo main } / / f in de la c la s e Bienvenido3B ie n ve n id o a la program acin en Ja v a !Fig. 2.4 | Impresin de varias lneas de texto con una sola instruccin.La lnea 2 / / Im p rim ir v a r ia s lin e a s de te x to con una s o la in s t r u c c i n .es un comentario que describe el propsito de este programa. La lnea 4 comienza la declaracin de la clase B ie n ve n id o 3 . La lnea 9 S y s t e m .o u t .p r in t ln C B ien ve n id o n an la programacionnen J a v a ! ) ;muestra cuatro lneas separadas de texto en la ventana de comandos. Por lo general, los caracteres en una cadena se muestran justo como aparecen en las comillas dobles. S in embargo, observe que los dos carac teresy n (que se repiten tres veces en la instruccin) no aparecen en la pantalla. La barra diagonal in versa () se conoce como carcter de escape, el cual tiene un significado especial para los mtodos p r i n t y p r i n t l n de S yste m . o u t. Cuando aparece una barra diagonal inversa en una cadena de caracteres, Java oombina el siguiente carcter con la barra diagonal inversa para formar una secuencia de escape. La se cuencia de escape n representa el carcter de nueva lnea. Cuando aparece un carcter de nueva lnea en una cadena que se va a imprimir con S yste m . o u t, el carcter de nueva lnea hace que el cursor de salida de la pantalla se desplace al inicio de la siguiente lnea en la ventana de comandos. En la figura 2.5 se enumeran varias secuencias de escape comunes, con descripciones de cmo afectan la manera de mostrar caracteres en la ventana de comandos. Para obtener una lista completa de secuen cias de escape, visite j a v a . su n . com/docs/books/j 1 s/th i rd_editi on/html/1 e x ic a l . html# 3 .1 0 .6 . www.FreeLibros.me 82. 46Captulo 2Introduccin a las aplicaciones en JavaSecuencia de escapeDescripcinn t r Nueva lnea. Coloca el cursor de la pantalla al inicio de la siguiente lnea. Tabulador horizontal. Desplaza el cursor de la pantalla hasta la siguiente posicin de tabulacin. Retomo de carro. Coloca el cursor de la pantalla al inicio de la lnea actual; avanza a la siguiente lnea. Cualquier carcter que se imprima despus del retomo de carro sobrescribe bs caracteres previamente impresos en esa lnea. Barra diagonal inversa. Se usa para imprimir un carcter de barra diagonal inversa. Doble comilla. Se usa para imprimir un carcter de doble comilla. Por ejemplo, System, out. pri ntl n( entre comillas ); displays entre comi lias".Fig. 2 .5 | Algunas secuencias de escape comunes.2.4 Cmo mostrar texto con p ri n t f El mtodo System .out .pri n tf (f significa formato) muestra datos con formato. La figura 2.6 usa este mtodo para mostrar las cadenas Bienvenido a y l a programacin en J a v a ! . Las lneas 9 y 10 S y s te m .o u t .p r in t f( %sn%sn , Bienvenido a , l a programacin en J a v a ! ) ;llaman al mtodo System .o u t . p ri n t f para mostrar la salida del programa. La llamada al mtodo espe cifica tres argumentos. Cuando un mtodo requiere varios argumentos, stos se colocan en una lista separada por comas. Buena prctica de programacin 2.6Coloque un espacio despus de cada coma (,) en una lista de argumentos para que sus programas sean ms legibles. 1/ / F i g . 2 . 6 : B ie n ve n id o 4 .ja v a2/ / Im p rim ir v a r ia s lin e a s con el mtodo S y s te m .o u t .p r in t f.3 4p u b lic c la s s Bienvenido45 6{789 10 11 12/ / e l mtodo main empieza la e je cu ci nde la a p lic a c i n de Javap u b lic s t a t i c vo id m ain( S t r in g [] args ){S y s te m .o u t .p r in t f( %sn%sn"t Bienvenido a " , l a programacin en J a v a !" ) ; } / / f i n del mtodo main } / / f in de la c la s e Bienvenido4Bienvenido a la programacin en Java!Fig. 2 .6 | Imprimir varias lneas de texto con el mtodo System, o u t. p ri n t f.www.FreeLibros.me 83. 2.5Otra aplicacin en Java: suma de enteros47Las lneas 9 y 10 representan slo una instruccin. Java permite dividir instrucciones extensas en varias lneas. Aplicamos sangra a la lnea 10 para indicar que es la continuacin de la lnea 9. Error comn de programacin 2.4Dividir una instruccin a la mitad de un identificador o de una cadena es un error de sintaxis.El primer argumento del mtodo p ri n t f es una cadena de formato que puede consistir en texto fijo y especificadores de formato, este mtodo imprime el texto fijo de igual forma que p ri n t o p ri n tl n. Cada especificador de formato es un receptculo para un valor, y especifica el tipo de datos a imprimir. Los especificadores de formato tambin pueden incluir informacin de formato opcional. Empiezan con un signo porcentual (%) y van seguidos de un carcter que representa el tipo de datos. Por ejemplo, el especificador de formato %s es un receptculo para una cadena. La cadena de for mato en la lnea 9 especifica que p ri n t f debe imprimir dos cadenas, y que a cada una de ellas le debe se guir un carcter de nueva lnea. En la posicin del primer especificador de formato, p ri n t f sustituye el valor del primer argumento despus de la cadena de formato. En cada posicin posterior del especificador de formato, p ri n t f sustituye el valor del siguiente argumento. As, este ejemplo sustituye Bienvenido a por el primer %s y la programacin en J a v a ! por el segundo %s. La salida muestra que se desplie gan dos lneas de texto en pantalla. En nuestros ejemplos presentaremos las diversas caractersticas de formato a medida que se vayan necesitando. El apndice G presenta los detalles de cmo dar formato a la salida con pri ntf. 2.5 Otra aplicacin en Java: suma de enteros Nuestra siguiente aplicacin lee (o recibe como entrada) dos enteros (nmeros completos, como 22, 7, 0 y 1024) que el usuario introduce mediante el teclado, despus calcula la suma de los valores y mues tra el resultado. Este programa debe llevar la cuenta de los nmeros que suministra el usuario para los clculos que el programa realiza posteriormente. Los programas recuerdan nmeros y otros datos en la memoria de la computadora, y acceden a ellos a travs de unos elementos conocidos como variables. El programa de la figura 2.7 demuestra estos conceptos. En la salida de ejemplo, usamos texto en negritas para identificar la entrada del usuario (por ejemplo, 45 y 72). 1 / / F i g . 2 . 7 : Sum a.java 2 / / Programa que muestra la suma de dos nmeros. 3im p o rt j a v a . t i l . S c a n n e r; / / el programa usa l a c la s e Scanner5p u b lic c l a s s Suma46 { 7/ / el mtodo main empieza la e je cu ci n de la a p lic a c i n en Java8p u b lic s t a t i c vo id m ain( S t r in g [ ] args )9{10 11/ / crea o b jeto Scanner para obtener la entrad a de l a ventana de comandos Scanner entrada = new ScannerC System .in ) ;12 13in t num erol; / / prim er nmero a sumar14in t numero2; / / segundo nmero a sumar15in t suma; / / suma de numerol y numero216Fig. 2 .7 | Programa que muestra la suma de dos nmeros (parte I de 2).www.FreeLibros.me 84. 48Captulo 2Introduccin a las aplicaciones en Java17S y ste m .o u t.p rin tC E s c rib a el prim er e n te ro : " ) ; / / in d ica d o r18numerol = e n t r a d a .n e x t ln t O ; / / le e elprim er nmero del u su ario19 20S y ste m .o u t.p rin tC E s c rib a el segundo e n te ro : ) ; / / in d ica d o r21numero2 = e n t r a d a .n e x t ln t O ; / / le e el23suma = numerol + numero2; / / suma lo s nmeros, despus almacena el t o t a l en sumasegundo nmero del u su ario22 24 25System .out .p r i n t f ( La suma es %dn , suma ) ; / / m uestra l a suma26 27} / / f i n del mtodo main } / / f in de la c la s e SumaE s c rib a el prim er e n te ro : 45 E s c rib a e l segundo en te ro : 72 La suma es 117Fig. 2 .7| Programa que muestra la suma de dos nmeros (parte 2 de 2).Declaraciones import Las lneas 1 y 2 / / F ig . 2 . 7 : Sum a.java / / Programa que muestra l a suma de dos nmeros.indican el nmero de la figura, el nombre del archivo y el propsito del programa. Una gran fortaleza de Java es su extenso conjunto de clases predefinidas que podemos reutilizar, en vez de reinventar la rueda. Estas clases se agrupan en paquetes (grupos con nombre de clases rela cionadas) y se conocen en conjunto como la biblioteca de clases de Java, o Interfaz de programacin de aplicaciones de Java (API de Java). La lnea 3 im p o rt j a v a . t i l . S c a n n e r ; / / e l programa usa l a c la s e Scanneres una declaracin import que ayuda al compilador a localizar una clase que se utiliza en este programa. Indica que este ejemplo utiliza la clase S can n e r predefinida de Java (que veremos en breve) del paquete ja v a . til. Error comn de programacin 2.5Todas las declaraciones import deben aparecer antes de la declaracin de la primera clase en el archivo. Colocar una declaracin import dentro del cuerpo de la declaracin de una clase, o despus de sta, es un error de sintaxis. Tip para prevenir errores 2.8Por lo general si olvida incluir una declaracin import para una clase que utilice en su programa, seproduce un errorde compilacin que contiene un mensaje como acannot find symbol Cuando esto ocurra, verifique que hayaproporcionado las declaraciones import apropiadasy que los nombres en bis mismas estn escritos enforma correcta, que se hayan usado las letras maysculasy minsculas como sedebe. Declaracin de la clase Suma La lnea 5 p u b lic c la s s Sumawww.FreeLibros.me 85. 15Otra aplicacin en Java: suma de enteros49empieza la declaracin de laclase Suma. El nombre de archivo para esta clase publ i c debe ser Suma .java. Recuerde que el cuerpo de cada declaracin de clase empieza con una llave izquierda de apertura (lnea 6) y termina con una llave derecha de cierre (lnea 27). La aplicacin empieza a ejecutarse con el mtodo mai n (lneas 8 a la 26). La llave izquierda (lnea 9) marca el inicio del cuerpo de mai n, y la correspondiente llave derecha (lnea 26) marca su final. Observe que al mtodo mai n se le aplica un nivel de sangra en el cuerpo de la clase Suma, y que al cdigo en el cuerpo de mai n se le aplica otro nivel para mejorar la legibilidad. Declaracin y creacin de un objeto Scanner para obtener la entrada del usuario mediante el teclado Una variable es una ubicacin en la memoria de la computadora, en donde se puede guardar un valor para utilizarlo despus en un programa. Todas las variables deben declararse con un nom bre y un tipo antes de poder usarse. El nombre de sta, que puede ser cualquier identificador vlido, permite al pro grama acceder al valor de la variable en memoria. El tipo de una variable especifica la clase de informa cin que se guarda en esa ubicacin de memoria. Al igual que las dems instrucciones, las instrucciones de declaracin terminan con punto y coma (;). La lnea 11 Scanner entrada = new Scanner( S y ste m .in ) ;es una instruccin de declaracin de variable que especifica el nombre (entrada) y tipo (Scanner) de una variable que se utiliza en este programa. Un objeto Scanner permite a un programa leer datos (por ejemplo: nmeros y cadenas) para usarlos en un programa. Los datos pueden provenir de muchas fuentes, como un archivo en disco o desde el teclado de un usuario. Antes de usar un objeto Scanner, hay que crearlo y especificar el origen de la informacin. El signo = en la lnea 11 indica que es necesario inidalizar la variable entrada tipo Scanner (es decir, hay que prepararla para usarla en el programa) en su declaracin con el resultado de la expresin a la derecha del signo igual: new S c a n n e r(S y ste m .in ). Esta expresin usa la palabra clave new para crear un objeto Scanner que lee los datos escritos por el usuario mediante el teclado. El objeto de entrada estndar, System .in, permite a las aplicaciones de Java leer la informacin escrita por el usuario. El objeto Scanner traduce estos bytes en tipos (como i nt) que se pueden usar en un programa. Declaracin de variables para almacenar enteros Las instrucciones de declaracin de variables en las lneas 13 a la 15 in t numerol; / / p rim e r nmero a sumar in t numero2; / / segundo nmero a sumar in t suma; / / suma de num erol y numero2declaran que las variables numerol, numero2 y suma contienen datos de tipo int; estas variables pueden oontener valores enteros (nmeros completos, como 72, -1127 y 0). Estas variables no se han inicializado todava. El rango de valores para un in t es de -2,147,483,648 a +2,147,483,647 nota: bs valores in t reales tal vez no contengan comas]. Hay otros tipos de datos como f lo a t y doubl e, para guardar nmeros reales, y el tipo c h a r , para guardar datos de caracteres. Los nmeros reales son nmeros que contienen puntos decimales, como 3.4, 0 .0 y -1 1 .1 9 . Las variables de tipo char representan caracteres individuales, como una letra en mayscu la (A), un dgito (7 ), un carcter especial (* o %) o una secuencia de escape (como el carcter de nueva lnea, n ). Los tipos tales como i n t , f lo a t , doubl e y char se conocen como tipos p rim itivo s. Los nom bres de los tipos primitivos son palabras clave y deben aparecer completamente en minsculas. El apn dice D sintetiza las caractersticas de los ocho tipos primitivos (boolean, b yte, ch ar, sh o rt, in t , long, f lo a t y double). www.FreeLibros.me 86. 50Captulo 2Introduccin a las aplicaciones en JavaEs posible declarar varias variables del mismo tipo en una sola declaracin, en donde los nombres de las variables se separan por comas (es decir, una lista de nombres de variables separados por comas). Por ejemplo, las lneas 13 a la 15 se pueden escribir tambin as: in t numerol, / / p rim e r nmero a sumar numero2, / / segundo nmero a sumar suma; / / suma de num erol y numero2Buena prctica de programacin 2.7Declare cada variable en una linea separada. Esteformato permite insertar un comentario descriptivo en seguida de cada declaracin. Buena prctica de programacin 2.8Seleccionar nombresde variables significativos ayuda a que un programa seautodocumente (es decir, que sea msfcil entender elprograma con slo leerlo, en lugar de leer manuales o ver un nmero excesivo de comentarios). Buena prctica de programacin 2.9Por convencin, los identificadores de nombre de variables empiezan con una letra minscula, y cada una de laspalabras en el nombre, que van despus de laprimera, deben empezar con una mayscula. Por ejemplo, el identificador primerNumero tiene una N mayscula en su segundapalabra. Numero. Cmo pedir la entrada al usuario La lnea 17 S y ste m .o u t.p rin tC " E s c r ib a e l p rim e r e n te ro : " ) ; / / in d ic a d o rutiliza System, o u t. p r in t para mostrar el mensaje E s c rib a el p rim er e n te ro : . Este mensaje se co noce como indicador, ya que indica al usuario que debe realizar una accin especfica. En este ejemplo utilizamos el mtodo p ri nt en vez de p ri n tl n para que la entrada del usuario aparezca en la misma lnea que la del indicador. En la seccin 2.2 vimos que, por lo general, los identificadores que empiezan con letras maysculas representan nombres de clases. Por lo tanto, System es una clase. La clase System forma parte del paquete ja v a . lang. Cabe mencionar que la clase System no se importa con una declaracin im port al principio del programa. Observacin de ingeniera de software 2. iEl paquete java, lang se importa de manera predeterminada en todos los programas de Java,;por ende, las clases en java, lang son los nicas en la API de Java que no requieren una declaracin import. Cmo obtener un valor in t como entrada del usuario La lnea 18 numerol = e n t r a d a .n e x t ln t O ; / / le e e l p rim e r nmero d e l u s u a r ioutiliza el mtodo n e x t ln t del objeto entrad a de la clase Scanner para obtener un entero del usuario mediante el teclado. En este punto, el programa espera a que el usuario escriba el nmero y oprima Intro para enviar el nmero al programa. Nuestro programa asume que el usuario escribir un valor de entero vlido. De no ser as, se produ cir un error lgico en tiempo de ejecucin y el programa terminar. El captulo 11, Manejo de excepcio nes: un anlisis ms detallado, habla sobre cmo hacer sus programas ms robustos al permitirles manejar dichos errores. Esto tambin se conoce como hacer que su programa sea tolerante a fallas. www.FreeLibros.me 87. 2.5Otra aplicacin en Java: suma de enteros51En la lnea 18, colocamos el resultado de la llamada al mtodo n ex tln t (un valor i nt) en la variable nume rol mediante el uso del operador de asignacin, La instruccin se lee como numerolobtiene el * . valor de entrada. nex tlnt (). Al operador = se le llama operador binario, yaque tiene dos operandos: nume rol y el resultado de la llamada al mtodo entrada. nextlntO . Esta instruccin se llama instruccin de asignacin, ya que asigna un valor a una variable. Todo lo que est a la derecha del operador de asigna cin (=) se evala siempre antes de realizar la asignacin. Buena prctica de programacin 2.10Al colocar espacios en cualquier lado de un operador binario, mejora la legibilidad del programa. Cmo pedir e introducir un segundo in t La lnea 20 S y ste m .o u t.p rin tC E s c r ib a e l segundo e n te ro : ) ; / / in d ic a d o rpide al usuario que escriba el segundo entero. La lnea 21 numero2 = en tra d a . n e x t ln t O ; / / le e e l segundo nmero d e l u s u a r iolee el segundo entero y lo asigna a la variable numero2. Uso de variables en un clculo La lnea 23 suma = numerol + numero2; / / suma lo s nmeros, despus alm acena e l t o t a l en sumaes una instruccin de asignacin que calcula la suma de las variables n ume r o l y numero2, y asigna el re sultado a la variable suma mediante el uso del operador de asignacin, =. La instruccin se lee como suma obtiene e1valor de numerol + numero2 . En general, los clculos se realizan en instrucciones de asigna cin. Cuando el programa encuntrala operacin de suma, utiliza los valores almacenados en las varia bles numerol y numero2 para realizar el clculo. En la instruccin anterior, el operador de suma es un operador binaria, sus dos operandos son las variables n ume r o l y numero2. Las partes de las instrucciones que contienen clculos se llaman expresiones. De hecho, una expresin es cualquier parte de una ins truccin que tiene un valor asociado. Por ejemplo, el valor de la expresin numerol + numero2 es zsuma de los nmeros. De manera similar, el valor de la expresin e n tra d a . n e x t ln t O es el entero escrito por el usuario. Cmo mostrar el resultado del clculo Una vez realizado el clculo, la lnea 25 S y s te m .o u t .p r in t f( L a suma e s %dn , suma ) ; / / m u e stra l a sumautiliza el mtodo System .o u t . p ri n t f para mostrar la suma. El especificador de formato %d es un recep tculo para un valor i nt (en este caso, el valor de suma); la letra d se refiere a entero decimal. El resto de los caracteres en la cadena de formato son texto fijo. Por lo tanto, el mtodo p ri n t f imprime en pantalla La suma e s , seguido del valor de s urna (en la posicin del especificador deformato %d) y una nueva lnea. Tambin es posible realizar clculos dentro de instrucciones p r i n t f. Podramos haber combinado las instrucciones de las lneas 23 y 25 en la siguiente instruccin: S y s t e m .o u t .p r in t f ( " L a suma e s%dn ,( num erol + numero2 ) ) ;www.FreeLibros.me 88. 52Captulo 2Introduccin a las aplicaciones en JavaLos parntesis alrededor de la expresin num erol + numero2 no son requeridos; se incluyen para enfatizar que el valor de toda la expresin se imprime en la posicin del especificador de formato %d. Documentacin de la API de Java Para cada nueva clase de la API de Java que utilicemos, hay que indicar el paquete en el que se ubica. Esta informacin nos ayuda a localizar las descripciones de cada paquete y clase en la documentacin de la API de Java. Puede encontrar una versin basada en Web de esta documentacin en d o w n lo ad .o racle . com/j avase/6/docs/ a p i/Tambin puede descargar esta documentacin de w w w .oracle. com/techn etwo r k / j a v a /j avase/dow nloads/i ndex. htmlEl apndice E muestra cmo utilizar esta documentacin. 2.6 Conceptos acerca de la memoria Los nombres de variables como num erol, numero2 y suma en realidad corresponden a ciertas ubicaciones en la memoria de la computadora. Toda variable tiene un nombre, un tipo, un tamao (en bytes) y un valor. En el programa de suma de la figura 2.7, cuando se ejecuta la instruccin (lnea 18): num erol = e n t r a d a .n e x t ln t O ; / / le e e l p rim e r nmero d e l u s u a r ioel nmero escrito por el usuario se coloca en una ubicacin de memoria que corresponde al nombre numerol. Suponga que el usuario escribe 45. La computadora coloca ese valor entero en la ubica cin num erol (figura 2.8) y sustituye al valor anterior en esa ubicacin (si haba uno). El valor anterior se pierde. numerol Fig. 2 .8|45Ubicacin de memoria que muestra el nombre y el valor de la variablenumerol.Cuando se ejecuta la instruccin (lnea 21) numero2 = e n t r a d a . n e x t l n t O ; / /le e e l segundo nmero d e l u s u a riosuponga que el usuario escribe 72. La computadora coloca ese valor entero en la ubicacin numero2. La memoria ahora aparece como se muestra en la figura 2.9. numerol45numero272Fig. 2 .9 | Ubicaciones de memoria, despus de almacenar valores para numerol y numero2.Una vez que el programa de la figura 2.7 obtiene valores para nume r o l y numero2, los suma y coloca el total en la variable suma. La instruccin (lnea 23) www.FreeLibros.me 89. 2.7suma = numerol + numero2; / /Aritmtica53suma lo s nmeros, despus alm acena e l t o t a l en sumarealiza la suma y despus sustituye el valor anterior de suma. Una vez que se calcula suma, la memoria aparece como se muestra en la figura 2.10. Observe que los valores de n umerol y nume ro2 aparecen exac tamente como antes de usarlos en el clculo de suma. Estos valores se utilizaron, pero no se destruyeron, cuando la computadora realiz el clculo. Por ende, cuando se lee un valor de una ubicacin de memoria, el proceso es no destructivo.numerol45numero272suma117Fig. 2 .1 0 | Ubicaciones de memoria, despus de almacenar la suma de numerol y numero2.2.7 Aritmtica La mayora de los programas realizan clculos aritmticos. Los operadores aritm ticos se sintetizan en la figura 2.11. Observe el uso de varios smbolos especiales que no se utilizan en lgebra. El asteris co (*) indica la multiplicacin, y el signo de porcentaje (%) es el operador residuo, el cual descri biremos en breve. Los operadores aritmticos en la figura 2.11 son operadores binarios, ya que fun cionan con ios operandos. Por ejemplo, la expresin f + 7 contiene el operador binario + y los dos operandos f y 7. Operacin en JavaOperadorExpresin algebraicaExpresin en JavaSuma Resta Multiplicac