Como programar java 9ED, OCR completo cap 1-19 (merged)

  • Published on
    13-Nov-2014

  • View
    3.992

  • Download
    0

DESCRIPTION

Soporta bsqueda de texto , Libro de buena calidad y lo ms completo posible , tambin consta de informacin organizada por captulos en las pestaas de bsquedas

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: hiis.cruz@pearson.com 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 Multiplicacin+ *MDivisin/x ly o o x 'lyx / yResiduo%rm od sr %sf +7 p -c b *mp -c brnyFig. 2.11 | Operadores aritmticos.La divisin de enteros produce un cociente entero. Por ejemplo, la expresin 7 / 4 da como resul tado 1, y la expresin 17 / 5 da como resultado 3 . Cualquier parte fraccionaria en una divisin de enteros simplemente se eiescarta (se trunca); no ocurre un redondeo. Java proporciona el operador residuo, %, el cual produce el residuo despus de la divisin. La expresin x %y produce el residuo despus de que x se divide entre y. Por lo tanto, 7 % 4 produce 3, y 17 % 5 produce 2. Este operador se utiliza ms comn mente con operandos enteros, pero tambin puede usarse con otros tipos aritmticos. En los ejercicios de este captulo y de captulos posteriores, consideramos muchas aplicaciones interesantes del operador re siduo, como determinar si un nmero es mltiplo de otro. www.FreeLibros.me 90. 54Captulo 2Introduccin a las aplicaciones en JavaExpresiones aritmticas en formato de lnea recta Las expresiones aritmticas en Java deben escribirse en formato de lnea recta para facilitar la escritura de programas en la computadora. Por lo tanto, las expresiones como a dividida entre b deben escri birse como a/b, de manera que todas las constantes, variables y operadores aparezcan en una lnea recta. La siguiente notacin algebraica por lo general no es aceptable para los compiladores: a J Parntesispara agrupar subexpresiones Los parntesis se utilizan para agrupar trminos en las expresiones en Java, de la misma manera que en las expresiones algebraicas. Por ejemplo, para multiplicar a por la cantidad b + c, escribimos a* ( b+c ) Si una expresin contiene parntesis anidados, como ( ( a+b) *c ) se evala primero la expresin en el conjunto ms interno de parntesis (a + b en este caso). Reglas de precedencia de operadores Java aplica los operadores en expresiones aritmticas en una secuencia precisa, determinada por las si guientes reglas de precedencia de operadores, que casi siempre son las mismas que las que se utilizan en lgebra: 1. Las operaciones de multiplicacin, divisin y residuo se aplican primero. Si una expresin con tiene varias de esas operaciones, los operadores se aplican de izquierda a derecha. Los operadores de multiplicacin, divisin y residuo tienen el mismo nivel de precedencia. 2. Las operaciones de suma y resta se aplican a continuacin. Si una expresin contiene varias de esas operaciones, los operadores se aplican de izquierda a derecha. Los operadores de suma y resta tienen el mismo nivel de precedencia. Estas reglas permiten a Java aplicar los operadores en el orden correcto.1 Cuando decimos que los operadores se aplican de izquierda a derecha, nos referimos a su asociatividad. Algunos se asocian de derecha a izquierda. La figura 2.12 sintetiza estas reglas de precedencia de operadores. En el apndice A se presenta una tabla de precedencias completa. Operador(es)Operacin (es)Orden de evaluacin (precedencia)* / % + =Multiplicacin Divisin Residuo Suma Resta AsignacinSe evalan primero. Si hay varios operadores de este tipo, se evalan de izquierda a derecha. Se evalan despus. Si hay varios operadores de este tipo, se evalan de izquierda a derecha. Se evala al ltimo.Fig. 2.12 | Precedencia de los operadores aritmticos. 1 Utilizamos ejemplos simples para explicar el orden de evaluacin de las expresiones. Se producen ligeros errores en las ex presiones ms complejas que veremos ms adelante en el libro. Para obtener ms informacin sobre el orden de evaluacin, vea el captulo 15 de ThejavzLanguageSpecification (java .sun. com/docs/books/jls/). www.FreeLibros.me 91. 2.7Aritmtica55Ejemplos de expresiones algebraicas y de java Ahora consideremos varias expresiones en vista de las reglas de precedencia de operadores. Cada ejem plo enlista una expresin algebraica y su equivalente en Java. El siguiente es un ejemplo de una media (promedio) aritmtica de cinco trminos: a+b+c+d+elgebra: Java:m= (a + b + c + d+ e ) / 5 ;Los parntesis son obligatorios, ya que la divisin tiene una mayor precedencia que la suma. La cantidad completa (a + b + c + d + e) va a dividirse entre 5. Si por error se omiten los parntesis, obtenemos a + b + c + d + e / 5, lo cual da como resultado a + b + c+d + y E1 siguiente es un ejemplo de una ecuacin de lnea recta: Algebra: y = tnx + b Java: y = m * x + b; No se requieren parntesis. El operador de multiplicacin se aplica primero, ya que la multiplicacin tiene mayor precedencia sobre la suma. La asignacin ocurre al ltimo, ya que tiene menor precedencia que la multiplicacin o suma. El siguiente ejemplo contiene las operaciones residuo (%), multiplicacin, divisin, suma y resta: Algebra: Java:z = pr%q + w/x - y z = p * r X q + w / x - y; 612435Los nmeros dentro de los crculos bajo la instruccin indican el orden en el que Java aplica los opera dores. Las operaciones *, %y / se evalan primero, en orden de izquierda a derecha (es decir, se asocian de izquierda a derecha), ya que tienen mayor precedencia que + y -. Las operaciones + y - se evalan a continuacin. Estas operaciones tambin se aplican de izquierda a derecha. El operador de asignacin (=) se evala al ltimo. Evaluacin de un polinomio de segundo grado Para desarrollar una mejor comprensin de las reglas de precedencia de operadores, considere la evalua cin de una expresin de asignacin que incluye un polinomio de segundo grado ax1 + bx + c. y = a * x * x 612+ b * x + c ; 435Las operaciones de multiplicacin se evalan primero en orden de izquierda a derecha (es decir, se asocian de izquierda a derecha), ya que tienen mayor precedencia que la suma (como Java no tiene operador aritmtico para la exponenciacin, x2 se representa como x * x. La seccin 5.4 muestra una alternativa para realizar la exponenciacin). A continuacin se evalan las operaciones de suma, de izquierda a dere cha. Suponga que a, b, c y x se inicializan (reciben valores) como sigue: a = 2 , b = 3, c = 7 y x = 5. La figura 2.13 muestra el orden en el que se aplican los operadores. www.FreeLibros.me 92. 56Captulo 2Introduccin a las aplicaciones en Javaftjso /.y = 2*5*5 + 3*5 + 7;(Multiplicacin de ms a la izquierda)2 * 5 es 10 1 10 * 5 + 3 * 5 + 10 * 5 es 50 1 * 50 + 3 * 5 + 7;(Multiplicacin antes de la suma)3 * 5 es 15 1r50 + 15 + 7 ;(Suma de ms ala izquierda)50 + 15 es 65 1*65 + 7;(ltima suma)65 + 7 es 72 1foso 6.f(ltima operacin: colocar 7 2 en y)y = 72Fig. 2.13 | Orden en el cual se evala un polinomio de segundo grado. Podemos usar parntesis redundantes (parntesis innecesarios) para hacer que una expresin sea ms clara. Por ejemplo, la instruccin de asignacin anterior podra colocarse entre parntesis, de la siguiente manera: y = ( a * x * x ) + ( b * x ) + c; 2.8 Toma de decisiones: operadores de igualdad y relacinales Una condicin es una expresin que puede ser verdadera (true) o falsa (f al se). Esta seccin pre senta la instruccin i f de Java, la cual permite que un programa tome una decisin, con base en el valor de una condicin. Por ejemplo, la condicin calificacin es mayor o igual que 60 determina si un estudiante pas o no una prueba. Si la condicin en una instruccin i f es verdadera, el cuerpo de la instruccin i f se ejecuta. Si la condicin es falsa, el cuerpo no se ejecuta. Veremos un ejemplo en breve. Las condiciones en las instrucciones i f pueden formarse utilizando los operadores de igualdad (== y !=) y los operadores relacinales (>, = y < Toma de decisiones: operadores de igualdad y relacinalesOperador de igualdad o relacional de JavaEjemplo de condicin Significado de la condicin en Java en Java8S !=x= y x ! yx es igual que y x no es igual que y> < >= y = y = %dn , numerol, numero2 ) ;39 40 41} / / f i n del mtodo main } / / f i n de l a c la s e ComparacinE s c rib a el prim er e n te ro : 777 E s c rib a e l segundo en te ro : 777 777 = 777 777 = 777 E s c rib a el prim er e n te ro : 1000 E s c rib a el segundo en te ro : 2000 1000 1= 2000 1000 = 1000Fig. 2.15f| Comparacin de enteros mediante instrucciones i , operadores de igualdad y relacinales (parte 2 de 2).La declaracin de la clase Comparad on comienza en la lnea 6 p u b lic c la s s ComparacinEl mtodo mai n de la clase (lneas 9 a 40) empieza la ejecucin del programa. La lnea 12 Scanner entrada = new Scan ner( S y ste m .in ) ;declara la variable entrada de la clase Scanner y le asigna un objeto Scanner que recibe datos de la en trada estndar (es decir, el teclado). Las lneas 14 y 15 in t numerol; / / p rim e r nmero a comparar in t numero2; / / segundo nmero a comparardeclaran las variables i nt que se utilizan para almacenar los valores introducidos por el usuario. Las lneas 17-18 S y s t e m .o u t .p r in t C E s c r ib a e l p rim e r e n te ro : ) ; / / in d ic a d o r 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 iopiden al usuario que introduzca el primer entero y el valor, respectivamente. El valor de entrada se alma cena en la variable numerol. www.FreeLibros.me 95. 2.8Toma de decisiones: operadores de igualdad y relacinales59Las lneas 20-21 S y s t e m .o u t .p r in t C E s c r ib a e l segundo e n te ro : ) ; / / in d ic a d o r numero2 = e n t r a d a .n e x t ln t O ; / / le e e l segundo nmero d e l u s u a r iopiden al usuario que introduzca el segundo entero y el valor, respectivamente. El valor de entrada se al macena en la variable nume ro2. Las lneas 23-24 if( numerol = numero2 ) S y s te m .o u t .p r in t f( %d = %dn , numerol, numero2 ) ;declaran una instruccin i f que compara los valores de las variables numerol y nume ro2 , para determinar si son iguales o no. Una instruccin i f siempre empieza con la palabra clave i f , seguida de una condi cin entre parntesis. Una instruccin i f espera una instruccin en su cuerpo, pero puede contener varias instrucciones si se encierran entre un conjunto de llaves ({}). La sangra de la instruccin del cuerpo que se muestra aqu no es obligatoria, pero mejora la legibilidad del programa al enfatizar que la instruccin en la lnea 24 forma parte de la instruccin i f que empieza en la lnea 23. La lnea 24 slo se ejecuta si los nmeros almacenados en las variables numerol y numero2 son iguales (es decir, si la condicin es verdadera). Las instrucciones i f en las lneas 26-27,29-30, 32-33, 35-36 y 38-39 com paran a numerol y numero2 con los operadores !=, , =, respectivamente. Si la condicin en una o ms de las instrucciones i f es verdadera, se ejecuta la instruccin del cuerpo correspondiente. Error comn de programacin 2.6Confundir el operador de igualdad (==) con elde asignacin (=) puede producir un error lgico odesintaxis. Eloperador de igualdaddebe leerse como igualquey elde asignacin es , como *'obtieneu obtiene el valor de. Para evitar confusin, algunas personas leen el operador de igualdad como igualo igual. doble igual Buena prctica de programacin 2 .1 1Al colocar slo una instruccinpor linea en un programa, mejora su legibilidad. No hay punto y coma (;) al final de la primera lnea de cada instruccin i f , ya que producira un error lgico en tiempo de ejecucin. Por ejemplo, if( numerol = numero2 ) ; / / e r r o r l g ic o S y s te m .o u t .p r in t f( %d = %dn , numerol, numero2 ) ;sera interpretada por Java de la siguiente manera: ifC numerol =numero2 ); / / in s t r u c c i n v a c aS y s te m .o u t .p r in t f( %d = 96dnMf numerol, numero2 ) ;en donde el punto y coma que aparece por s solo en una lnea (que se conoce como instruccin vaca) es la instruccin que se va a ejecutar si la condicin en la instruccin i f es verdadera. Al ejecutarse la instruccin vaca, no se lleva a cabo ninguna tarea. Despus el programa contina con la instruccin de salida, que siempre se ejecuta, sin importar que la condicin sea verdadera o falsa, ya que la instruccin de salida no forma parte de la instruccin i f . . Error comn de programacin 2.7Colocar un puntoy coma inmediatamente despus delparntesis derechode la condicin en una instruccin i fes, por lo general, un error lgico. www.FreeLibros.me 96. 60Captulo 2Introduccin a las aplicaciones en JavaObserve el uso del espacio en blanco en la figura 2.15. Recuerde que el compilador casi siempre ignora los caracteres de espacio en blanco. Por lo tanto, las instrucciones pueden dividirse en varias lneas y espaciarse de acuerdo a las preferencias del programador, sin afectar el significado de un programa. Es incorrecto dividir identificadores y cadenas. Lo ideal es que las instrucciones se mantengan lo ms reducidas posible, pero, no siempre se puede hacer esto. Tip para prevenir errores 2.9Una instruccin larga puede esparcirse en varias lineas. Si una sola instruccin debe dividirse entre varias lineas, lospuntos que elija para hacer la divisin deben tener sentido, como despusde una coma en una lista separadapor comas, odespusde un operador en una expresin larga. Si una instruccin se divide entre dos o ms Uneos, aplique sangra a todas las lineas subsecuentes hasta elfinalde la instruccin. La figura 2.16 muestra los operadores que hemos visto hasta ahora, en orden decreciente de prece dencia. Todos, con la excepcin del operador de asignacin, = , se asocian de izquierda a derecha. El ope rador de asignacin, =, asocia de derecha a izquierda, por lo que una expresin como x = y = 0 se evala como si se hubiera escrito as: x = (y = 0), en donde primero se asigna el valor 0 a la variable y, y despus se asigna el resultado de esa asignacin, 0, a x. Buena prctica de programacin 2.12Cuando escriba expresiones que contengan muchos operadores, consulte la tabla de pre cedencia de operadores (apndice A). Confirme que las operaciones en la expresin se rea licen en el orden que usted espera. Si no est seguro acerca del orden de evaluacin en una expresin compleja, utiliceparntesisparaforzar el orden, en la mismaforma que lo hara con las expresiones algebraicas. Operadores/Asociatividadizquierda a derecha izquierda a derecha izquierda a derecha izquierda a derecha derecha a izquierdamultiplicativa suma relacional igualdad asignacinFig. 2.16 | Precedencia y asociatividad de los operadores descritos hasta ahora.2.9 Conclusin En este captulo aprendi acerca de muchas caractersticas importantes de Java, como mostrar datos en la pantalla en un Smbolo del sistema, introducir datos por medio del teclado, realizar clculos y tomar de cisiones. A travs de las aplicaciones que vimos en este captulo, le presentamos los conceptos bsicos de programacin. Como veremos en el captulo 3, por lo general las aplicaciones de Java contienen slo unas cuantas lneas de cdigo en el mtodo mai n: casi siempre estas instrucciones crean los objetos que realizan el trabajo de la aplicacin. En el captulo 3 aprender a implementar sus propias clases y a usar objetos de stas en las aplicaciones.ResumenSeccin 2.2 Su primer programa en Java: imprimir una lnea de texto U na aplicacin de Java (pg. 38) se ejecuta cuando utilizamos el com ando java para iniciar la JV M .www.FreeLibros.me 97. Resumen61 Los comentarios (pg. 39) documentan los programas y mejoran su legibilidad. El compilador los ignora. Un comentario que empieza con / / se llama comentario de fin de lnea; termina al final de la lnea en la que aparece. Los comentarios tradicionales (pg. 39) se pueden distribuir en varias lneas; estn delimitados por /* y */. Los comentarios 3avadoc (pg. 39) se delimitan por /** y */; nos permiten incrustar la documentacin de los programas en el cdigo. La herramienta javadoc genera pginas en HTML con base en estos comentarios. Un error de sintaxis (pg. 39; tambin conocido como error de compilador, error en tiempo de compilacin o error de compilacin) ocurre cuando el compilador encuentra cdigo que viola las reglas del lenguaje Java. Es similar a un error gramatical en un lenguaje natural. Las lneas en blanco, los espacios y los fabuladores se conocen como espacio en blanco (pg. 39). ste mejora la legibilidad de los programas; el compilador lo ignora. Las palabras clave (pg. 40) estn reservadas para el uso exclusivo de Java, y siempre se escriben con letras minsculas. La palabra clave el as s (pg. 40) introduce una declaracin de clase. Por convencin, todos los nombres de las clases en Java empiezan con una letra mayscula, y la primera letra de cada palabra subsiguiente tambin se escribe en mayscula (como NombreClaseDeEjemplo). El nombre de una clase de Java es un identificador una serie de caracteres formada por letras, dgitos,guiones bajos (_) y signos de dlar ($), que no empieza con un dgito y no contiene espacios. Java es sensible a maysculas/minsculas (pg. 40); es decir, las letras maysculas y minsculas son distintas. El cuerpo de todas las declaraciones de clases (pg. 40) debe estar delimitado por llaves, { y >. La declaracin de una clase publ i c (pg. 40) debe guardarse en un archivo con el mismo nombre que la clase, seguido de la extensin de nombre de archivo *. j ava. El mtodo mai n (pg. 41) es el punto de inicio de toda aplicacin en Java, y debe empezar con: public s ta t i c void main( String[] args ) en caso contrario, la JVM no ejecutar la aplicacin. Los mtodos pueden realizar tareas y devolver informacin cuando las completan. La palabra clave void (pg. 41) indica que un mtodo realizar una tarea, pero no devolver informacin. Las instrucciones instruyen a la computadora para que realice acciones. Por lo general, a una cadena (pg. 41) entre comillas dobles se le conoce como cadena de caracteres, literal de cadena. El objeto de salida estndar (System .out; pg. 41) muestra caracteres en la ventana de comandos. El mtodo System, out. pri ntl n (pg. 41) muestra su argumento (pg. 41) en la ventana de comandos, se guido de un carcter de nueva lnea para colocar el cursor de salida en el inicio de la siguiente lnea. Para compilar un programa se utiliza el comando javac. Si el programa no contiene errores de sintaxis, se crea un archivo de clase (pg. 43) que contiene los cdigos de bytes de Java que representan a la aplicacin. La JVM interpreta estos cdigos de bytes cuando ejecutamos el programa. Para ejecutar una aplicacin, escriba la palabra java (pg. 38) seguida del nombre de la clase que contiene a mai n.Seccin 2.3 Modificacin de nuestro prim er programa en Java System. out.print (pg. 44) muestra su argumento en pantalla y coloca el cursor de salida justo despus del ltimo carcter visualizado. Una barra diagonal inversa () en una cadena es un carcter de escape (pg. 45). Java lo combina con el si guiente carcter para formar una secuencia de escape (pg. 45). La secuencia de escape n (pg. 45) representa el carcter de nueva lnea. Seccin 2.4 Cmo mostrar texto con p r in t f El mtodo System.out. pri n tf (pg. 46; f se refiere a formato) muestra datos con formato. www.FreeLibros.me 98. 62Captulo 2Introduccin a las aplicaciones en Java El primer argumento del mtodo pri n tf es una cadena de formato (pg. 47) que contiene texto fijo y/o especificadores de formato. Cada especificador de formato (pg. 47) indica el tipo de datos a imprimir y es un receptculo para el argumento correspondiente que aparece despus de la cadena de formato. Los especificadores de formato empiezan con un signo porcentual (&), y van seguidos de un carcter que repre senta el tipo de datos. El especificador de formato %s (pg. 47) es un receptculo para una cadena. Seccin 2.5 Otra aplicacin en Java: suma de enteros Una declaracin import (pg. 48) ayuda al compilador a localizar una clase que se utiliza en un programa. El extenso conjunto de clases predefinidas de Java se agrupan en paquetes (pg. 48) denominados grupos de clases. A stos se les conoce como la biblioteca de clases de Java (pg. 48), o la Interfaz de programacin de aplicaciones de Java (API de Java). Una variable (pg. 49) es una ubicacin en la memoria de la computadora, en la cual se puede guardar un valor para usarlo ms adelante en un programa. Todas las variables deben declararse con un nombre y un tipo para poder utilizarlas. El nombre de una variable permite al programa acceder a su valor en memoria. Un objeto Scanner (paquete java, til; pg. 49) permite a un programa leer datos para usarlos en ste. Antes de usar un objeto Scanner, el programa debe crearlo y especificar el origen de los datos. Las variables deben inicializarse (pg. 49) para poder usarlas en un programa. La expresin new Scanner (System . i n) crea un objeto Scanner que leedatos desde el objeto de entrada estndar (System, i n; pg. 49); por lo general es el teclado. El tipo de datos i nt (pg. 49) se utiliza para declarar variables que guardarn valores enteros. El rango de valo res para un in t es de -2,147,483,648 a +2,147,483,647. Los tipos float y doubl e (pg. 49) especifican nmeros reales con puntos decimales, como 3.4 y -11.19. Las variables de tipo char (pg. 49) representan caraaeres individuales, como una letra mayscula (por ejemplo, A), un dgito (por ejemplo, 7), un carcter especial (por ejemplo, * o %) o una secuencia de escape (por ejemplo, el carcter de nueva lnea, n). Los tipos como i nt, float, doubl e y char son tipos primitivos (pg. 49). Los nombres de los tipos primitivos son palabras clave; por ende, deben aparecer escritos slo con letras minsculas. U n indicador (pg. 50) pide al usuario que realice una accin especfica. El mtodo nextlnt de Scanner obtiene un entero para usarlo en un programa. El operador de asignacin, - (pg. 51), permite al programa dar un valor a una variable. Se llama operador binario (pg. 51), ya que tiene dos operandos. Las partes de las instrucciones que tienen valores se llaman expresiones (pg. 51). El especificador de formato %d (pg. 51) es un receptculo para un valor i nt.Seccin 2 .6 Conceptos acerca de la memoria Los nombres de las variables (pg. 52) corresponden a ubicaciones en la memoria de la computadora. Cada variable tiene un nombre, un tipo, un tamao y un valor. Un valor que se coloca en una ubicacin de memoria sustituye al valor anterior en esa ubicacin, el cual se pierde. Seccin 2 .7 A ritmetica Los operadores aritmticos (pg. 53) son + (suma), - (resta), * (multiplicacin), / (divisin) y %(residuo). La divisin de enteros (pg. 53) produce un cociente entero. El operador residuo, %(pg. 53), produce el residuo despus de la divisin. Las expresiones aritm ticas deben escribirse en form ato de lnea recta (pg. 54). Si una expresin contiene parntesis anidados (pg. 54), el conjunto de parntesis ms interno se evala primero.www.FreeLibros.me 99. Ejercicios de autoevaluacin63 Java aplica los operadores en las expresiones aritmticas en una secuencia precisa, la cual se determina me diante las reglas de precedencia de los operadores (pg. 54). Cuando decimos que los operadores se aplican de izquierda a derecha, nos referimos a su asociatividad (pg. 54). Algunos operadores se asocian de derecha a izquierda. Los parntesis redundantes (pg. 56) pueden hacer que una expresin sea ms clara.Seccin 2.8 Tonta de decisiones: operadores de igualdad y relacinales La instruccin i f (pg. 56) toma una decisin con base en el valor de esa condicin (verdadero o falso). Las condiciones en las instrucciones if se pueden forman mediante el uso de los operadores de igualdad ( y !-) y relacinales (>, - y 0.0 ) saldo = s a l d o l n i c i a l ; } / / f in del c o n stru c to r de Cuenta / / abona (suma) un monto a la cuenta19p u b l i c v o i d a b o n a r ( d o u b l e mont o )20{21 22 23 24s a l d o = s a l d o + mo n t o ; / / suma el monto a l } / / f in del mtodo abonar25p u b l i c double o b t e n e r S a l d o O26{27r e t u r n s a l d o ; / / proporciona el v a lo r de sald o al mtodo que h izo la llamada } / / f in del mtodo obtenerSaldo28 29)saldo/ / devuelve e l saldo de l a cuenta} / / f i n de l a c la s e C u en taFig. 3.13 |La claseCuenta con un constructor para validar e inicializar la variable de instancia sal do de tipo doubl e.La clase tiene un constructor y dos mtodos. Debido a que es comn que alguien abra una cuen ta para depositar dinero de inmediato, el constructor (lneas 10 a la 16) recibe un parmetro llamado saldolni cial de tipo doubl e, el cual representad saldo inicial de la cuenta. Las lneas 14 y 15 aseguran que s al doIni c i al sea mayor que 0.0. De ser as, el valor de s al doIni ci al se asigna a la variable de ins tancia saldo. En caso contrario, saldo permanece en 0.0, su valor inicial predeterminado. El mtodo abonar (lneas 19 a la 22) no devuelve datos cuando completa su tarea, por lo que su tipo de valor de retorno es void. El mtodo recibe un parmetro llamado monto: un valor double que www.FreeLibros.me 126. 90Captulo 3Introduccin a las clases, objetos, mtodos y cadenasse sumar al saldo. La lnea 21 suma monto al valor actual de sal do, y despus asigna el resultado a sa l do (con lo cual se sustituye el m onto del saldo anterior).El mtodo obtenerSaldo (lneas 25 a la 28) permite a los clientes de la clase (otras clases que utilicen esta clase) obtener el valor del sa l do de un objeto Cu enta especfico. El mtodo especifica el tipo de valor de retorno doubl e y una lista de parmetros vaca. Observe una vez ms que las instrucciones en las lneas 15,21 y 27 utilizan la variable de instancia sald o , an y cuando no se declar en ninguno de los mtodos. Podemos usar saldo en estos mtodos, ya que es una variable de instancia de la clase. La clase PruebaCuenta que utiliza a la clase Cuenta Laclase PruebaCuenta (figura 3.14) creados objetos Cuenta (lneas 10 y 11) y los inicializa con 50.00 y -7 .5 3 , respectivamente. Las lneas 14 a la 17 im prim en el saldo en cada objeto Cuenta mediante unallamada al mtodo obtenerSaldo de Cuenta. Cuando se hace una llam ada al mtodo obtenerSaldo para cu ent a l en la lnea 15, se devuelve el valor del saldo de c u e n ta l de la lnea 27 en la figura 3.13, y se imprime en pantalla m ediante la instruccin System , o u t. p ri n t f (figura 3.14, lneas 14 y 15). De manera similar, cuando se hace la llamada al mtodo obtenerSaldo para cuenta2 en la lnea 17, se devuelve el valor del saldo de cuenta2 de la lnea 27 en la figura 3.13, y se imprime en pantalla m e diante la instruccin System , out .p r i n t f (figura 3.14, lneas 16 y 17). El saldo de cuenta2 es 0.00, ya que el constructor se asegur de que la cuenta no pudiera empezar con un saldo negativo. El valor se imprime en pantalla m ediante p ri n t f , con el especificador de formato % .2 f. El especificador de for m ato %f se utiliza para im prim ir valores de tipo f lo a t o doubl e. El . 2 entre %y f representa el nmero de lugares decimales (2) que deben im primirse a la derecha del punto decimal en el nm ero de punto flotante; a esto tam bin se le conoce como la precisin del nmero. Cualquier valor de punto flotante que se im prim a con %. 2 f se redondear a la posicin de las centenas; por ejemplo, 123.457 se redondea ra a 123.46, 27.333 se redondeara a 27.33 y 123.455 se redondeara a 123.46.1//Fig.3.14: PruebaCuenta.java2/ / E n t r a d a y s a l i d a de nmeros de p u n t o f l o t a n t e con o b j e t o s C u e n t a .3im port j a v a . t i l . Scanner;4 5p u b lic c la s s PruebaCuenta6 { 7/ / el mt odo mai n emp i e z a l a e j e c u c i n de l a a p l i c a c i n de l a v a8p u b lic s t a t i c vo id m ain( S t r in g [ ] args )9 10 1112{ Cuenta c u e n ta l = new CuentaC 5 0 . 0 0 ) ; / / c r e a o b j e t o C u e n t a Cuenta cuenta2 = new CuentaC - 7 . 5 3 ) ; / / c r e a o b j e t o C u e n t a13/ / m u e s t r a el s a l d o i n i c i a l14S y s te m .o u t.p rin tfC S a l d o de c u e n t a l : $ % . 2 fn ,1516 1718 19de c a d a o b j e t ocu e n ta l.o b te n e rS a ld o O ) ; S y s t e m . o u t . p r i n t f C S a l d o de c u e n t a 2 : $ % . 2 fnn ,cuenta2.o b ten erSald oO ) ; / / c r e a o b j e t o S c a n n e r p a r a o b t e n e r l a e n t r a d a de l a v e n t a n a de comandos20Scanner entrada = new ScannerC S y ste m .in ) ;21double montoDeposito; / / d e p o s i t a el monto e s c r i t op o r el u s u a r i oF ig .3 .1 4 | Entrada ysalida de nmerosde punto flotante con objetos Cuenta (parte I de 2).www.FreeLibros.me 127. 3.7Los nmeros de punto flotante y el tipo double9122 23 24 25 26 27 28 29 30/ / muestra lo s saldo s S y s te m .o u t.p rin tfC Saldo de c u e n ta l: $ % .2 fn ,31 32cu e n ta l.o b te n e rS a ld o O ) ; S y s te m .o u t.p rin tfC Saldo de cuenta2: $ % .2fn n ,33 34 35 36 37 38 39 40 41 42 43 44 45 46 47S y ste m .o u t.p rin tC E s c rib a el monto a d e p o sita r para c u e n ta l: ) ; / / in d ica d o r montoDeposito = e n tra d a .n e xtD o u b le O ; / / obtiene entrada delu su ario S y s te m .o u t.p rin tfC nsumando % . 2 f a l sald o de c u e n ta l n n " , m o nto D ep o sito ); cuental.ab o narC montoDeposito ) ; / / suma a l saldo de c u e n ta lcuenta2 .o b ten erSald o O);S y ste m .o u t.p rin tC E s c rib a el monto a d e p o sita r para cuenta2: ) ; / / in d ica d o r montoDeposito = e n tra d a .n e xtD o u b le O ; / / obtiene entrada delu su ario S y s te m .o u t.p rin tfC nsumando % .2 f a l sald o de cuenta2nn , m o nto D ep o sito ); cuenta2.abonarC montoDeposito ) ; / / suma a l saldo de cuenta2 / / muestra lo s saldo s S y s te m .o u t.p rin tfC Saldo de c u e n ta l: $ % .2 fn , cu e n ta l.o b te n e rS a ld o O ) ; S y s te m .o u t.p rin tfC Saldo de cuenta2: $ % .2 fn , cuenta2 .o b ten erSald o O ) ; } / / f i n de main } / / f in de la c la s e PruebaCuentaSaldo de c u e n ta l: $50.00 Saldo de cuenta2: $0.00 E s c rib a el monto a d e p o sita r para c u e n ta l: 25.53 sumando 25.53 a l saldo de cu e n ta l Saldo de c u e n ta l: $75.53 Saldo de cuenta2: $0.00 E s c rib a e l monto a d e p o sita r para cuenta2: 123.45 sumando 123.45 al saldo de cuenta2 Saldo de c u e n ta l: $75.53 Saldo de cuenta2: $123.45 Fig. 3 .1 4 | Entrada y salida de nmeros de punto flotante con objetos Cuenta (parte 2 de 2).La lnea 21 declara la variable local m ontoDeposito para almacenar cada monto de depsito intro ducido por el usuario. A diferencia de la variable de instancia s a ld o en la clase Cuenta, la variable local m ontoDeposito en mai n no se inicializa con 0 .0 de manera predeterminada. Sin embargo, esta variable no necesita inicializarse aqu, ya que su valor se determinar con base a la entrada del usuario. La lnea 23 pide al usuario que escriba un monto a depositar para c u e n ta l. La lnea 24 obtiene la entrada del usuario, llamando al mtodo nextD ouble del objeto Scan ner llamado entrada, el cual devuelve un valor doubl e introducido por el usuario. Las lneas 25 y 26 muestran el monto del depsito. www.FreeLibros.me 128. 92Captulo 3Introduccin a las clases, objetos, mtodos y cadenasLa lnea 27 llama al mtodo abonar del objeto c u e n ta l y le suministra montoDeposito como argumento. Cuando se hace la llamada al mtodo, el valor del argumento se asigna al parmetro monto (lnea 19 de la figura 3 .1 3 ) del mtodo abonar (lneas 19 a la 22 de la figura 3 .1 3 ); despus el mtodo abonar suma ese valor al sa l do (lnea 21 de la figura 3 .1 3 ). Las lneas 30 a la 33 (figura 3 .1 4 ) imprimen en pantalla los sal dos de ambos objetos Cuenta otra vez, para mostrar que slo se modific el saldo de cu e n ta l. La lnea 35 pide al usuario que escriba un monto a depositar para cu e n ta2 . La lnea 36 obtiene la entrada del usuario, para lo cual invoca al mtodo nextDoubl e del objeto S can n e r llamado e n tra d a . Las lneas 37 y 38 muestran el monto del depsito. La lnea 39 llama al mtodo abonar del objeto cu enta 2 y le suministra montoDeposi t o como argumento; despus, el mtodo abonar suma ese valor al saldo. Por ltimo, las lneas 42 a la 45 imprimen en pantalla los saldos de ambos objetos C u en ta otra vez, para mostrar que slo se modific el saldo de cuenta2. Diagrama de clases de UML para la clase Cuenta El diagrama de clases de UML en la figura 3 .1 5 modela la clase Cuenta de la figura 3 .1 3 . El diagrama modela el atributo p riv a te llamado saldo con el tipo Double de UML, para que corresponda a la varia ble de instancia saldo de la clase, que tiene el tipo double de Java. Modela el constructor de la clase Cuenta con un parmetro s a ld o ln ic ia l del tipo Double de UML en el tercer compartimiento de la clase. Los dos mtodos publ i c de la clase se modelan como operaciones en el tercer compartimiento tambin. El diagrama tambin modela la operacin abonar con un parmetro monto de tipo Double de UML (ya que el mtodo correspondiente tiene un parmetro monto de tipo doubl e en Java) y la operacin obtenerSaldo con un tipo de valor de retorno Double (ya que el mtodo correspondiente en Java devuelve un valor dou bl e).Cuenta - s a ld o : Double________________________________ constructor Cuenta{ saldolnicial: Double ) +abonar( monto : Double ) +obtenerSaldo() : DoubleFig. 3.15 | Diagrama de clases de UML, el cual indica que la clase Cuentatiene un atributo p riv a te llamado sa ld o , con el tipo Double de UML, un constructor (con un parmetro de tipo Double de UML) y dos operaciones p u b lic : abonar (con un parmetro monto de tipo Double de UML) y obtenerSaldo (devuelve el tipo Double de UML).3.8 (Opcional) Caso de estudio de GUI y grficos: uso de cuadros de dilogo Este caso de estudio opcional est diseado para aquellos que desean empezar a conocer las poderosas herramientas de Java para crear interfaces grficas de usuario (GUI) y grficos antes de los principales debates de estos temas en el captulo 14 (en el sitio Web del libro), Componentes de la GUI: Parte 1, el captulo 15 (tambin en el sitio Web), Grficos y Java 2D, y el captulo 25, Componentes de la GUI: Parte 2 (en ingls, en el sido Web). El caso de estudio de GUI y grficos aparece en 10 secciones breves (vea la figura 3.16). Cada seccin introduce unos cuantos conceptos bsicos y proporciona ejemplos con capturas de pantalla que muestran interacciones de ejemplo y resultados. En las primeras secciones, crear sus primeras aplica ciones grficas. En las secciones posteriores, utilizar los conceptos de programacin orientada a objewww.FreeLibros.me 129. 3.8(Opcional) Caso de estudio de GUI y grficos: uso de cuadros de dilogo93tos para crear una aplicacin que dibuja una variedad de figuras. Cuando presentemos de manera formal las GUI en el captulo 14, utilizaremos el ratn para elegir con exactitud qu figuras dibujar y en dnde. En el captulo 15, agregaremos las herramientas de la API de grficos en 2D de Java para dibujar las figuras con distintos grosores de lnea y rellenos. Esperamos que este ejemplo prctico le sea informativo y divertido. UbicacinTtulo - Ejercicio(s)Seccin 3.8 Seccin 4.14 Seccin 5.10 Seccin 6.13 Seccin 7.15 Seccin 8.16 Seccin 9.8 Seccin 10.8 Ejercicio 14.17 Ejercicio 15.31Uso de cuadros de dilogo: entrada y salida bsica con cuadros de dilogo Creacin de dibujos simples: mostrar y dibujar lneas en la pantalla Dibujo de rectngulos y valos: uso de figuras para representar datos Colores y figuras rellenas: dibujar un tiro al blanco y grficos aleatorios Dibujo de arcos: dibujar espirales con arcos Uso de objetos con grficos: almacenar figuras como objetos Mostrar texto e imgenes usando etiquetas: proporcionar informacin de estado Realizar dibujos usando polimorfismo: identificar las similitudes entre figuras Caso de estudio de GUI y grficos: expansin de la interfaz Caso de estudio de GUI y grficos: Agregar Java 2DFig. 3.16 | Resumen del caso de estudio de GUI y grficos en cada captulo.Cmo mostrar texto en un cuadro de dilogo Los programas que hemos presentado hasta ahora muestran su salida en la ventana de comandos. Muchas aplicaciones utilizan ventanas, o cuadros de dilogo (tambin llamados dilogos) para mostrar la salida. Por ejemplo, los navegadores Web como Firefbx, Internet Explorer, Chrome y Safari muestran las pginas Web en sus propias ventanas. Los programas de correo electrnico le permiten escribir y leer mensajes en una ventana. Por lo general, los cuadros de dilogo son ventanas en las que los programas muestran men sajes importantes a los usuarios. La clase JOptionPane cuenta con cuadros de dilogo prefabricados, los cuales permiten a los programas mostrar ventanas que contengan mensajes; a dichas ventanas se les co noce como dilogos de mensaje. La figura 3.17 muestra el objeto String Bi enveni donanJava" en un dilogo de mensaje. 1 / / F i g - 3 .1 7 : D ia lo g o l.ja v a 2 / / Uso de JOptionPane para im p rim ir v a r ia s lin e a s en un cuadro de d i lo g o . 3 im port ja v a x .s w in g .JO p tio n P a n e ; / / im porta la c la s e JOptionPane 4 5 p u b lic c la s s D ia lo g o l6 { 78 9 10 11 12p u b lic s t a t ic vo id m ain( S t r in g [ ] args ){/ / muestra un cuadro de d ilo go con un mensaje JOptionPane.showM essageDialog( n u i l, B ie n ve n id o n an Java ) ; } / / f in de main } / / f in de la c la s e D ia lo g o l____________________________________________________________Fig. 3 .1 7 | Uso de JOptionPane para mostrar varias lneas en un cuadro de dilogo (parte I de 2).www.FreeLibros.me 130. 94Captulo 3Introduccin a las clases, objetos, mtodos y cadenasMeiuaje (T N WBienvenido Java [ A ceptar 1Fig. 3.17 | Uso de JOptionPane para mostrar varias lneas en un cuadro de dilogo (parte 2 de 2).La lnea 3 indica que el programa utiliza la clase JOptionPane del paquete ja v a x .s w in g . El cual oontiene muchas clases que le ayudan a crear interfaces grficas de usuario (GUI). Los componentes de la GUI facilitan la entrada de datos al usuario del programa, y la presentacin de los datos de salida. La Enea 10 llama al mtodo shovrtlessageDialog de JOptionPane para mostrar un cuadro de dilogo que contiene un mensaje. El mtodo requiere dos argumentos. El primero ayuda a Java a determinar en dnde colocar el cuadro de dilogo. Por lo general, un dilogo se muestra desde una aplicacin de GUI oon su propia ventana. El primer argumento hace referencia aesa ventana (conocida como ventana padre) y hace que el dilogo aparezca centrado sobre la ventana de la aplicacin. Si el primer argumento es n u il, el cuadro de dilogo aparece en el centro de la pantalla de la computadora. El segundo argumento es el objeto S t r i ng a mostrar en el cuadro de dilogo. Introduccin de los mtodos s t a t i c El mtodo shov^essageDialog de laclase JOptionPane es lo que llamamos un mtodo s t a t ic . A me nudo, dichos mtodos definen las tareas que se utilizan con frecuencia. Por ejemplo, muchos programas muestran cuadros de dilogo, y el cdigo para hacer esto es el mismo siempre. En vez de que usted tenga que reinventar la rueda y crear cdigo para realizar esta tarea, los diseadores de la clase JOptionPane declararon un mtodo s t a t i c que realiza esta tarea por usted. La llamada a un mtodo s t a t i c se realiza mediante el uso del nombre de su clase, seguido de un punto (.) y del nombre del mtodo, como en NombreClase.nombreMtodo { argumentos ) Observe que 0 tiene que crear un objeto de la clase JOptionPane para usar su mtodo s t a t i c llamado showMessageDialog. En el captulo 6 analizaremos los mtodos s t a t i c con ms detalle. Introducir texto en un cuadro de dilogo La aplicacin de la figura 3.18 utiliza otro cuadro de dilogo JOptionPane predefinido, conocido como dilogo de entrada, el cual permite al usuario introducir datos en un programa. ste pide el nombre del usuario, y responde con un dilogo de mensaje que contiene un saludo y el nombre introducido por el usuario. Las Eneas 10 y 11 utiEzan el mtodo showInputDialog de JOptionPane para mostrar un dilogo de entrada que contiene un indicador y un campo (conocido como campo de texto), en donde el usuario puede escribir texto. El argumento del mtodo showInputDialog es el indicador que muestra lo que el usuario debe escribir. El usuario escribe caracteres en el campo de texto, y despus hace cc en el botn Aceptar u oprime la tecla Intro para devolver el objeto S t r i ng al programa. El mtodo showInputDi alog (Enea 11) devuelve un objeto S t r i ng que contiene los caracteres escritos por el usuario. Almacenamos el objeto S trin g en la variable nombre (Enea 10). [Nota: si oprime el botn Cancelaren el cuadro de dilogo u oprime Esc, el mtodo devuelve nu ll y el programa muestra la palabra clave nuil como el nombre]. Las Eneas 14 y 15 utilizan el mtodo s t a t i c S t r i ng llamado format para devolver un objeto S t r i ng que contiene un saludo con el nombre del usuario. El mtodo format es similar al mtodo System .out. p ri n t f, excepto que fo rmat devuelve el objeto S t r i ng con formato, en vez de mostrarlo en una ventana de comandos. La Enea 18 muestra el saludo en un cuadro de dilogo de mensaje, como hicimos en la figura 3.17. www.FreeLibros.me 131. 3.91/ / Entrad a b sica con un cuadro de d i lo g o .395/ / F i g . 3 .1 8 : DialogoNombre. ja v a2Conclusinim port ja v a x .s w in g .JO p tio n P a n e ;4 5p u b lic c la s s DialogoNombre6 { 789 10 1112p u b lic s t a t i c vo id m ain( S t r in g [ ] args ){/ / pide al u su a rio que e s c rib a su nombre S trin g nombre = JOptionPane.showInputDialogC "Cual es su nombre? ) ;13/ / crea el mensaje14S trin g mensaje =15S trin g .fo rm a tC B ienvenid o,%s, a l a programacin en J a v a ! , nombre ) ;16 17 18 19 20/ / muestra el mensaje para dar la bienvenida alu su a rio por su nombreJOptionPane.showM essageDialog( n u i l, mensaje ) ; } / / f in de main } / / f in de l a c la s e DialogoNombre Entrad*M enta* /T ^Paul ^ A c e p ta r j CancelarIw -T_ Bienvenido. Paul, a la program acin en Java.' 1 A ceptar j1kFig. 3 .1 8 | Cmo obtener la entrada del usuario mediante un cuadro de dilogo.Ejercicio del ejemplo prctico de G U I y grficos 3.1 Modifique el programa de suma en la figura 2.7 para usar la entrada y salida con base en el cuadro de dilogo con los mtodos de la clase JOpt i on Pane. Como el mtodo s howl nputD i al og devuelve un objeto St ri ng, debe conver tir el objeto Stri ng que introduce el usuario a un i nt para usarlo en los clculos. El mtodo s ta ti c parselnt de la clase Integer recibe un argumento String que representa un entero (es decir, el resultado de JOptionPane. showInputDi al og) y devuelve el valor completo como un nmero i n t . El mtodo parselnt es un mtodo s ta ti c de la clase Integer (del paquete java. lang). Si el objeto String no contiene un entero vlido, el programa ter minar con un error. 3.9 Conclusin En este captulo aprendi a declarar variables de instancia de una clase para mantener los datos de cada objeto, y cmo declarar mtodos que operen sobre esos datos. Aprendi cmo llamar a un mtodo para decirle que realice su tarea y cmo pasar informacin a los mtodos en forma de argumentos. Vio la diferencia entre una variable local de un mtodo y una variable de instancia de una clase, y que slo las variables de instancia se inicializan en forma automtica. Tambin aprendi a utilizar el constructor de una clase para especificar los valores iniciales para las variables de instancia de un objeto. A lo largo del captulo, vio cmo puede usarse UML para crear diagramas de clases que modelen los constructores, mtodos y atributos de las clases. Por ltimo, aprendi acerca de los nmeros de punto flotante: cmo almacenarlos con variables del tipo primitivo double, cmo recibirlos en forma de datos de entrada www.FreeLibros.me 132. 96Captulo 3Introduccin a las clases, objetos, mtodos y cadenasmediante un objeto Scanner y cmo darles formato con pri n tf y el especificador de formato %f para fines de visualizacin. En el siguiente captulo empezaremos nuestra introduccin a las instrucciones de control, las cuales especifican el orden en el que se realizan las acciones de un programa. Utilizar estas instrucciones en sus mtodos para especificar cmo deben realizar sus tareas.ResumenSeccin 3.2 Declaracin de una clase con un mtodo e instanciamiento de un objeto de una clase Cada declaracin de clase que empieza con el modificador de acceso publ i c (pg. 72) debe almacenarse en un archivo que tenga exactam ente el m ism o nom bre que la clase, y que term ine con la extensin de nom bre de archivo . j ava. Cada declaracin de clase contiene la palabra clave c la ss, seguida inm ediatam ente por el nom bre de la clase. La declaracin de un m todo que empieza con la palabra clave publ i c indica que a ese m todo lo pueden llam ar otras clases declaradas fuera d e la declaracin de esa clase. La palabra clave voi d indica que un m todo realizar una tarea, pero no devolver inform acin cuando la term ine. Por convencin, los nom bres de los m todos empiezan con la primera letra enm inscula, y todaslaspalabrassubsiguientes en el nom bre empiezan con la prim era letra en mayscula. Los parntesis vacos despus del nom bre de un m todo indican que ste no requiere parm etros para realizar su tarea. El cuerpo de todos los m todos est delim itado por llaves izquierda y derecha ({ y }). El cuerpo de un m todo contiene instrucciones que realizan la tarea d e ste. U na vez que se ejecutan las instrucciones, el m todo ha term inado su tarea. C uando intentam os ejecutar una clase, Java busca el m todo mai n de la clase para em pezar la ejecucin. Por lo general, no podem os llam ar a un m todo que pertenece a otra clase, sino hasta crear un objeto de esa clase. U na expresin de creacin de instancia de clase (pg. 74) empieza con la palabra clave new y crea un nuevo objeto. Para llam ar a un m todo de un objeto, se pone despus del nom bre de la variable un separador punto (.; pg. 75), el nom bre del m todo y un conjunto de parntesis que contienen los argum entos del m todo. En U M L, cada clase se m odela en un diagram a de clases en form a de rectngulo con tres com partim ientos. El com partim iento superior contiene el nom bre de la clase, centrado horizontalm ente y en negrita. El com partim iento interm edio contiene los atributos d e la clase, que corresponden a los campos en Java. El com partim iento inferior contiene las operaciones de la clase (pg. 76), que corresponden a los m todos y constructores en Java. Para m odelar las operaciones, U M L enum erael nom bre dla operacin, seguido de un conjunto de parntesis. U n signo m s (+) enfrente del nom bre de la operacin indica que sta es una operacin p u b lic en U M L (es decir, un m todo publ i cen Java).Seccin 3.3 Declaracin de un mtodo con un parmetro A m enudo, los m todos requieren parm etros (pg. 76) para realizar sus tareas. D icha inform acin adicional se proporciona m ediante argum entos en las llam adas a los mtodos. El m todo next Li ne de Sean ner (pg. 76) lee caracteres hasta encontrar una nueva lnea y despus devuelve los caracteres que ley en form a de un objeto S tri ng. El m todo next de Scanner (pg. 77) lee caracteres hasta encontrar cualquier carcter de espacio en blanco, y despus devuelve los caracteres que ley en form a de un objeto S tr i ng. U n m todo que requiere datos para realizar su tarea debe especificar esto en su declaracin, para lo cual coloca inform acin adicional en la lista de parm etros del m todo (pg. 76). Cada parm etro debe especificar tanto un tipo com o un nom bre de variable.www.FreeLibros.me 133. Resumen97 C uando se hace la llam ada a un m todo, sus argum entos se asignan a sus parmetros. Entonces, el cuerpo del m todo utiliza las variables de los parm etros para acceder a los valores de los argum entos. U n m todo especifica varios parm etros en una lista separada por comas. El nm ero de argum entos en la llamada a un m todo debe coincidir con el de los parmetros en la lista de parmetros de la declaracin del m todo. Adems, los tipos de los argum entos en la llamada al m todo deben ser consistentes con los de los parm etros correspondientes en la declaracin de ste. La clase S tri ng est en el paquete j ava. 1 ang, que por lo general se im porta de m anera implcita en todos los archivos de cdigo fuente. D e m anera predeterm inada, las clases que se com pilan en el m ism o directorio estn en el m ism o paquete. Las clases en el m ism o paquete se im portan im plcitam ente en los archivos de cdigo fuente de las otras clases que estn en el m ism o paquete. Las declaraciones i mport no son obligatorias si usamos siempre nom bres de clases com pletam ente calificados (pg. 79). Para m odelar un parm etro de una operacin, U M L lista el nom bre del parm etro, seguido de dos puntos y el tipo del parm etro entre los parntesis que van despus del nom bre de la operacin. U M L tiene sus propios tipos de datos, similares a los de Java. N o todos los tipos de datos de U M L tienen los mismos nom bres que los tipos correspondientes en Java. El tipo S trin g de U M L corresponde al tipo S trin g de Java.Seccin 3 .4 Variables de instancia, mtodos establecer y mtodos obtener Las variables que se declaran en el cuerpo de un m todo son variables locales, y pueden utilizarse slo en ese m todo. Por lo general, una clase consiste en uno o m s m todos que m anipulan los atributos (datos) pertenecientes a un objeto especfico de esa clase. Dichas variables se llam an campos y se declaran dentro de la declaracin de una clase, pero fuera d e los cuerpos de las declaraciones de los m todos de esa clase. C uando cada objeto de una clase m antiene su propia copia de un atributo, al cam po correspondiente se le conoce com o variable de instancia. Las variables o m todos declarados con el m odificador de acceso p riv ate slo estn accesibles para los m todos de la clase en la que estn declarados. Al proceso de declarar variables de instancia con el modificador de acceso p riv a te (pg. 80) se le conoce com o ocultam iento de datos. U n beneficio de los cam pos es que todos los m todos de la clase pueden usarlos. O tra diferencia entre un cam po y una variable local es que un cam po tiene un valor inicial predeterm inado (pg. 82), que Java proporciona cuando el program ador no especifica el valor inicial del cam po, pero una variable local no hace esto. El valor predeterm inado para un cam po de tipo S tri ng (o cualquier otro tipo por referencia) es nul 1. C uando se llam a a un m todo que especifica un tipo de valor de retom o (pg. 73) y com pleta su tarea, devuelve un resultado al m todo que lo llam (pg. 73). A m enudo, las clases proporcionan m todos publ i c para perm itir que los clientes de la clase establezcan u obtengan variables de instancia p riv ate (pg. 83). Los nom bres de estos m todos no necesitan com enzar con establecer u obtener, pero esta convencin de nom enclatura es m uy recomendada en Java, y requerida para ciertos com ponentes de software de Java especiales, conocidos com o JavaBeans. U M L representa a las variables d e instancia com o un nom bre de atributo, seguido de dos puntos y el tipo del atributo. En U M L, los atributos privados van precedidos por un signo m enos (-). Para indicar el tipo d e valor de retom o de una operacin, U M L coloca dos puntos y el tipo de valor de retom o despus d e los parntesis que siguen del nom bre d e la operacin. Los diagram as de clases de U M L (pg. 75) no especifican tipos de valores de retom o para las operaciones que no devuelven valores.Seccin 3.5 Comparacin entre tipos primitivos y tipos por referencia En Java, los tipos se dividen en dos categoras: tipos primitivos y tipos por referencia. Los tipos prim itivos son bool ean, byte, char, short, in t, long, f l o a t y double. Todos los dems tipos son p or referencia, por lo cual, las clases que especifican los tipos de los objetos, son tipos por referencia.www.FreeLibros.me 134. 98Captulo 3Introduccin a las clases, objetos, mtodos y cadenas Una variable de tipo primitivo puede almacenar exactamente un valor de su tipo declarado, en un momento dado. Las variables de instancia de tipos primitivos se inicializan de manera predeterminada. Las variables de los tipos byte, char, short, int, long, float y doubl ese inicializan con 0. Las variables de tipo boolean se inicializan con false. Las variables de tipos por referencia (llamadas referencias; pg. 84) almacenan la ubicacin de un objeto en la memoria de la computadora. Dichas variables hacen referencia a los objetos en el programa. El objeto al que se hace referencia puede contener muchas variables de instancia y mtodos. Los campos de tipo por referencia se inicializan de manera predeterminada con el valor nul 1. Para invocar a los mtodos de instancia de un objeto, se requiere una referencia a ste (pg. 84). Una variable de tipo primitivo no hace referencia a un objeto, por lo cual no puede usarse para invocar a un mtodo. Seccin 3 .6 Inicializacin de objetos mediante constructores La palabra clave new solicita memoria del sistema para almacenar un objeto, y despus llama al constructor de la clase correspondiente (pg. 74) para inicializar el objeto. Un constructor puede usarse para inicializar un objeto de una clase, a la hora de crearlo. Los constructores pueden especificar parmetros, pero no tipos de valores de retomo. Si una clase no define constructores, el compilador proporciona uno predeterminado (pg. 85) sin parmetros, y las variables de instancia de la clase se inicializan con sus valores predeterminados. UML modela a los constructores en el tercercompartimiento de un diagrama de clases. Para diferenciara un constructor con base en las operaciones de una clase, UML coloca la palabra constructor entre los signos y (pg. 88) antes del nombre de ste. Seccin 3 .7 Los nmeros de punto flotante y el tipo doubl e Un nmero de punto flotante (pg. 88) es un nmero con un punto decimal. Java proporciona dos tipos primitivos para almacenar nmeros de punto flotante (pg. 88) en la memoria: f 1oat y doubl e. La principal diferencia entre estos tipos es que las variables double pueden almacenar nmeros con mayor magnitud y detalle (a esto se le conoce como la precisin del nmero; pg. 88) que las variables float. Las variables de tipo float representan nmeros de punto flotante de precisin simple, y tienen siete dgitos significa tivos. Las variables de tipo doubl e representan nmeros de punto flotante de precisin doble. stos requieren el doble de memoria que las variables float y proporcionan 15 dgitos significativos; tienen aproximadamente el doble de precisin de las variables float. Las literales de punto flotante (pg. 88) son de tipo doubl e de manera predeterminada. El mtodo nextDouble de Scanner (pg. 91) devuelve un valor doubl e. El especificador de formato %f (pg. 90) se utiliza para mostrar valores de tipo float o double. El especificador de formato %.2f especifica que se deben mostrar dos dgitos de precisin (pg. 90) a la derecha del punto decimal, en el nmero de punto flotante. El valor predeterminado para un campo de tipo double es 0.0, y el valor predeterminado para un campo de tipo int esO. Ejercicios de autoevaluacin3.2Complete las siguientes oraciones: a) Cada declaracin de clase que empieza con la palabra clave_______ debe almacenarse en un archivo que tenga exactamente el mismo nombre de la clase, y que termine con la extensin de nombre de archivo . java. b) En la declaracin de una clase, la palabra clave________va seguida inmediatamente por el nombre de la clase. c) La palabra clave_______ solicita memoria del sistema para almacenar un objeto, y despus llama al construc tor de la clase correspondiente para inicializarlo. d) Cada parmetro debe especificar un (a)_______ y un (a)_________ e) De manera predeterminada, se considera que las clases que se compilan en el mismo directorio estn en el mismo paquete, conocido como________ www.FreeLibros.me 135. Respuestas a los ejercicios de autoevaluacin99f) Cuando cada objeto de una clase mantiene su propia copia de un atributo, el campo que representa a este atributo se conoce tambin como________ g) Java proporciona dos tipos primitivos para almacenar nmeros de punto flotante en la memoria:________y h) i) j) k) 1)Las variables de tipo doubl e representan a los nmeros de punto flotante________ El mtodo_______ de la clase Scanner devuelve un valor double. La palabra clave publ 1c es un_______ de acceso. El tipo de valor de retomo________indica que un mtodo no devolver un valor. El mtodo________ de Scanner lee caracteres hasta encontrar una nueva lnea y despus devuelve esos caracteres como un objeto Stri ng. m) La clase Stri ng est en el paquete________ n) No se requiere un(a)________ si siempre hacemos referencia a una clase con su nombre completamente calificado. 0) Un(a)________es un nmero con un punto decimal, como 7.33,0.0975 o 1000.12345. p) Las variables de tipo float representan nmeros de punto flotante________ q) El especificador de formato________se utiliza para mostrar valores de tipo float o double. r) Los tipos en Java se dividen en dos categoras: tipos________ y tipos________ 3.3 Conteste con verdadero o falsoa cada una de las siguientes proposiciones; en caso de serfalso, explique por qu. a) Por convencin, los nombres de los mtodos empiezan con la primera letra en mayscula, en el nombre todas las palabras subsiguientes comienzan con la primera letra en mayscula. b) Una declaracin import no es obligatoria cuando una clase en un paquete utiliza a otra en el mismo paquete. c) Los parntesis vacos que van despus del nombre de un mtodo en su declaracin indican que no requiere parmetros para realizar su tarea. d) Las variables o los mtodos declarados con el modificador de acceso private son accesibles slo para los mtodos de la clase en la que se declaran. e) Una variable de tipo primitivo puede usarse para invocar un mtodo. f) Las variables que se declaran en el cuerpo de un mtodo especfico se conocen como variables de instancia, y pueden utilizarse en todos los mtodos de la clase. g) El cuerpo de cada mtodo est delimitado por llaves izquierda y derecha ({ y }). h) Las variables locales de tipo primitivo se inicializan de manera predeterminada. 0 Las variables de instancia de tipo por referencia se inicializan de manera predeterminada con el valor n ull. j) Cualquier clase que contenga public s ta ti c void main( String[] args ) puede usarse para ejecutar una aplicacin. k) El nmero de argumentos en la llamada a un mtodo debe coincidir con el de parmetros en la lista de par metros de la declaracin del mtodo. 1) Los valores de punto flotante que aparecen en cdigo fuente se conocen como literales de punto flotante, y son de tipo f 1oat de manera predeterminada. 3.4 Cul es la diferencia entre una variable local y un campo? 3.5 Explique el propsito de un parmetro de un mtodo. Cul es la diferencia entre un parmetro y un argumento?Respuestas a los ejercicios de autoevaluacin3.1 a) public. b) class. c) new.d) tipo, nombre, e) paquete predeterminado, f) variable de instancia. g ) f loat, double. h ) de precisin doble, i) nextDouble. j) modificador, k) void. 1) nextLine. m) java.lang.n)declaracin import. o) nmero de punto flotante, p) de precisin simple, q) %f. r) primitivo, por referencia. 3.2 a) Falso. Por convencin, los nombres de los mtodos empiezan con una primera letra en minscula y todas las palabras subsiguientes con una letra en mayscula, b) Verdadero, c) Verdadero, d) Verdadero, e) Falso. Una variable de tipo www.FreeLibros.me 136. 100Captulo 3Introduccin a las clases, objetos, mtodos y cadenasprimitivo no puede usarse para invocar a un mtodo; se requiere una referencia a un objeto para invocar a sus mtodos. 0 Falso. Dichas variables se llaman variables locales, y slo se pueden utilizar en el mtodo en el que estn declaradas, g) Verdadero, h) Falso. Las variables de instancia de tipo primitivo se inicializan de manera predeterminada. A cada va riable local se le debe asignar un valor de manera explcita, i) Verdadero, j) Verdadero, k) Verdadero. 1) Falso. Dichas li terales son de tipo double de manera predeterminada. 3 .3 Una variable local se declara en el cuerpo de un mtodo, y slo puede utilizarse desde el punto en el que se de clar, hasta el final de la declaracin del mtodo. Un campo se declara en una clase, pero no en el cuerpo de alguno de los mtodos de ella. Adems, los campos estn accesibles para todos los mtodos de la clase. (En el captulo 8, Clases y objetos: un anlisis ms detallado, veremos una excepcin a esto). 3.4 Un parmetro representa la informacin adicional que requiere un mtodo para realizar su tarea. Cada parme tro requerido por un mtodo est especificado en la declaracin del mtodo. Un argumento es el valor actual para un par metro del mtodo. Cuando se llama a un mtodo, los valores de los argumentos se pasan a sus parmetros correspondientes para que ste pueda realizar su tarea.Ejercicios 3 .5 (Palabra clave new) Cul es el propsito de la palabra clave new? Explique lo que ocurre cuando se utiliza en una aplicacin. 3 .6 (Constructores predeterminados) Qu es un constructor predeterminado? Cmo se inicializan las variables de instancia de un objeto, si una clase slo tiene un constructor predeterminado? 3.7 (Variablesde instancia) Explique el propsito de una variable de instancia. 3 .8 (Usar clases sin importarlas) La mayora de las clases necesitan importarse antes de poder utilizarlas en una aplicacin Por qu cualquier aplicacin puede utilizar las clases Sys tem y S t r i ng sin tener que importarlas primero? 3 .9 (Usar una clase sin importarla) Explique cmo podra un programa utilizar la clase Scanner sin importarla. 3.10 (Mtodos establecer y obtener) Explique por qu una clase podra proporcionar un mtodo establecer y un mtodo obtener para una variable de instancia. 3 .1 1 (Clase LibroCal Ificaciones modificada) Modifique laclase L ib ro C a li fic a c io n e s (figura 3.10) de la siguiente manera: a) Incluya una segunda variable de instancia S t r i ng, que represente el nombre del instructor del curso. b) Proporcione un mtodo establecer para modificar el nombre del instructor, y un mtodo obtener para con seguir el nombre. c) Modifique el constructor para especificar dos parmetros: uno para el nombre del curso y otro para el del instructor. d) Modifique el mtodo mostrarM ensaje, de tal forma que primero imprima el mensaje de bienvenida y el nombre del curso, seguidos de Este curso es presentado p o r : y el nombre del instructor. Use su clase modificada en una aplicacin de prueba que demuestre las nuevas capacidades que tiene. 3.12 (Clase Cuenta modificada) Modifique la clase Cuenta (figura 3.13) para proporcionar un mtodo llamado carg ar, que retire dinero de un objeto Cuenta. Asegure que el monto a cargar no exceda el saldo de Cuenta. Si lo hace, el saldo debe permanecer sin cambio y el mtodo debe imprimir un mensaje que indique " E l monto a ca rg ar excede el saldo de la c u e n ta . Modifique la clase PruebaCuenta (figura 3.14) para probar el mtodo carg ar. 3.13 (La clase Factura) Cree una clase llamada F a ctu ra , que una ferretera podra utilizar para representar una fac tura para un artculo vendido en la tienda. Una F a ctu ra debe incluir cuatro piezas de informacin como variables de ins tancia: un nmero de pieza (tipo S t r i ng), la descripcin de la pieza (tipo St r i ng), la cantidad de artculos de ese tipo que se van a comprar (tipo in t ) y el precio por artculo (double). Su clase debe tener un constructor que inicialice las cuatro variables de instancia. Proporcione un mtodo establecer y uno obtener para cada variable de instancia. Adems, propor cione un mtodo llamado obtenerM ontoFactura, que calcule el monto de la factura (es decir, que multiplique la can tidad por el precio por artculo) y despus lo devuelva como un valor double. Si la cantidad no es positiva, debe estable-www.FreeLibros.me 137. Hacer la diferencia101cerse en 0. Si el precio por artculo no es positivo, debe establecerse en 0.0. Escriba una aplicacin de prueba llamada PruebaFactura, que demuestre las capacidades de la clase Fa ctu ra. 3.14 (Laclase Empleado)Crcc una clase llamada Empleado, que incluya tres variables de instancia: un primernombre (tipo S trin g ), un apellido paterno (tipo S trin g ) y un salario mensual (doubl e). Su clase debe tener un constructor que inicialice las tres variables de instancia. Proporcione un mtodo establecer y un mtodo obtener para cada variable de ins tancia. Si el salario mensual no es positivo, no establezca su valor. Escriba una aplicacin de prueba llamada PruebaEmpl eado, que demuestre las capacidades de la clase Empleado. Cree dos objetos Empleado y muestre el salario anual de cada objeto. Despus, proporcione a cada Empl eado un aumento del 10% y muestre el salario anual de cada Empleado otra vez. 3 .15 (La clase Fecha) Cree una clase llamada Fecha, que incluya tres variables de instancia: un mes (tipo i n t), un da (tipo i n t) y un ao (tipo i nt). Su clase debe tener un constructor que inicialice las tres variables de instancia, y debe asumir que los valores que se proporcionan son correaos. Proporcione un mtodo establecer y un mtodo obtener para cada varia ble de instancia. Proporcione un mtodo mos tra rF e ch a , que muestre el mes, da y ao, separados por barras diagonales (/). Escriba una aplicacin de prueba llamada PruebaFecha, que demuestre las capacidades de la clase Fecha.Marcar la diferencia3 .16 (Calculadora de la frecuencia cardiaca esperada) Mientras se ejercita, puede usar un monitor de frecuencia cardiaca para ver que su corazn permanezca dentro de un rango seguro sugerido por sus entrenadores y doctores. De acuerdo con la Asociacin Estadounidense del Corazn (AHA) (vwwv. ameri c a n h e a rt.o rg /), la frmula para calcular su frecuencia cardiaca mxima en pulsos por minuto es de 220 menos su edad en aos. Su frecuencia cardiaca esperada es un rango que est entre el 50 y el 85% de su frecuencia cardiaca mxima. [Nota: estas frmulas son estimaciones proporcio nadas por la AHA. Las frecuencias cardiacas mxima y esperada pueden variar de acuerdo con la salud, condicin fsica y sexo del individuo. Siempre debe consultar un mdico o a un profesional de la salud antes de empezar o modificar un programa de ejercicios.] Cree una clase llamada F re cu e n cia sC a rd ia ca s. Los atributos de la clase deben incluir el primer nombre de la persona, su apellido y fecha de nacimiento (la cual debe consistir de atributos separados para el mes, da y ao de nacimiento). Su clase debe tener un constructor que reciba estos datos como parmetros. Para cada atributo debe proveer mtodos establecery obtener. La clase tambin debe incluir un mtodo que calcule y devuelva la edad de la perso na (en aos), uno que calcule y devuelva la frecuencia cardiaca mxima de esa persona, y otro que calcule y devuelva la Secuencia cardiaca esperada de la persona. Escriba una aplicacin de Java que pida la informacin de la persona, cree una instancia de un objeto de la clase Fre cu e n c ia sC a rd ia c a se imprima la informacin a partir de ese objeto (incluya el primer nombre de la persona, su apellido y fecha de nacimiento), y que despus calcule e imprima la edad de la persona en (aos), Secuencia cardiaca mxima y rango de frecuencia cardiaca esperada. 3 .17 (Computarizacin de los registros mdicos) Un problema relacionado con la salud que ha estado ltimamente en las noticias es la computarizacin de los registros mdicos. Esta posibilidad se est tratando con mucho cuidado, debi do a las delicadas cuestiones de privacidad y seguridad, entre otras cosas. [Trataremos esas cuestiones en ejercicios poste riores.] La computarizacin de los registros mdicos puede facilitar a los pacientes el proceso de compartir sus perfiles e historiales mdicos con los diversos profesionales de la salud que consulten. Esto podra mejorar la calidad del servicio mdico, ayudar a evitar conflictos de frmacos y prescripciones errneas, reducir los costos y, en emergencias, ayudar a salvar vidas. En este ejercicio usted disear una clase inicial llamada P e r f i 1Medico para una persona. Los atributos de la dase deben llevar el primernombre de la persona, su apellido, sexo, fecha de nacimiento (que debe consistir de atributos separados para el da, mes y ao de nacimiento), altura (en centmetros) y peso (en kilogramos). Su clase debe tener un oonstructor que reciba estos datos. Para cada atributo, debe proveer los mtodos establecery obtener.ha clase tambin debe tener mtodos que calculen y devuelvan la edad del usuario en aos, la frecuencia cardiaca mxima y el rango de frecuen cia cardiaca esperada (vea el ejercicio 3.16), adems del ndice de masa corporal (BMI; vea el ejercicio 2.33). Escriba una aplicacin de Java que pida la informacin de la persona, cree una instancia de un objeto de la clase P e r fi lMedico para esa persona e imprima la informacin de ese objeto (debe contener el primer nombre de la persona, apellido, sexo, fecha de nacimiento, altura y peso), y que despus calcule e imprima la edad de esa persona en aos, junto con el BMI, la fre cuencia cardiaca mxima y el rango de frecuencia cardiaca esperada. Tambin debe mostrar la tabla de valores del BMI del ejercicio 2.33.www.FreeLibros.me 138. Instrucciones de control Parte I Desplacmonos un lugar. Lew Carrol]La rueda se convirti en un circulo completo. W illiam ShakespeareCuntas manzanas tuvieron que caer en la cabeza de Newton antes de que entendiera el suceso! Robcrt FrostObjetivos En este captulo aprender a: Gomprender las tcnicas bsicas para solucionar problemas. Desarrollar algoritmos mediante el proceso de refinamiento de arriba a abajo, paso a paso. Utilizar las estructuras de seleccin i f e if...e lse p a ra elegir entre distintas acciones alternativas. Usar la estructura de repeticin whi 1 e para ejecutar instrucciones de manera repetitiva dentro de un programa. Emplear la repeticin controlada por un contador y la repeticin controlada por un centinela. Manejar los operadores de asignacin compuestos. de incremento y decremento. Gonocer la portabilidad de los tipos de datos primitivos.www.FreeLibros.me 139. Plan general4.24 .9.1Introduccin.2Algoritmos.3Seudocdigo.4Estructuras de control.5Instruccin i f de seleccin simple4.10Instruccin i f . . . el se de seleccin (.7Instruccin de repeticin w h ile Cmo formular algoritmos: repeticin controlada por un contador103Cmo formular algoritmos: repeticin controlada por un centinela Cmo formular algoritmos: instrucciones de control anidadas4 .1 1Operadores de asignacin compuestos4.12Operadores de incremento y decremento4.13.6 .8AlgoritmosTipos primitivos4 . 14(Opcional) Caso de estudio de GUI y grficos: creacin de dibujos simples4.15ConclusinResumen | Ejercicios de autoevaluacin | Respuestas a los ejercicios de autoevaluacin | EjerciciosMarcar la diferencia 4.1 Introduccin Antes de escribir un programa que d solucin a un problema, es imprescindible tener una comprensin detallada de todo el problema, adems de una metodologa cuidadosamente planeada para resolverlo. Al escribir un programa, es tambin esencial comprender los tipos de bloques de construccin disponibles, y emplear las tcnicas comprobadas para construir programas. En este captulo y en el 5, Instrucciones de oontrol: Parte 2, hablaremos sobre estas cuestiones cuando presentemos la teora y los principios de la programacin estructurada. Los conceptos aqu presentados son imprescindibles para crear clases y ma nipular objetos. En este captulo le presentamos las instrucciones i f , i f...e ls e y whi le de Java, tres de los bloques de construccin que le permiten especificar la lgica requerida para que los mtodos realicen sus tareas. Dedicamos una parte de este captulo (y de los captulos 5 y 7) para desarrollar ms la clase L i b ro C a lific a c io n e s que presentamos en el captulo 3. En especial, agregamos un mtodo a la dase Lib ro C a l i fic a c io n e s que utiliza instrucciones de control para calcular el promedio de un oonjunto de calificaciones de estudiantes. Otro ejemplo demuestra formas adicionales de combinar instrucciones de control para resolver un problema similar. Presentamos los operadores de asignadn compuestos de incremento y decremento de Java. Por ltimo, analizamos la portabilidad de los tipos de datos primitivos de Java. 4.2 Algoritmos Cualquier problema de computacin puede resolverse ejecutando una serie de acciones en un orden es pecfico. Un procedimiento para resolver un problema en trminos de 1. las acciones a ejecutar y 2. el orden en el que se ejecutan estas acciones se conoce como un algoritmo. El siguiente ejemplo demuestra que es importante especificar de manera oorrecta el orden en el que se ejecutan las acciones. Considere el algoritmo para levantarse y arreglarse que sigue un ejecutivo para levantarse de la cama e ir a trabajar: (1) levantarse; (2) quitarse la pijama; (3) baarse; (4) vestirse; (5) desayunar; (6) transportarse al trabajo. Esta rutina hace que el ejecutivo llegue al trabajo bien preparado para tomar decisiones importantes. Suponga que los mismos pasos se realizan en un orden ligeramente distinto: (1) levantarse; (2) quitarse la pijama; (3) vestirse; (4) baarse; (5) desayunar; (6) transportarse al trabajo. En este caso, nuestro ejecutivo llegar al trabajo todo mojado. Al proceso de especificar el orden en el que se ejecutan las instrucciones (acciones) en un programa, se le llama control del prowww.FreeLibros.me 140. 104Captulo 4Instrucciones de control: Parte Igrama. En este captulo investigaremos el control de los programas mediante el uso de las instruc ciones de control de Java. 4.3 Seudocdigo El seudocdigo es un lenguaje informal que le ayuda a desarrollar algoritmos sin tener que preocupar se por los estrictos detalles de la sintaxis del lenguaje Java. El seudocdigo que presentaremos es espe cialmente til para desarrollar algoritmos que se convertirn en porciones estructuradas de programas en Java. El seudocdigo es similar al lenguaje cotidiano: es conveniente y amigable con el usuario, aunque en realidad no es un lenguaje de programacin de computadoras. En la figura 4.5 ver un algo ritmo escrito en seudocdigo. El seudocdigo no se ejecuta en las computadoras. En vez de ello, le ayuda a organizar un progra ma antes de que intente escribirlo en un lenguaje de programacin como Java. Este captulo presenta varios ejemplos de cmo utilizar el seudocdigo para desarrollar programas en Java. El estilo de seudocdigo que presentaremos consiste slo en caracteres, para que usted pueda es cribirlo de una manera conveniente, con cualquier programa editor de texto. Un programa en seudo cdigo preparado de manera cuidadosa puede convertirse fcilmente en su correspondiente programa en Java. Por lo general, el seudocdigo describe slo las instrucciones que representan las acciones que ocurren despus de convertir un programa de seudocdigo a Java, y el programa se ejecuta en una computadora. Dichas acciones podran incluir la entrada, salida o un clculo. Por lo general no inclui mos las declaraciones de variables en nuestro seudocdigo, pero algunos programadores optan por listarlas y mencionar sus propsitos al principio de su seudocdigo. 4.4 Estructuras de control Es comn en un programa que las instrucciones se ejecuten una despus de otra, en el orden en que estn escritas. Este proceso se conoce como ejecucin secuencial. Varias instrucciones en Java, que pronto veremos, permiten al programador especificar que la siguiente instruccin a ejecutarse tal vez no sea la siguiente en la secuencia. Esto se conoce como transferencia de control. Durante la dcada de 1960, se hizo evidente que el uso indiscriminado de las transferencias de con trol era el origen de muchas de las dificultades que experimentaban los grupos de desarrollo de software. A quien se seal como culpable fue a la instruccin goto (utilizada en la mayora de los lenguajes de programacin de esa poca), la cual permite al programador especificar la transferencia de control a uno de los muchos posibles destinos dentro de un programa. La nocin de lo que conocemos como progra macin estructurada se hizo casi un sinnimo de la eliminacin del goto. [Nota: Java no tiene una instruccin goto; sin embargo, la palabra goto est reservada para Java y no debe usarse como identifica dor en los programas]. Las investigaciones de Bohm y Jacopini1demostraron que los programas podan escribirse sin ins trucciones goto. El reto de la poca para los programadores fue cambiar sus estilos a una programacin sin goto. No fue sino hasta la dcada de 1970 cuando los programadores tomaron en serio la progra macin estructurada. Los resultados fueron impresionantes. Los grupos de desarrollo de software repor taron reducciones en los tiempos de desarrollo, mayor incidencia de entregas de sistemas a tiempo y ms proyectos de software finalizados sin salirse del presupuesto. La clave para estos logros fue que los pro gramas estructurados eran ms claros, ms fciles de depurar y modificar, y haba ms probabilidad de que estuvieran libres de errores desde el principio. 1 Bohm, C. Y G. Jacopini, Flow Diagrams, Turing Machines and Languages with Only Two Formation Rules, Communica tions oftheACM, vol. 9, nm. 5, mayo de 1966, pginas 336-371.www.FreeLibros.me 141. 4.4Estructuras de control105El trabajo de Bohm y Jacopini demostr que todos los programas podan escribirse en trminos de tres estructuras de control solamente: la estructura de secuencia, la estructura de seleccin y la estructura de repeticin. Cuando presentemos las implementaciones de las estructuras de control en Java, nos referiremos a ellas en la terminologa de la Especificacin del lenguajeJava como instrucciones de control. Estructura de secuencia en Java La estructura de secuencia est integrada en Java. A menos que se le indique lo contrario, la compu tadora ejecuta las instrucciones en Java una despus de otra, en el orden en que estn escritas; es decir, en secuencia. El diagrama de actividad de la figura 4.1 ilustra una estructura de secuencia tpica, en la que se realizan dos clculos en orden. Java permite tantas acciones como deseemos en una estructura de secuencia. Como veremos pronto, en donde quiera que se coloque una sola accin, podrn colo carse varias en secuencia.T sumar calificacin al totali sumar I al contador-Instruccin en Java correspondiente: t o t a l - t o t a l + c a lif ic a c i n ;Instruccin en Java correspondiente: contador - contador + 1;l Fig. 4 .1 | Diagrama de actividad de una estructura de secuencia.Un diagrama de actividad de UML modela el flujo de trabajo (tambin conocido como la acti vidad) de una parte de un sistema de software. Dichos flujos de trabajo pueden incluir una porcin de un algoritmo, como la estructura de secuencia de la figura 4.1. Los diagramas de actividad estn com puestos por smbolos de propsito especial, como los smbolos de estado de accin (rectngulos cuyos lados izquierdo y derecho se reemplazan con arcos hacia fuera), rombos y crculos pequeos. Estos smbolos se conectan mediante flechas de transicin, que representan el flujo de la actividad; es decir, el orden en el que deben ocurrir las acciones. Al igual que el seudocdigo, los diagramas de actividad ayudan a los programadores a desarrollar y representar algoritmos, aunque muchos de ellos an prefieren el seudocdigo. Los diagramas de acti vidad muestran con claridad cmo operan las estructuras de control. Usaremos el UML en este captulo y en el 5 para mostrar el flujo de control en las instrucciones de control. En los captulos 12 y 13 utiliza remos el UML en un caso de estudio de un cajero automtico real. Considere el diagrama de actividad para la estructura de secuencia de la figura 4.1. Contiene dos estados de accin que representan las acciones a realizar. Cada estado de accin contiene una expre sin de accin (por ejemplo, sumar calificacin a total o sumar 1 al contador), que especifica una accin particular a realizar. Otras acciones podran incluir clculos u operaciones de entrada/salida. Las flechas en el diagrama de actividad representan transiciones, las cuales indican el orden en el que ocurren las acciones representadas por los estados de accin. El programa que implementa las activi dades ilustradas por el diagrama de la figura 4.1 primero suma cal i f i caci on a to ta l, y despus suma l a contador. El crculo relleno que se encuentra en la parte superior del diagrama de actividad representa el estado inicial: el inicio del flujo de trabajo antes de que el programa realice las actividades modeladas. www.FreeLibros.me 142. 106Captulo 4Instrucciones de control: Parte IEl crculo slido rodeado por una circunferencia que aparece en la parte inferior del diagrama re presenta el estado final; es decir, e final de flujo de trabajo despus de que el programa realiza sus acciones. La figura 4.1 tambin incluye rectngulos que tienen la esquina superior derecha doblada. En UML, aestos rectngulos se les llama notas (como los comentarios en Java): comentarios con explicaciones que describen el propsito de los smbolos en el diagrama. La figura 4.1 utiliza las notas de UML para mostrar el cdigo en Java asociado con cada estado de accin. Una lnea punteada conecta cada nota con el ele mento que sta describe. Los diagramas de actividad generalmente no muestran el cdigo en Java que implementa la actividad. En este libro utilizamos las notas para mostrar cmo se relaciona el diagrama con el cdigo en Java. Para obtener ms informacin sobre UML, vea nuestro caso de estudio opcional (captulos 12 y 13) o visite www. uml .org. Instrucciones de seleccin en Java Java tiene tres tipos de instrucciones de seleccin (las cuales se describen en este captulo y en el 5). La instruccin i f realiza (selecciona) una accin si la condicin es verdadera, o evita la accin si la con dicin es falsa. La instruccin i f...e lse realiza una accin si la condicin es verdadera, o realiza una accin distinta si es falsa. La instruccin swi tch (captulo 5) realiza una de entre varias acciones dis tintas, dependiendo del valor de una expresin. La instruccin i f es una instruccin de seleccin simple, ya que selecciona o ignora una sola ac cin (o, como pronto veremos, un solo grupo de acciones). La instruccin if...e l se se conoce como instruccin de seleccin doble, ya que selecciona entre los acciones distintas (o grupos de acciones). La instruccin swi tch es una estructura de seleccin mltiple, ya que selecciona entre diversas acciones (o grupos de acciones). Instrucciones de repeticin en Java Java cuenta con tres instrucciones de repeticin (tambin llamadas instrucciones de ciclo) que per miten a los programas ejecutar instrucciones en forma repetida, siempre y cuando una condicin (llamada la condicin de continuacin del ciclo) siga siendo verdadera. Las instrucciones de repe ticin son whi 1e, do.. .whi 1 e y fo r. (En el captulo 5 presentamos las instrucciones do.. .whi 1e y fo r). Las instrucciones whi le y f o r realizan la accin (o grupo de acciones) en sus cuerpos, cero o ms veces; si en un principio la condicin de continuacin del ciclo es falsa, no se ejecutar la accin (o grupo de acciones). La instruccin d o ... whi le realiza la accin (o grupo de acciones) en su cuerpo, una o ms veces. Las palabras i f , el se, swi tch, whi 1e, do y fo r son palabras clave en Java. En el apndice C aparece una lista completa de las palabras clave en Java. Resumen de las instrucciones de control en Java Java slo tiene tres tipos de estructuras de control, a las cuales nos referiremos de aqu en adelante como instrucciones de control: la instruccin de secuencia, las instrucciones de seleccin (tres tipos) y las ins trucciones de repeticin (tres tipos). Cada programa se forma combinando tantas de estas instrucciones como sea apropiado para el algoritmo que implemente el programa. Podemos modelar cada una de las instrucciones de control como un diagrama de actividad. Al igual que la figura 4.1, cada diagrama con tiene un estado inicial y final, los cuales representan el punto de entrada y salida de la instruccin de oontrol, respectivamente. Las instrucciones de control de una sola entrada/una sola salida facilitan la creacin de programas; slo tenemos que conectar el punto de salida de una al punto de entrada de la siguiente. A esto le llamamos apilamiento de instrucciones de control. En breve aprenderemos que slo hay una manera alternativa de conectar las instrucciones de control: el anidamiento de instrucciones de control, en el cual una instruccin de control aparece dentro de otra. Por lo tanto, los algoritmos en los programas en Java se crean a partir de slo tres principales tipos de instrucciones de control, que se com binan slo de dos formas. sta es la esencia de la simpleza. www.FreeLibros.me 143. 4.6Instruccin i f ...e l se de seleccin doble1074.5 Instruccin i f de seleccin simple Los programas utilizan instrucciones de seleccin para elegir entre los cursos alternativos de accin. Por ejemplo, suponga que la calificacin para aprobar un examen es 60. La instruccin en seudocdigo Si la calificacin del estudiante es mayor o igual que 60 Imprimir probado A determina si la condicin la calificacin del estudiante es mayor o igual que 60 es verdadera. En caso de que sea as se imprime Aprobado, y se ejecuta en orden la siguiente instruccin en seudocdigo. (Re cuerde que el seudocdigo no es un verdadero lenguaje de programacin). Si la condicin es falsa se ig nora la instruccin Imprimir, y se ejecuta en orden la siguiente instruccin en seudocdigo. La sangra de la segunda lnea de esta instruccin de seleccin es opcional, pero se recomienda ya que enfatiza la estruc tura inherente de los programas estructurados. La instruccin anterior Si en seudocdigo puede escribirse en Java de la siguiente manera: if( c a lif ic a c io n E s t u d ia n t e >=S ystem .out.println(60) A p ro b ad o ) ;El cdigo en Java corresponde en gran medida con el seudocdigo. sta es una de las propiedades que hace del seudocdigo una herramienta de desarrollo de programas tan til. La figura 4.2 muestra la instruccin i f de seleccin simple. Esta figura contiene lo que quiz sea el smbolo ms importante en un diagrama de actividad: el rombo o smbolo de decisin, el cual indica que se tomar una decisin. El flujo de trabajo contina a lo largo de una ruta determinada por las condiciones de guardia asociadas de ese smbolo, que pueden ser verdaderas o falsas. Cada flecha de transicin que sale de un smbolo de decisin tiene una condicin de guardia (especificada entre corchetes, a un lado de la flecha de transicin). Si una condicin de guardia es verdadera, el flujo de trabajo entra al estado de accin al que apunta la flecha de transicin. En la figura 4.2, si la calificacin es mayor o igual que 60, el programa imprime Aprobado y luego se dirige al estado final de esta acti vidad. Si la calificacin es menor que 60, el programa se dirige de inmediato al estado final sin mostrar ningn mensaje.Fig. 4.2| Diagrama de actividad en UML de la instruccin i f de seleccin simple.La instruccin i f es una instruccin de control de una sola entrada/una sola salida. Pronto veremos que los diagramas de actividad para las instrucciones de control restantes tambin contienen estados iniciales, flechas de transicin, estados de accin que indican las acciones a realizar, smbolos de decisin (con sus condiciones de guardia asociadas) que indican las decisiones a tomar, y estados finales. 4.6 Instruccin i f ...e l se de seleccin doble La instruccin i f de seleccin simple realiza una accin indicada slo cuando la condicin es verdadera (true); de no ser as, se evita dicha accin. La instruccin 1f...el sede seleccin doble le permite espewww.FreeLibros.me 144. 108Captulo 4Instrucciones de control: Parte Idficar una accin a realizar cuando la condicin es verdadera, y otra distinta cuando es falsa. Por ejemplo, la instruccin en seudocdigo: Si la calificacin del estudiante es mayor o igual que 60 Imprimir probado A De lo contrario Imprimir Reprobado imprime Aprobado si la calificacin del estudiante es mayor o igual que 60, y Reprobado si la califi cacin del estudiante es menor que 60. En cualquier caso, despus de la impresin se ejecuta la siguien te instruccin en seudocdigo en la secuencia. La instruccin anterior en seudocdigo Si. ..De lo contrario puede escribirse en Java como i f C c alificaci n >= 60 ) System .out. p r i n tln ( "A p ro b ad o ) ; else S ystem .out.println( "R e p ro b a d o ) ; El cuerpo de la instruccin el se tambin tiene sangra. Cualquiera que sea la convencin de sangra que usted elija, debe aplicarla de manera consistente en todos sus programas. Buena prctica de programacin 4.1Utilice sangra en ambos cuerpos de instrucciones de una estructura 1f...eIse. Muchos IDE hacen estopor usted. Buena prctica de programacin 4.2Si hay varios niveles de sangra, en cada uno debe aplicarse la misma cantidad de espado adidonal. La figura 4.3 muestra el flujo de control en la instruccin i f .. .el se. Una vez ms (adems del es tado inicial, las flechas de transicin y el estado final), los smbolos en el diagrama de actividad de UML representan estados de accin y decisiones.Fig. 4.3| Diagrama de actividad de UML de la instruccin i f...el se de seleccin doble.Operador condicional (?:) Java cuenta con el operador condicional (?:), que en ocasiones puede utilizarse en lugar de una instruccin i f ...else. ste es el nico operador ternario en Java (un operador que utiliza tres ope randos). En conjunto, los operandos y el smbolo ?: forman una expresin condicional. El pri mer operando (a la izquierda del ?) es una expresin bool eana (boolean) (es decir, una condicin www.FreeLibros.me 145. 4.6Instruccin i f ...e l se de seleccin doble109que se evala a un valor bool ean: tru e o f a l se ), el segundo operando (entre el ? y :) es el valor de la expresin condicional si la expresin bool eana es ve rdadera, y el tercer operando (a la derecha del :) es el valor de la expresin condicional si la expresin bool eana se evala como f a l se. Por ejemplo, la instruccin S y s te m .o u t .p r in t ln ( c a lific a c io n E s tu d ia n te > = 6 0 ? Aprobado : Reprobado ) ;imprime el valor del argumento de la expresin condicional de p ri n tln . La expresin condicional en esta instruccin produce como resultado la cadena Ap robado si la expresin booleana c a l i f i caci onE stu d ia n te >= 60 es verdadera, y la cadena "Reprobado si la expresin booleana es falsa. Por lo tanto, esta instruccin con el operador condicional realiza en esencia la misma funcin que la instruccin i f . . .e l se que se mostr anteriormente, en esta seccin. Puesto que la precedencia del operador condi cional es baja, es comn que toda la expresin condicional se coloque entre parntesis. Pronto veremos que las expresiones condicionales pueden usarse en algunas situaciones en las que no se pueden utilizar instrucciones i f . . . el se. Instrucciones i f . . . e l s e anidadas Un programa puede evaluar varios casos colocando instrucciones i f ... e l se dentro de otras instruccio nes i f ... el se para crear instrucciones i f . . . e l se anidadas. Por ejemplo, el siguiente seudocdigo repre senta una instruccin i f ...e l s e anidada que imprime A para las calificaciones de exmenes mayores o iguales a 90, Bpara las calificaciones en el rango de 80 a 89, C para las calificaciones en el rango de 70 a 79, D para las calificaciones en el rango de 60 a 69 y F para todas las dems calificaciones: Si la calificacin del estudiante es mayor o igual que 90 Imprimir A de lo contrario Si la calificacin del estudiante es mayor o igual que 80 Imprimir B de lo contrario Si la calificacin del estudiante es mayor o igual que 70 Imprimir C de lo contrario Si la calificacin del estudiante es mayor o igual que 60 Imprimir "D de lo contrario Imprimir *F Este seudocdigo puede escribirse en Java como if( c a lif ic a c io n E s t u d ia n t e >= 90 ) S y ste m .o u t.p rin tln C A ) ; e ls e i f ( c a lif ic a c io n E s t u d ia n t e >= 80 ) S y s te m .o u t.p rin tln C B ) ; e lse i f C c a lif ic a c io n E s t u d ia n t e >= 70 ) S y ste m .o u t.p rin tln C C ) ; e ls e i f C c a l ific a c io n E s t u d ia n t e >= 60 ) S y ste m .o u t.p rin tln C D ) ; e ls e S y s te m .o u t.p rin tln C F" ) ;www.FreeLibros.me 146. 110Captulo 4Instrucciones de control: Parte ISi la variable c a lif i caci onE studiante es mayor o igual que 90, las primeras cuatro condiciones en la instruccin i f ...e ls e anidada sern verdaderas, pero slo se ejecutar la instruccin en la parte i f de la primera instruccin i f .. .el se. Despus de que se ejecute esa instruccin, se evita la parte el se de la instruccin i f... el se ms externa. La mayora de los programadores en Java prefieren escribir la instruccin i f ... e 1 se anterior as: if( c a l i f i c a c i o n E s t u d i a n t e > = 90 ) S y s t e m . o u t . p r i n t l n ( A ) ; e l s e i f C c a l i f i c a c i o n E s t u d i a n t e >= 80 ) System.out.printlnC "B ) ; e l s e i f ( c a l i f i c a c i o n E s t u d i a n t e >= 70 ) S y s t e m . o u t . p r i n t l n C C ) ; else i f c a l i f i c a c i o n E s t u d i a n t e >= 60 ) S y s t e m . o u t . p r i n t l n C D ) ; else System.out.printlnC F ) ;CLas dos formas son idnticas, excepto por el espaciado y la sangra, que el compilador ignora. La segun da forma es ms popular ya que evita usar m ucha sangra hacia la derecha en el cdigo. Dicha sangra a menudo deja poco espacio en una lnea de cdigo, forzando a que las lneas se separen.Problema del e l s e sueltoEl compilador de Java siempre asocia un e l s e con el i f que le precede inm ediatamente, a menos que se le indique otra cosa mediante la colocacin de llaves ({ y }). Este com portam iento puede ocasionar b que se conoce como el problem a del e l se suelto. Por ejemplo, ifC ifx >)5 C y > 5 ) S y s t e m , o u t . p r i n t l nCelse System.out.printlnC x e y son > 5 ) ; x es 5. D e lo contrario, parece ser que si x no es mayor que 5, la instruccin el se que es parte del i f ... el se produce como resultado la cadena x es )5 C y > 5 ) S y s t e m . o u t . p r i n t l n C x else S y s t e m . o u t . p r i n t l nC x ife y son > 5 ) ; es 5). No obstante, si la segun da condicin es falsa se m uestra la cadena x es 5 )y>5) S y ste m .o u t.p rin tln (if (e ls e S y stem .o u t.p rin tln C x e y son > 5" ) ; x es = 60 ) S y s te m .o u t .p rin t ln ( Aprobado ) ; e ls e{ }S y ste m .o u t.p rin tln C Reprobado ) ; S y s te m .o u t .p rin t ln ( Debe tomar e ste curso o tra v e z . ) ;En este caso, si c a lificaci n es menor que 60, el programa ejecuta ambas instrucciones en el cuerpo del e l se e imprime Reprobado. Debe tomar e ste curso o tra v e z .Observe las llaves que rodean a las dos instrucciones en la clusula el se. stas son importantes. Sin ellas, la instruccin S y ste m .o u t.p rin tln C Debe tomar e ste curso o tra v e z . ) ;estara fuera del cuerpo de la parte el se de la instruccin i f . . . e l se y se ejecutara sin importar que la calificacin fuera menor a 60. Los errores de sintaxis (como cuando se omite una llave en un bloque del programa) los atrapa el compilador. Un error lgico (como cuando se omiten ambas llaves en un bloque del programa) tiene su efecto en tiempo de ejecucin. Un error lgico fatal hace que un programa falle y termine antes de tiempo. Un error lgico no fatal permite que un programa siga ejecutndose, pero ste produce resultados incorrectos. As como un bloque puede colocarse en cualquier parte en donde pueda escribirse una sola instruc cin, tambin es posible no tener instruccin alguna. En la seccin 2.8 vimos que la instruccin vaca se representa con un punto y coma (;) en donde normalmente ira una instruccin. Error comn de programacin 4.1Colocar un punto y coma despus de la condicin en una instruccin 1fo if... else pro duce un error lgico en las instrucciones 1fde seleccin simple, y un error de sintaxis en las instrucciones 1f... el sede seleccin doble (cuando laparte del 1f contiene una instruc cin en el cuerpo). www.FreeLibros.me 148. 112Captulo 4Instrucciones de control: Parte I4.7 Instruccin de repeticin whi le Una instruccin de repeticin (o de ciclo) le permite especificar que un programa debe repetir una accin mientras cierta condicin sea verdadera. La instruccin en seudocdigo Mientras existan ms artculos en mi lista de compras Comprar el siguiente artculo y quitarlo de mi lista describe la repeticin que ocurre al ir de compras. La condicin existan ms artculos en mi lista de compras puede ser verdadera o falsa. Si es verdadera, entonces se realiza la accin Comprar el si guiente artculo y quitarlo de mi lista. Esta accin se realizar en forma repetida mientras la condicin sea verdadera. La instruccin (o instrucciones) contenida en la instruccin de repeticin Mientras oonstituye el cuerpo de esta estructura, el cual puede ser una sola instruccin o un bloque. En algn momento, la condicin ser falsa (cuando el ltimo artculo de la lista de compras sea adquirido y eliminado). En este punto la repeticin terminar y se ejecutar la primera instruccin que est des pus de la instruccin de repeticin. Como ejemplo de la instruccin de repeticin whil e en Java, considere un segmento de progra ma que encuentra la primera potencia de 3 que sea mayor que 100. Suponga que la variable p ro d ucto de tipo i n t se inicializa en 3. Cuando la siguiente instruccin while termine de ejecutarse, el producto oontendr el resultado: w h ile ( producto - 0 ) es verdadera, se crea un ciclo infinito. Para evitar que ocurra un cicloinfinito, z debe decrementarse de manera que en un momento dado se vuelva menor que 0. Ejercicios4 .10 Compare y contraste la instruccin i f de seleccin simple y la instruccin de repeticin whi le. Cul es la simi litud en las dos instrucciones? Cul es su diferencia?www.FreeLibros.me 181. Ejercicios1454.11 Explique lo que ocurre cuando un programa en Java trata de dividir un entero entre otro. Qu ocurre con la parte fraccionaria del clculo? Cmo puede un programador evitar ese resultado? 4.12 Describa las dos formas en las que pueden combinarse las instrucciones de control. 4*13 Qu tipo de repeticin sera apropiada para calcular la suma de los primeros 100 enteros positivos? Qu tipo de repeticin sera apropiada para calcular la suma de un nmero arbitrario de enteros positivos? Describa brevemente cmo podra realizarse cada una de estas tareas. 4.14 Cul es la diferencia entre preincrementary postincrementar una variable? 4.15 Identifique y corrija los errores en cada uno de los siguientes fragmentos de cdigo. [Nota: puedehaber ms de un error en cada fragmento de cdigo]. a) 1f ( edad >65 ); System, out. pri ntl n( "Edad es mayor o igual que 65" ); else System, out. pri ntl n( "Edad es menor que 65 )";b) int x 1, to ta l; while C x io ) System.out.printlnC *****" );}else{System, out. pri ntlnC #####" ); System.out.printlnC $$$$$" );4 .2 8} (Otroproblema de else suelto) Modifique el cdigo dado para producir la salida que se muestra en cada partedel problema. Utilice las tcnicas de sangra apropiadas. No haga modificaciones en el cdigo, slo inserte llaves o modi fique la sangra del cdigo. El compilador ignora la sangra en un programa en Java. Hemos eliminado la sangra en el cdigo dado, para hacer el problema ms retador. [Nota: es posible que no se requieran modificaciones en algunas de las partes]. if C y - 8 ) if C x - 5 ) System.out.printlnC "@ @ @ ); @@ else System.out.printlnC #####" ); System.out. pri ntlnC "$$$$$" ); System.out.printlnC "&&&&&" ); a) Suponiendo que x - 5yy - 8,se produce la siguiente salida:@@@ @@ $$$$$ &&& && b) Suponiendo que x - 5 y y - 8 , s e produce la siguiente salida: c) Suponiendo que x - 5yy - 8,se produce la siguiente salida:mm d) Suponiendo que x - 5 y y - 7, se produce la siguiente salida. [Nota: las tres ltimas instrucciones de salida despus del el se forman parte de un bloque]. ww w w w$$$$$ &&& &&www.FreeLibros.me 185. Ejercicios1494.29 (Cuadrado de asteriscos) Escriba una aplicacin que pida al usuario que introduzca el tamao del lado de un cuadrado y que muestre un cuadrado hueco de ese tamao, compuesto de asteriscos. Su programa debe funcionar con cuadrados que tengan lados de todas las longitudes entre 1 y 20. 4 .3 0 (Palndromos) Un palndromo es una secuencia de caracteres que se lee igual al derecho y al revs. Por ejemplo, cada uno de los si guien tes en teros de cinco dgitos es un palndromo: 12321,55555,45554 y 11611 .Escriba una aplicacin que lea un entero de cinco dgitos y determine si es un palndromo. Si el nmero no es de cinco dgitos, el programa debe mostrar un mensaje de error y permitir al usuario que introduzca un nuevo valor. 4 .3 1 (Imprimir el equivalente decimal de un nmero binario) Escriba una aplicacin que reciba como entrada un en tero que contenga slo dgitos 0 y 1 (es decir, un entero binario), y que imprima su equivalente decimal. [Sugerencia: use los operadores residuo y divisin para elegir los dgitos del nmero binario uno a la vez, de derecha a izquierda. En el siste ma numrico decimal, el dgito ms a la derecha tiene un valor posicional de 1 y el siguiente dgito a la izquierda tiene un valor posicional de 10, despus 100, despus 1,000, etctera. El nmero decimal 234 puede interpretarse como 4*1 + 3* 10 + 2 * 1 0 0 .En el sistema numrico binario, el dgito ms a la derecha tiene un valor posicional de 1, el siguiente dgito a la izquierda tiene un valor posicional de 2, luego 4, luego 8, etctera. El equivalente decimal del nmero binario 1101 es 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 , o l + 0 + 4 + 8,o 13]. 4 .3 2 (Patrn de asteriscos en forma de tablero de damas) Escriba una aplicacin que utilice slo las instrucciones de salida System.out.printC * ); System.out.printC ** ); System, out. pri ntl n O ;para mostrar el patrn de tablero de damas que se muestra a continuacin. Observe que una llamada al mtodo System, out. pri nt 1n sin argumentos hace que el programa imprima un solo carcter de nueva lnea. [Sugerencia: se requieren es tructuras de repeticin]. * * * * * * * * * * * ** * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * ** * * *4.33 (Mltiplos de 2 con un ciclo infinito)Escriba una aplicacin que muestre en la ventana de comandos los mltiplos del entero 2 (a saber, 2,4, 8, 16, 32, 64, etctera). Su ciclo no debe terminar (es decir, debe crear un ciclo infinito). Qu ocurre cuando ejecuta este programa? 4.34 (Qu est mal en este cdigo?) Qu est mal en la siguiente instruccin? Proporcione la instruccin correcta para sumar uno a la suma de x y y. System.out.printlnC ++(x + y) ) ; 4.35 (Lados de un tringulo) Escriba una aplicacin que lea tres valores distintos de cero introducidos por el usuario, y que determine e imprima si podran representar los lados de un tringulo. 4.36 (Lados de un tringulo rectngulo) Escriba una aplicacin que lea tres enteros distintos de cero, determine e imprima si stos podran representar los lados de un tringulo rectngulo. 4.37 (Factorial) El factorial de un entero n no negativo se escribe como ni (se pronuncia factorial de nn) y se define de la siguiente manera: ni =n - ( n-l ) (n-2) ... -1 (para valores de n mayores o iguales a 1)www.FreeLibros.me 186. 150Captulo 4Instrucciones de control: Parte In = 1 (para n= 0) Por ejemplo, 5! = 5 4 3 2 1, que es 120. a) Escriba una aplicacin que lea un entero no negativo, y calcule e imprima su factorial. b) Escriba una aplicacin que estime el valor de la constante matemtica e, utilizando la siguiente frmula. Deje que el usuario introduzca el nmero de trminos a calcular. , 1 1 1 1 * li *2! * 3!+ c) Escriba una aplicacin que calcule el valor de ex, utilizando la siguiente frmula. Deje que el usuario introduz ca el nmero de trminos a calcular. x , x ' + TI+ 2! + 3! + *" Marcar la diferencia(Implementar la privacidad con la criptografa) El crecimiento explosivo de las comunicaciones de Internet y el almacenamiento de datos en computadoras conectadas a Internet, ha incrementado de manera considerable los problemas de privacidad. El campo de la criptografa se dedica a la codificacin de datos para dificultar (y, mediante los esquemas ms avanzados, tratar de imposibilitar) su lectura a los usuarios no autorizados. En este ejercicio, usted investigar un esquema simple para cifrar y descifrar datos. Una compaa que desea enviar datos por Internet le pidi que escribiera un programa que los cifre, de modo que se puedan transmitir con ms seguridad. Todos los datos se transmiten como enteros de cuatro dgitos. Su aplicacin debe leer un entero de cuatro dgitos introducido por el usuario, y cifrarlo de la siguiente manera: Reemplace cada dgito con el resultado de sumarle 7 y obtenga el residuo despus de dividirel nuevo valoren tre 10. Despus intercambie el primer dgito con el tercero, y el segundo dgito con el cuarto. Luego imprima el entero cifrado. Escriba una aplicacin separada que reciba como entrada el nmero entero de cuatro dgitos cifrado y lo descifre (invirtiendo el esque ma de cifrado) para formar el nmero original. [Proyectode lectura opcional: investigela criptografa de clave pblica en general y el esquema de clave pblica especfico PGP (Privacidad bastante buena). Tal vez tambin quiera investigar el es quema RSA, que se utiliza mucho en las aplicaciones de nivel industrial]. 4.39 (Crecimiento de la poblacin mundial)ha poblacin mundial ha crecido de manera considerable a travs de los siglos. El crecimiento continuo podra, en un momento dado, desafiar los lmites del aire respirable, el agua potable, la tierra cultivable y otros recursos limitados. Hay evidencia de que el crecimiento se ha reducido en aos recientes, y que la poblacin mundial podra llegar a su valor mximo en algn momento de este siglo, para luego empezara disminuir. Para este ejercicio, investigue en lnea las cuestiones sobre el crecimiento de la poblacin mundial. Asegrese de investigar varios puntos de vista. Obtenga estimaciones de la poblacin mundial actual y su tasa de crecimiento (el por centaje por el cual es probable que aumente este ao). Escriba un programa que calcule el crecimiento anual dla poblacin mundial durante los siguientes 75 aos, utilizando la suposicin simplificada de que la tasa de crecimiento actualpermanecer constante. Imprima los resultados en una tabla. La primera columna debe mostrar el ao, desde el ao 1 hasta el ao 75. La segunda columna debe mostrar la poblacin mundial anticipada al final de ese ao. La tercera columna deber mos trar el aumento numrico en la poblacin mundial que ocurrira ese ao. Use sus resultados para determinar el ao en el que el tamao de la poblacin ser del doble del actual, si fuera a persistir la tasa de crecimiento de este ao. 4.38www.FreeLibros.me 187. Instrucciones de control: Parte 25 La rueda se convirti en un circulo completo. W illiam ShakespeareToda la evolucin que conocemos procede de lo vago a lo definido. Charles Sandcrs PeiiceObjetivos En este captulo aprender a: Conocer los fundamentos acerca de la repeticin controlada por un contador. Utilizar las instrucciones de repeticin f o r y do... w hil e para ejecutar instrucciones de manera repetitiva en un programa. Comprender la seleccin mltiple utilizando la instruccin de seleccin sw itch . Utilizar las instrucciones de control de programa break y continu para alterar el flujo de control. Utilizar los operadores lgicos para formar expresiones condicionales complejas en instrucciones de control.www.FreeLibros.me 188. Plan general152Captulo 55.1 5.2 5.3 5.4 5.5 5.6Instrucciones de control: Parte 2Introduccin Fundamentos de la repeticin controlada por contador Instruccin de repeticin for Ejemplos sobre el uso de la instruccin for Instruccin de repeticin do...whil e Instruccin de seleccin mltiple swi tch5.7 Instrucciones b r e a k y conti nue 5.8 Operadores lgicos en acin estructurada 5.9 Resum sobre program 5.10 (Opcional) Caso de estudio de GUI y grficos: dibujo de rectngulos y valos 5.11 ConclusinResumen | Ejercicios de autoevaluacin | Respuestas a los ejercicios de autoevaluacin | Ejercicios | Marcar la diferencia5.1 Introduccin En este captulo continuaremos nuestra presentacin de la teora y los principios de la programacin estructurada, presentando el resto de las instrucciones de control en Java, excepto una, tambin demos traremos las instrucciones for, do... whil e y swi tch de Java. A travs de una serie de ejemplos cortos en los que utilizaremos las instrucciones while y forexploraremos los fundamentos acerca de la repe ticin controlada por contador. Crearemos una versin de la clase LibroCal if i caciones que utiliza una instruccin swi tch para contar el nmero de calificaciones equivalentes de A, B, C, D y F, en un oonjunto de calificaciones numricas introducidas por el usuario. Presentaremos las instrucciones de control de programa break y continu. Hablaremos sobre los operadores lgicos de Java, que nos permiten utilizar expresiones condicionales ms complejas en las instrucciones de control. Por ltimo, veremos un resumen de las instrucciones de control de Java y las tcnicas ya probadas de solucin de problemas que presentamos en ste y en el captulo 4. 5.2 Fundamentos de la repeticin controlada por contador Esta seccin utiliza la instruccin de repeticin while, presentada en el captulo 4, para formalizar los elementos requeridos y llevar a cabo la repeticin controlada por contador. Este tipo de repeticin requiere 1. una variable de control (o contador de ciclo) 2. el valor inicial de la variable de control 3. el incremento (o decremento) con el que se modifica la variable de control cada vez que pasa por el ciclo (lo que tambin se conoce como cada iteracin del ciclo) 4. la condicin de continuacin de ciclo, que determina si el ciclo debe continuar o no. Para ver estos elementos de la repeticin controlada por contador, considere la aplicacin de la fi gura 5.1, que utiliza un ciclo para mostrar los nmeros del 1 al 10. i/ / F i g . 5 .1 : C o n tad o rW h ile.java / / R e p etici n co n tro lad a con contador, con la in s tru c c i n de re p e tic i n w h ile . p u b lic c la s s ContadorWhile{p u b lic s t a t ic vo id m ain( S t r in g [ ] args ){Fig. 5.1 | Repeticin controlada con contador, con la instruccin de repeticin whi le (parte I de 2).www.FreeLibros.me 189. 5.28Fundamentos de la repeticin controlada por contador153in t contador = 1 ; / / d e c la ra e i n i c i a l i z a la v a r ia b le de co n tro l910w h ile ( contador l)& & (j< 4 ) ); d) System.out.printlnC C m- i ) II ( k m ) ); f) System .out.printlnC ( k + m < j ) | C 3 - j> = k ) ) ;g) System, out. pri ntlnC 1C k > m ) );5.20 (Calcular el valor de Jt) Calcule el valorde Jt a partir de la serie infinita . 4 4 4 4 4 * - 4 - 3 + 5 + 7 + 9 +n +Imprima una tabla que muestre el valor aproximado de Jt, calculando los primeros 200,000 trminos de esta serie. Cun tos trminos tiene que utilizar para obtener un valor que comience con 3.14159? 5.21 (Triples de Pitgoras) Un tringulo recto puede tener lados cuyas longitudes sean valores enteros. El conjunto de tres valores enteros para las longitudes de los lados de un tringulo recto se conoce como triple de Pitgoras. Las longitudes de los tres lados deben satisfacer la relacin que establece que la suma de los cuadrados de dos lados es igual al cuadrado de la hipotenusa. Escriba una aplicacin que muestre una tabla de los triples de Pitgoras para ladol, lado2 y la hi poten usa, que no sean mayores de 500. Use un ciclo for triplemente anidado para probar todas las posibilidades. Este mtodo es un ejemplo de la computacin de fuerza bruta. En cursos de ciencias computacionales ms avanzados aprender que existen muchos problemas interesantes para los cuales no hay otra metodologa algortmica conocida, ms que el uso de la fuerza bruta. 5.22 (Programa modificado para imprimir tringulos) Modifique el ejercicio 5.15 para combinar su cdigo de los cuatro tringulos separados de asteriscos, de manera que los cuatro patrones se impriman uno al lado del otro. [Sugerencia: utilice astutamente los ciclos for anidados]. 5.23 (Leyes de De Morgan) En este captulo, hemos hablado sobre los operadores lgicos &&, &, | |, |, a y !. Algunas veces, las leyes de De Morgan pueden hacer que sea ms conveniente para nosotros expresar unaexpresin lgica. Estas leyes establecen que la expresin ! {condicin1 && condicin2) es lgicamente equivalente a la expresin ( condicin1 !condicin2) . Tambin establecen que la expresin (condicinl || condicin2) es lgicamente equivalente a la expresin C1condicinJ && condicinZ) . Use las leyes de De Morgan para escribir expresiones equivalentes para cada una de las siguientes expresiones, luego escriba una aplicacin que demuestre que, tanto la expresin original como la nueva expre sin, producen en cada caso el mismo valor: a) l ( x < 5 ) & & ! ( y > - 7 )b) 1( a b ) || 1C 9 1- 5) c) 1( ( x 4 ) ) d) K ( 1 > 4 ) || ( j elem entos, S t rin g encabezado ) 47 { 48___________ S y ste m .o u t.p rin tC encabezado ) ; / / m o strar encabezado___________________________________ Fig. 7 .2 4 | Demostracin de la coleccin de genricos ArrayLi s t (parte I de 2).www.FreeLibros.me 322. 28649 50 51 52 53 54 55 56Captulo 7Arreglos y objetos A rra y L is t/ / muestra cada elemento en elementos f o r ( S trin g elemento : elementos ) S y s te m .o u t.p rin tfC %s , elemento ) ; S y s te m .o u t .p rin t ln C ); / / muestra f in de lin e a } / / f in del mtodo m o strar } / / f in de l a c la s e C o le c c io n A rra y L is t___________________________________________M ostrar contenido de l i s t a con c ic lo contro lado por contad or: a m a rillo ro jo M ostrar contenido de l i s t a con in s tru c c i n fo r m ejorada: a m a rillo ro jo L is t a con dos nuevos elem entos: a m a rillo ro jo verde a m a rillo E lim in a r prim era in s t a n c ia de a m a r illo : ro jo verde a m a rillo E lim in a r segundo elemento de la l i s t a (v e rd e ): ro jo a m a rillo " ro jo " e s ta en l a l i s t a Tamanio: 2Fig. 7.24 | Demostracin de la coleccin de genricos A r r a y L is t (parte 2 de 2).El mtodo add agrega elementos al objeto A r r a y L is t (lneas 12 y 13). El mtodo addcon un argu mento agrega su argumento al final del objeto A r r a y L i s t . El mtodo add con dos argumentos inserta un nuevo elemento en la posicin especificada. El primer argumento es un subndice. Al igual que en los arreglos, los subndices de las colecciones empiezan en cero. El segundo argumento es el valor a inser tar en ese subndice. Los subndices de todos los elementos subsiguientes se incrementan en uno. Por b general, el proceso de insertar un elemento es ms lento que agregar un elemento al final del objeto A r r a y L is t .Las lneas 20 y 21 muestran los elementos en el objeto A r r a y L is t . El mtodo s iz e devuelve el nmero de elementos que se encuentran en ese momento en el objeto A r r a y L is t . El mtodo g et de A r r a y L is t (lnea 21) obtiene el elemento en un subndice especificado. Las lneas 24 y 25 muestran los elementos de nuevo, invocando al mtodo mostrar (definido en las lneas 46 a 55). Las lneas 27 y 28 agregan dos elementos ms al objeto A r r a y L is t ; despus la lnea 29 muestra los elementos de nuevo, para confirmar que se hayan agregado los dos elementos al final de la coleccin. El mtodo removese utiliza para eliminar un elemento con un valor especfico (lnea 31). Slo eli mina el primer elemento que cumpla con esas caractersticas. Si no se encuentra dicho elemento en el objeto A r r a y L is t , remove no hace nada. Una versin sobrecargada del mtodo elimina el elemento en el subndice especificado (lnea 34). Cuando se elimina un elemento, se decrementan en uno los sub ndices de todos los elementos que estn despus del elemento eliminado. La lnea 39 usa el mtodo c o n taln s para verificar si un elemento est en el objeto A r r a y L is t . El mtodo contai ns devuelve tru e si el elemento se encuentra en el objeto A r r a y L is t , y f a ls e en el caso contrario. Este mtodo compara su argumento con cada elemento del objeto A r r a y L is t en orden, por lo que puede ser ineficiente usar contai ns en un objeto A r r a y L is t grande. La lnea 42 muestra el tamao del objeto A rra y L i s t. 7.15 (Opcional) Caso de estudio de GUI y grficos: dibujo de arcos Mediante el uso de las herramientas para grficos de Java, podemos crear dibujos complejos que, si los codificramos lnea por lnea, sera un proceso tedioso. En las figuras 7.25 y 7.26 utilizamos arreglos e instrucciones de repeticin para dibujar un arco iris, mediante el uso del mtodo f i 11 Are de Graphi es. El proceso de dibujar arcos en Java es similar a dibujar valos; un arco es simplemente una seccin de un valo. www.FreeLibros.me 323. 7.15(Opcional) Caso de estudio de GUI y grficos: dibujo de arcos287La figura 7.25 empieza con las instrucciones im port usuales para ciertos dibujos (lneas 3 a 5). Las lneas 10 y 11 declaran y crean dos nuevas constantes de colores: VIOLETA e INDIGO. Como tal vez lo sepa, los colores de un arco iris son rojo, naranja, amarillo, verde, azul, ndigo y violeta. Java tiene cons tantes predefinidas slo para los primeros cinco colores. Las lneas 15 a 17 inicializan un arreglo con los oolores del arco iris, empezando con los arcos ms interiores primero. El arreglo empieza con dos ele mentos Co lo r .WHITE, que como veremos pronto, son para dibujar los arcos vacos en el centro del arco iris. Las variables de instancia se pueden inicializar al momento de declararse, como se muestra en las lneas 10 a 17. El constructor (lneas 20 a 23) contiene una sola instruccin que llama al mtodo setBackground (heredado de la clase JP a n el) con el parmetro C o lo r. WHITE. El mtodo setBackground recibe un solo argumento Col o r y establece el color de fondo del componente a ese color. 12 3 4 5/ / F i g . 7 .2 5 : D ib u jo A r c o Ir is .ja v a / / Demuestra el uso de c o lo re s en un a r re g lo . im port ja v a .a w t.C o lo r ; im port ja v a .a w t.G ra p h ie s ; im port ja v a x .s w in g .J P a n e l;6 7p u b lic c la s s D ib u jo A rc o Iris extends JPanel8 { 9 10 11 12 13 14/ / D efine lo s c o lo re s n d ig o y v io le t a p r iv a t e f in a l s t a t ic C o lo r VIOLETA = newColorC 128, 0 , 128 ) ; p r iv a t e f in a l s t a t ic C o lo r INDIGO = newColorC 75, 0 , 130 );15 16 17p riv a te C o lo r[] c o lo re s = { Color.W H ITE, Color.W H ITE, VIOLETA, INDIGO, C o lo r.B LU E, Color.GREEN, Color.YELLOW, Color.ORANGE, Co lo r.RED } ;18 1920 21 22/ / lo s c o lo re s a usar en e l arco i r i s , empezando desde lo s ms in t e r io r e s / / Las dos entradas de c o lo r blanco producen un arco v a c o en el cen tro/ / c o n stru c to r p u b lic D ib u jo A rc o Iris O{23setBackgroundC Color.W HITE ) ; / / e sta b le c e el fondo a l c o lo r blanco } / / f in del c o n stru c to r de D ib u jo A rc o Iris24 25 26/ / d ib u ja un arco i r i s , usando c ir c u io s co n c n trico s p u b lic vo id paintComponent( G rap hics g )27{28 29 30 31 32 33 34 35 36 37 38s u p e r.paintComponent( g ) ; i n t ra d io = 2 0 ; / / e l ra d io de un arco / / d ib u ja el arco i r i s c e rca de la p arte c e n tra l in f e r io r i n t centroX = getW idthO / 2 ; i n t cen tro Y = getH eigh tO - 10; / / d ib u ja arco s r e lle n o s , empezando con e l ms e x t e r io r f o r ( in t contador = c o lo re s .le n g t h ; contador > 0 ; contador-- ) {Fig. 7 .2 5 | Dibujo de un arco iris, usando arcos y un arreglo de colores (parte I de 2).www.FreeLibros.me 324. 288Captulo 739Arreglos y objetos A r r a y L is t/ / e stab le ce el c o lo r para elarco a ctu a l40g.setC olorC c o lo re s [ contador - 1 ] );42/ / r e lle n a e l arco desde41 43 44 45 46 47 430 h a sta 180 grados g .fillA rc C centroX - contador * ra d io , centroY - contador * rad io , contador * rad io * 2, contador * rad io * 2, 0, 180 ) ;} / / f i n de fo r } / / f in del mtodo paintComponent } / / f in de l a c la s e D ib u jo A rc o IrisFig. 7.25 |yDibujo de un arco iris, usando arcos un arreglo de colores (parte 2 de 2).La lnea 30 en pai ntComponent declara la variable local ra d io , que determ ina el radio de cada arco. Las variables locales centroX y cen tro Y (lneas 33 y 34) determ inan la ubicacin del punto m e dio en la base del arco iris. El ciclo en las lneas 37 a 46 utiliza la variable de control contador para oontar en forma regresiva, partiendo del final del arreglo, dibujando los arcos ms grandes primero y colocando cada arco ms pequeo encim a del anterior. La lnea 40 establece el color para dibujar el arco actual del arreglo. La razn por la que tenem os entradas C olor. WHITEal principio del arreglo es para crear el arco vaco en el centro. De no ser as, el centro del arco iris sera tan slo un semicrculo slido color violeta. [Nota: puede cambiar los colores individuales y el nm ero de entradas en el arreglo para crear nuevos diseos].La llamada al mtodo f 111 Are en las lneas 43 a 45 dibuja un semicrculo relleno. El mtodo requiere seis parmetros. Los primeros cuatro representan el rectngulo delimitador en el cual se dibujar el arco. Los primeros dos de estos cuatro especifican las coordenadas para la esquina superior izquierda del rectngulo delimitador, y los siguientes dos especifican su anchura y su altura. El quinto parmetro es el ngulo inicial en el valo, y el sexto especifica el b a rrid o , o la cantidad de arco que se cubrir. El ngulo inicial y el barrido se miden en grados, en donde los cero grados apuntan a la derecha. Un barrido positivo dibuja el arco en sentido contrario a las manecillas del reloj, en tan to que un barrido negativo dibuja el arco en sentido de las manecillas del reloj. Un mtodo similar a f i l l Are es drawArc; requiere los mismos parmetros que f i l l A re, pero dibuja el borde del arco, en vez de rellenarlo. Laclase PruebaDi bu jo A rco I r i s (figura 7.26) crea y establece un objeto JFrame para mostrar el arco iris en la pantalla. Una vez que el programa hace visible el objeto JFrame, el sistema llama al mtodo pai ntComponent en la clase Di bujo A r c o Ir i s para dibujar el arco iris en la pantalla. f i l l A re1 2/ / F ig . 7 .2 6 : P ru e b a D ib u jo A rc o Iris .ja v a / / A p lic a c i n de prueba para m o strar un arco i r i s .3im port ja v a x .s w in g .JF ra m e ;4 5p u b lic c la s s P ru e b a D ib u jo A rco Iris6 78 910{p u b lic s t a t ic void m ain( S t r in g [ ] args ){D ib u jo A rc o Iris panel = new Di b u jo A r c o Ir is ( ) ; JFrame a p lic a c i n = new JF ra m e O ;1112a p lic a c i n .s e tD e fa u ltC lo s e O p e ra tio n ( JFram e.EXIT_0N_CL0SEFig. 7 .2 6 | Creacin de un objeto JFrame para mostrar un arco iris (parte I de 2).www.FreeLibros.me); 325. 7.16Conclusin28913 api ic a c io n .a d d ( panel ); 14 a p lic acio n .setS iz eC 400, 250 ) ; 15 a p lic a c io n .se tV isib le C tru e ) ; 1617} / / f in de main } / / f in de l a c la s e P ru eb a D ib u jo A rco IrisFig. 7.26 | Creacin de un objeto JFrame para mostrar un arco iris (parte 2 de 2).Ejercicio del caso de estudio de GUI y grficos 7.1 (Dibujo de espirales) En este ejercicio, dibujar espirales con los mtodos d rawLi n e y d rawA re. a) Dibuje una espiral con forma cuadrada (como en la captura de pantalla izquierda de la figura 7.27), centrada en el panel, con el mtodo d r a w L i n e . Una tcnica es utilizar un ciclo que incremente la longitud de la lnea despus de dibujar cada segunda lnea. La direccin en la cual se dibujar la siguiente lnea debe ir despus de un patrn distinto, como abajo, izquierda, arriba, derecha. b) Dibuje una espiral circular (como en la captura de pantalla derecha de la figura 7.27), use el mtodo d r a w A r c para dibujar un semicrculo a la vez. Cada semicrculo sucesivo deber tener un radio ms grande (segn lo especificado mediante la anchura del rectngulo delimitador) y debe seguir dibujando en donde termin el semicrculo anterior.Fig. 7 .2 7 | Dibujo de una espiral con drawLi ne (izquierda) y drawArc (derecha).7.16 Conclusin En este captulo empez nuestra introduccin a las estructuras de datos, con la exploracin del uso de los arreglos para almacenar datos y obtenerlos de listas y tablas de valores. Los ejemplos de este captulo www.FreeLibros.me 326. 290Captulo 7Arreglos y objetos A r r a y L is tdemostraron cmo declarar un arreglo, inicializarlo y hacer referencia a los elementos individuales del mismo. Se introdujo la instruccin f o r mejorada para iterar a travs de los arreglos. Utilizamos el ma nejo de excepciones para evaluar excepciones ArraylndexOutOfBoundsExcepti on que ocurren cuando un programa trata de acceder al elemento de un arreglo que se encuentra fuera de sus lmites. Tambin le mostramos cmo pasar arreglos a los mtodos, y cmo declarar y manipular arreglos multidimen sionales. Por ltimo, en este captulo se demostr cmo escribir mtodos que utilizan listas de argu mentos de longitud variable, y cmo leer argumentos que se pasan a un programa desde la lnea de comandos. Presentamos la coleccin de genricos Ar ra y L i st, que provee toda la funcionalidad y el rendi miento de los arreglos, junto con otras herramientas tiles, tales como el ajuste de tamao en forma dinmica. Utilizamos los mtodos add para agregar nuevos elementos al final de un objeto A rra y L i s t y para insertar elementos en un objeto A r r a y L is t . Se utiliz el mtodo remove para eliminar la primera ocurrencia de un elemento especificado, y se utiliz una versin sobrecargada de remove para eliminar un elemento en un subndice especificado. Utilizamos el mtodo s iz e para obtener el nmero de ele mentos en el objeto A r ra y L i s t . Continuaremos con nuestra cobertura de las estructuras de datos en el captulo 20 (en ingls, en el tio Web del libro). Este captulo introduce el Java Collections Framework (Marco de trabajo de colec ciones de Java), que utiliza los genricos para permitir a los programadores especificar los tipos exactos de objetos que almacenar una estructura de datos especfica. El captulo 20 tambin presenta las otras estructuras de datos predefinidas de Java. La API Collections proporciona la clase A rra y s, que contiene mtodos utilitarios para la manipulacin de arreglos. Ese captulo 20 utiliza varios mtodos s t a t i c de la clase A rra y s para realizar manipulaciones, como ordenar y buscar en los datos de un arreglo. Despus de leer este captulo podr utilizar algunos de los mtodos de A rra y s que se describen en el captulo 20, pero hay otros mtodos de A rra y s que requieren un conocimiento sobre los conceptos que presenta remos ms adelante en este libro. El captulo 21 (en ingls, en el sitio Web del libro) presenta el tema de bs genricos, que proveen los medios para crear modelos generales de mtodos y clases que se pueden declarar una vez, pero se utilizan con muchos tipos de datos distintos. El captulo 22 (tambin en ingls, en el sitio Web del libro) muestra cmo crear estructuras de datos dinmicas, como listas, colas, pilas y rboles, que pueden aumentar y reducir su tamao a medida que se ejecutan los programas. Ya le hemos presentado los conceptos bsicos de las clases, los objetos, las instrucciones de con trol, los mtodos, los arreglos y las colecciones. En el captulo 8 analizaremos con ms detalle las clases y los objetos.ResumenSeccin 7.1 Introduccin Los arreglos (pg. 241) son estructuras de datos de longitud fija que consisten en elementos de datos relacionados del mismo tipo. Seccin 7*2 Arreglos Un arreglo es un grupo de variables (llamadas elementos o componentes; pg. 242) que contienen valores, todos con el mismo tipo. Los arreglos son objetos, por lo cual se consideran como tipos por referencia. Un programa hace referencia a cualquiera de los elementos de un arreglo mediante una expresin de acceso a un arreglo (pg. 242), la cual incluye el nombre del arreglo, seguido del subndice del elemento especfico entre corchetes ([ ]; pg. 242). El primer elemento en cada arreglo tiene el subndice cero (pg. 242), y algunas veces se le llama el elemento cero. Un subndice debe ser un entero no negativo. Un programa puede utilizar una expresin como un subndice. Un objeto tipo arreglo conoce su propia longitud, y almacena esta informacin en una variable de instancia length (pg. 242). www.FreeLibros.me 327. Resumen291Seccin 7 3 Declaracin y creacin de arreglos Para crear un objeto tipo arreglo, hay que especificar el tipo de los elementos del arreglo y el nmero de elementos como parte de una expresin de creacin de arreglo (pg. 243), que utiliza la palabra clave new. Cuando se crea un arreglo, cada elemento recibe un valor predeterminado: cero para los elementos numricos de tipo primitivo, fal se para los elementos booleanos y nul 1 para las referencias. En la declaracin de un arreglo, su tipo y los corchetes pueden combinarse al principio de la declaracin, para indicar que todos los identificadores en la declaracin son variables tipo arreglo. Cada elemento de un arreglo de tipo primitivo contiene una variable del tipo declarado del arreglo. Cada elemento de un tipo por referencia es una alusin a un objeto del tipo declarado del arreglo. Seccin 7A Ejemplos acerca del uso de los arreglos Un programa puede crear un arreglo e inicializar sus elementos con un inicializador de arreglos (pg. 245). Las variables constantes (pg. 247) se declaran con la palabra clave final, deben inicializarse antes de utilizarlas, y no pueden modificarse de ah en adelante. Cuando se ejecuta un programa en Java, la JVM comprueba los subndices de los arreglos para asegurarse que sean mayores o iguales a 0 y menores que la longitud del arreglo. Si un programa utiliza un subndice invlido, Java genera algo que seconoce como excepcin (pg. 25 3), para indicar queocurri un error en el programa, en tiempo deejecucin. Cuando se ejecuta un programa, se comprueba la validez de los subndices de los elementos de los arreglos; todos los subndices deben ser mayores o iguales a 0 y menores que la longitud del arreglo. Si se produce un intento por utilizar un subndice invlido para acceder a un elemento, ocurre una excepcin ArraylndexOutOfRangeException (pg. 253). Una excepcin indica un problema que ocurre mientras se ejecuta un programa. El nombre excepcin sugiere que el problema ocurre con poca frecuencia; si la regla es que por lo general una instruccin se ejecuta en forma correcta, entonces el problema representa la excepcin a la regla. El manejo de excepciones (pg. 253) nos permite crear programas tolerantes a fallas. Para manejar una excepcin, hay que colocar cualquier cdigo que podra lanzar una excepcin (pg. 253) en una instruccin try. El bloque try (pg. 253) contiene el cdigo que podra lanzar una excepcin, y el bloque catch (pg. 253) contiene el cdigo que maneja la excepcin, en caso de que ocurra una. Es posible tener muchos bloques catch para manejar distintos tipos de excepciones que podran lanzarse en el bloque t ry correspondiente. Cuando termina un bloque t ry, cualquier variable declarada en el bloque try queda fuera de alcance. Un bloque catch declara un tipo y un parmetro de excepcin. Dentro del bloque catch, es posible usar el identificador del parmetro para interactuar con un objeto excepcin atrapado. El mtodo toStri ng de un objeto excepcin devuelve el mensaje de error de la excepcin.Seccin 7.5 Caso de estudio: simulacin para barajar y repartir cartas El mtodo toStri ng de un objeto se llama de manera implcita cuando el objeto se utiliza en donde se espera un objeto String (por ejemplo, cuando pri ntf imprime el objeto como un valor String mediante el uso del especificador de formato %s o cuando el objeto se concatena con un Str i ng mediante el operador +). Seccin 7 .6 Instruccin fo r mejorada La instruccin for mejorada (pg. 258) nos permite iterar a travs de los elementos de un arreglo o de una coleccin, sin utilizar un contador. La sintaxis de una instruccin for mejorada es: for (parmetro. nombreArreglo) instruccin en donde parmetro tiene un tipo y un identificador (por ejemplo, i nt numero), y nombreArreglo es el arreglo a travs del cual se iterar. www.FreeLibros.me 328. 292Captulo 7Arreglos y objetos A r r a y L is t La instrucdn for mejorada no puede usarse para modificar los elementos de un arreglo. Si un programa necesita modificar elementos, use la instrucdn for tradidonal, controlada por contador.Seccin 7.7 Paso de arreglos a los mtodos Cuando un argumento se pasa por valor, se hace una copia del valor del argumento y se transfiere al mtodo que se llam. Este mtodo trabaja exclusivamente con la copia. Cuando se pasa un argumento por referencia (pg. 262), el mtodo al que se llam puede accederal valor del argumento en el mtodo que lo llam directamente, y es posible modificado. Todos los argumentos en Java se pasan por valor. Una llamada a un mtodo puede transferir dos tipos de valores a un mtodo: copias de valores primitivos y copias de referencias a objetos. Aunque la referenda a un objeto se pasa por valor (pg. 262), un mtodo de todas formas puede interactuar con el objeto referenciado, llamando a sus mtodos publ i c mediante el uso de la copia de la referencia al objeto. Para pasar a un mtodo una referenda a un objeto, slo se espedfica en la llamada al mtodo el nombre de la variable que hace referenda al objeto. Cuando se pasa a un mtodo un arreglo o un elemento individual del arreglo de un tipo por referenda, el mtodo que se llam recibe una copia del arreglo o referencia al elemento. Cuando se pasa un elemento individual de un tipo primitivo, el mtodo que se llam redbe una copia del valor del elemento. Para pasar un demento individual de un arreglo a un mtodo, use d nombre indexado del arreglo. Seccin 7.9 Arreglos multidimensionales Los arreglos multidimensionales con dos dimensiones se utilizan a menudo para representar tablas de valores, que consisten en informadn ordenada en filas y columnas. Un arreglo bidimensional (pg. 268) con m filas y n columnas se llama arreglo de m por n. Dicho arreglo puede inicializarse con un inicializador de arreglos, de la forma tipoArrebol ] [] nombreArreglo = { { inicializadorfila 1 }, { inicializadorfila 2 }, ... }; Los arreglos multidimensionales se mantienen como arreglos de arreglos unidimensionales separados. Como resultado, no es obligatorio que las longitudes de las filas en un arreglo bidimensional sean iguales. Un arreglo multidimensional con el mismo nmero de columnas en cada fila se puede crear mediante una expresin de creadn de arreglos de la forma tipoArregbi] [] nombreArreglo = newtipoArregbl numfilas ] [ numColumnas ]; Seccin 7.11 Listas de argumentos de longitud variable Un tipo de argumento seguido por una elipsis (...; pg. 278) en la lista de parmetros de un mtodo indica que ste redbe un nmero variable de argumentos de ese tipo especfico. La elipsis puede ocurrir slo una vez en la lista de parmetros de un mtodo. Debe estar al final de la lista. Una lista de argumentos de longitud variable (pg. 278) se trata como un arreglo dentro del cuerpo del mtodo. El nmero de argumentos en el arreglo se puede obtener mediante el campo 1ength del arreglo. Seccin 7.12 Uso de argumentos de linea de comandos Para pasar argumentos a mai n (pg. 279) desde la lnea de comandos, se induye un parmetro de tipo S tri ng [] en la lista de parmetros de mai n. Por convendn, d parmetro de mai n se llama args. Java pasa los argumentos de lnea de comandos que aparecen despus dd nombre de la dase en d comando j ava al mtodo mai n de la aplicadn, en forma de objetos S tri ng en el arreglo args. Seccin 7.13 La clase A rrays La dase Ar rays (pg. 281) provee mtodos sta ti c que realizan manipuladones comunes de arreglos, entre ellos sortpara ordenar un arreglo, bi narySearch para buscar en un arreglo ordenado, equal s para comparar arreglos y f i 11 para colocar elementos en un arreglo.www.FreeLibros.me 329. Ejercicios de autoevaluacin293 El mtodo arraycopy dla clase System (pg. 281) nos permite copiar los elementos de un arreglo en otro.Seccin 7.14 Introduccin a las colecciones y la clase ArrayL i s t Las clases de colecciones de la API de Java proveen mtodos eficientes para organizar, almacenar y obtener datos sin tener que saber cmo se almacenan. Un Ar rayL i st (pg. 284) es similar a u n arreglo, slo que su tamao se puede ajustar en forma dinmica. El mtodo add (pg. 286) con un argumento adjunta un elemento al final de un objeto ArrayLi st. El mtodo add con dos argumentos inserta un nuevo elemento en una posicin especificada de un objeto Ar rayLi st. El mtodo si ze (pg. 286) devuelve el nmero actual de elementos que se encuentran en un objeto ArrayLi st. El mtodo remove, con una referencia a un objeto como argumento, elimina el primer elemento que coincide con el valor del argumento. El mtodo remove, con un argumento entero, elimina el elemento en el ndice especificado, y todos los elementos arriba de ese subndice se desplazan una posicin hacia abajo. El mtodo contai ns devuelve tru e si el elemento se encuentra en el objeto Array Li st, y fa l se en caso contrario.Ejercicios de autoevaluacin7.1Complete las siguientes oraciones: a) Las listas y tablas de valores pueden guardarse en _________ b) Un arreglo es un grupo d e ________ (llamados elementos o componentes) que contiene valores, todos con el mismo_________ c) L a permite a los programadores iterar a travs de los elementos en un arreglo, sin utilizar un contador. d) El nmero utilizado para referirse a un elemento especfico de un arreglo se conoce como e l_________de ese elemento. e) Un arreglo que utiliza dos subndices se conoce como un arreglo_________ f) Use la instruccin for mejorada para recorrer el arreglo doubl ellamado nmeros. g) Los argumentos de lnea de comandos se almacenan en ________ h) Use la expresin_______ para recibir el nmero total de argumentos en una lnea de comandos. Suponga que los argumentos de lnea de comandos se almacenan en el objeto St ri ng [] args. 0 Dado el comando java Mi Clase prueba, el primer argumento de lnea de comandos es__________j) U n(a)_________en la lista de parmetros de un mtodo indica que el mtodo puede recibir un nmero variable de argumentos.7.2Conteste con verdulero o falso a cada una de las siguientes proposiciones; en caso de ser falso, explique por qu. a) Un arreglo puede guardar muchos tipos distintos de valores. b) Por lo general, el subndice de un arreglo debe ser de tipo flo a t.c) Un elemento individual de un arreglo que se pasa a un mtodo y se modifica ah mismo, contendr el valor modificado cuando el mtodo llamado termine su ejecucin. d) Los argumentos de lnea de comandos se separan por comas. 7.3Realice las siguientes tareas para un arreglo llamado fracciones: a) Declare una constante llamada TAMANIO_ARREGLOque se inicialice con 10. b) Declare un arreglo con TAMANICLARREGLO elementos de tipo doubl e, e inicialice los elementos con 0. c) Haga referencia al elemento 4 del arreglo. d) Asigne el valor 1.667 al elemento 9 del arreglo. e) Asigne el valor 3.333 al elemento 6 del arreglo. f) Sume todos los elementos del arreglo, utilizando una instruccin for. Declare la variable entera x como variable de control para el ciclo.7.4Realice las siguientes tareas para un arreglo llamado tab 1a:www.FreeLibros.me 330. 2947.5Captulo 7Arreglos y objetos A r r a y L is ta) Declare y cree el arreglo como un arreglo entero con tres filas y tres columnas. Suponga que se ha declarado la constante TAMANIO_ARREGLO con el valor de 3. b) Cuntos elementos contiene el arreglo? c) Utilice una instruccin for para inicializar cada elemento del arreglo con la suma de sus ndices. Suponga que se declaran las variables enteras x y y como variables de control. Encuentre y corrija el error en cada uno de los siguientes fragmentos de programa: a) final int TAMANICLARREGLO - 5; TAMANIO_ARREGLO - 10;b) Suponga que int[] b - new int[ 10 ]; for ( int i - 0; i