Como programar en java 7ma edicion - p

1432
H o s s F l y

description

Como programar en Java

Transcript of Como programar en java 7ma edicion - p

  • 1. Hoss Fly

2. 3. P. J. DeitelDeitel & Associates, Inc.H. M. DeitelDeitel & Associates, Inc.TRADUCCINAlfonso Vidal Romero ElizondoIngeniero en Sistemas ElectrnicosInstituto Tecnolgico y de Estudios Superiores de MonterreyCampus MonterreyREVISIN TCNICAGabriela Azucena Campos GarcaRoberto Martnez RomnDepartamento de ComputacinInstituto Tecnolgico y de Estudios Superiores de MonterreyCampus Estado de MxicoJorge Armando Aparicio LemusCoordinador del rea de SoftwareUniversidad Tecnolgica de El Salvador 4. DEITEL, PAUL J. Y HARVEY M. DEITELCMO PROGRAMAR EN JAVA. Sptima edicinPEARS ON EDUCACIN, Mxico 2008ISBN: 978-970-26-1190-5rea: ComputacinFormato: 20 25.5 cm Pginas: 1152Authorized translation from the English language edition entitled Java How to Program, 7th Edition, by Deitel & Associates (Harvey & Paul),published by Pearson Education, Inc., publishing as Prentice Hall, Inc., Copyright 2007. All rights reserved.ISBN 0-13-222220-5Traduccin autorizada de la edicin en idioma ingls titulada Java How to Program, 7a Edicin, por Deitel & Associates (Harvey & Paul),publicada por Pearson Education, Inc., publicada como Prentice Hall, Inc., Copyright 2007. Todos los derechos reservados.Esta edicin en espaol es la nica autorizada.Edicin en espaolEditor: Luis Miguel Cruz Castilloe-mail: luis.cruzpearsoned.comEditor de desarrollo: Bernardino Gutirrez HernndezSupervisor de produccin: Enrique Trejo HernndezEdicin en inglsVice President and Editorial Director, ECS: Marcia J. HortonAssociate Editor: Jennifer CappelloAssistant Editor: Carole SnyderExecutive Managing Editor: Vince OBrienManaging Editor: Bob EngelhardtProduction Editors: Donna M. Crilly, Marta SamselDirector of Creative Services: Paul BelfantiA/V Production Editor: Xiaohong ZhuArt Studio: Artworks, York, PACreative Director: Juan LpezArt Director: Kristine CarneyCover Design: Abbey S. Deitel, Harvey M. Deitel, FrancescoSantalucia, Kristine CarneyInterior Design: Harvey M. Deitel, Kristine CarneyManufacturing Manager: Alexis Heydt-LongManufacturing Buyer: Lisa McDowellExecutive Marketing Manager: Robin OBrienSPTIMA EDICIN, 2008D.R. 2008 por Pearson Educacin de Mxico, S.A. de C.V.Atlacomulco 500-5o. pisoCol. Industrial Atoto53519, Naucalpan de Jurez, Estado de MxicoCmara Nacional de la Industria Editorial Mexicana. Reg. Nm. 1031.Prentice Hall es una marca registrada de Pearson Educacin de Mxico, S.A. de C.V.Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema derecuperacin 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 o de sus represen-tantes.ISBN 10: 970-26-1190-3ISBN 13: 978-970-26-1190-5Impreso en Mxico. Printed in Mexico.1 2 3 4 5 6 7 8 9 0 - 11 10 09 08 5. A Vince OBrien,Director de Administracin de Proyectos, Prentice Hall.Es un privilegio para nosotros trabajar con un profesional consumado.Nuestros mejores deseos para tu xito continuo.Paul y Harvey 6. Marcas registradasDEITEL, el insecto con dos pulgares hacia arriba y DIVE INTO son marcas registradas de Deitel and Associates, Inc.Java y todas las marcas basadas en Java son marcas registradas de Sun Microsystems, Inc., en los Estados Unidos y otros pases.Pearson Education es independiente de Sun Microsystems, Inc.Microsoft, Internet Explorer y el logotipo de Windows son marcas registradas de Microsoft Corporation en los Estados Uni-dosy/o en otros pasesUNIX es una marca registrada de Th e Open Group. 7. ContenidoPrefacio xixAntes de empezar xxx1 Introduccin a las computadoras, Internet y Web 11.1 Introduccin 21.2 Qu es una computadora? 41.3 Organizacin de una computadora 41.4 Los primeros sistemas operativos 51.5 Computacin personal, distribuida y cliente/servidor 51.6 Internet y World Wide Web 61.7 Lenguajes mquina, ensambladores y de alto nivel 61.8 Historia de C y C++ 71.9 Historia de Java 81.10 Bibliotecas de clases de Java 81.11 FORTRAN, COBOL, Pascal y Ada 91.12 BASIC, Visual Basic, Visual C++, C# y .NET 101.13 Entorno de desarrollo tpico en Java 101.14 Generalidades acerca de Java y este libro 131.15 Prueba de una aplicacin en Java 141.16 Ejemplo prctico de Ingeniera de Software: introduccin a la tecnologa de objetos y UML 191.17 Web 2.0 231.18 Tecnologas de software 241.19 Conclusin 251.20 Recursos Web 252 Introduccin a las aplicaciones en Java 342.1 Introduccin 352.2 Su primer programa en Java: imprimir una lnea de texto 352.3 Modifi cacin de nuestro primer programa en Java 412.4 Cmo mostrar texto con printf 432.5 Otra aplicacin en Java: suma de enteros 442.6 Conceptos acerca de la memoria 482.7 Aritmtica 492.8 Toma de decisiones: operadores de igualdad y relacionales 522.9 (Opcional) Ejemplo prctico de Ingeniera de Software: cmo examinar el documentode requerimientos de un problema 562.10 Conclusin 653 Introduccin a las clases y los objetos 753.1 Introduccin 763.2 Clases, objetos, mtodos y variables de instancia 76 8. viii Contenido3.3 Declaracin de una clase con un mtodo e instanciamiento de un objeto de una clase 773.4 Declaracin de un mtodo con un parmetro 813.5 Variables de instancia, mtodos establecer y mtodos obtener 843.6 Comparacin entre tipos primitivos y tipos por referencia 883.7 Inicializacin de objetos mediante constructores 893.8 Nmeros de punto fl otante y el tipo double 913.9 (Opcional) Ejemplo prctico de GUI y grfi cos: uso de cuadros de dilogo 953.10 (Opcional) Ejemplo prctico de Ingeniera de Software: identifi cacin de las clases en undocumento de requerimientos 983.11 Conclusin 1054 Instrucciones de control: parte 1 1124.1 Introduccin 1134.2 Algoritmos 1134.3 Seudocdigo 1144.4 Estructuras de control 1144.5 Instruccin de seleccin simple if 1164.6 Instruccin de seleccin doble if...else 1174.7 Instruccin de repeticin while 1214.8 Cmo formular algoritmos: repeticin controlada por un contador 1234.9 Cmo formular algoritmos: repeticin controlada por un centinela 1274.10 Cmo formular algoritmos: instrucciones de control anidadas 1344.11 Operadores de asignacin compuestos 1384.12 Operadores de incremento y decremento 1394.13 Tipos primitivos 1424.14 (Opcional) Ejemplo prctico de GUI y grfi cos: creacin de dibujos simples 1424.15 (Opcional) Ejemplo prctico de Ingeniera de Software: identifi cacin de los atributos de las clases 1464.16 Conclusin 1505 Instrucciones de control: parte 2 1645.1 Introduccin 1655.2 Fundamentos de la repeticin controlada por contador 1655.3 Instruccin de repeticin for 1675.4 Ejemplos sobre el uso de la instruccin for 1715.5 Instruccin de repeticin do...while 1745.6 Instruccin de seleccin mltiple switch 1765.7 Instrucciones break y continue 1835.8 Operadores lgicos 1855.9 Resumen sobre programacin estructurada 1905.10 (Opcional) Ejemplo prctico de GUI y grfi cos: dibujo de rectngulos y valos 1945.11 (Opcional) Ejemplo prctico de Ingeniera de Software: cmo identifi car los estadosy actividades de los objetos 1975.12 Conclusin 2006 Mtodos: un anlisis ms detallado 2116.1 Introduccin 2126.2 Mdulos de programas en Java 2126.3 Mtodos static, campos static y la clase Math 2146.4 Declaracin de mtodos con mltiples parmetros 2166.5 Notas acerca de cmo declarar y utilizar los mtodos 2196.6 Pila de llamadas a los mtodos y registros de activacin 2216.7 Promocin y conversin de argumentos 221 9. Contenido ix6.8 Paquetes de la API de Java 2226.9 Ejemplo prctico: generacin de nmeros aleatorios 2246.9.1 Escalamiento y desplazamiento generalizados de nmeros aleatorios 2276.9.2 Repetitividad de nmeros aleatorios para prueba y depuracin 2286.10 Ejemplo prctico: un juego de probabilidad (introduccin a las enumeraciones) 2286.11 Alcance de las declaraciones 2326.12 Sobrecarga de mtodos 2356.13 (Opcional) Ejemplo prctico de GUI y grfi cos: colores y fi guras rellenas 2386.14 (Opcional) Ejemplo prctico de Ingeniera de Software: identifi cacin de las operacionesde las clases 2416.15 Conclusin 2467 Arreglos 2607.1 Introduccin 2617.2 Arreglos 2617.3 Declaracin y creacin de arreglos 2627.4 Ejemplos acerca del uso de los arreglos 2647.5 Ejemplo prctico: simulacin para barajar y repartir cartas 2727.6 Instruccin for mejorada 2747.7 Paso de arreglos a los mtodos 2767.8 Ejemplo prctico: la clase LibroCalificaciones que usa un arreglo paraalmacenar las califi caciones 2797.9 Arreglos multidimensionales 2847.10 Ejemplo prctico: la clase LibroCalificaciones que usa un arreglo bidimensional 2887.11 Listas de argumentos de longitud variable 2937.12 Uso de argumentos de lnea de comandos 2947.13 (Opcional) Ejemplo prctico de GUI y grfi cos: cmo dibujar arcos 2967.14 (Opcional) Ejemplo prctico de Ingeniera de Software: colaboracin entre los objetos 2997.15 Conclusin 3058 Clases y objetos: un anlisis ms detallado 3258.1 Introduccin 3268.2 Ejemplo prctico de la clase Tiempo 3278.3 Control del acceso a los miembros 3308.4 Referencias a los miembros del objeto actual mediante this 3318.5 Ejemplo prctico de la clase Tiempo: constructores sobrecargados 3338.6 Constructores predeterminados y sin argumentos 3388.7 Observaciones acerca de los mtodos Establecer y Obtener 3388.8 Composicin 3408.9 Enumeraciones 3428.10 Recoleccin de basura y el mtodo finalize 3458.11 Miembros de clase static 3458.12 Declaracin static import 3508.13 Variables de instancia final 3518.14 Reutilizacin de software 3538.15 Abstraccin de datos y encapsulamiento 3548.16 Ejemplo prctico de la clase Tiempo: creacin de paquetes 3558.17 Acceso a paquetes 3608.18 (Opcional) Ejemplo prctico de GUI y grfi cos: uso de objetos con grfi cos 3618.19 (Opcional) Ejemplo prctico de Ingeniera de Software: inicio de la programacin de las clasesdel sistema ATM 3648.20 Conclusin 369 10. x Contenido9 Programacin orientada a objetos: herencia 3789.1 Introduccin 3799.2 Superclases y subclases 3809.3 Miembros protected 3829.4 Relacin entre las superclases y las subclases 3829.4.1 Creacin y uso de una clase EmpleadoPorComision 3839.4.2 Creacin de una clase EmpleadoBaseMasComision sin usar la herencia 3879.4.3 Creacin de una jerarqua de herencia EmpleadoPorComision-EmpleadoBaseMasComision 3919.4.4 La jerarqua de herencia EmpleadoPorComision-EmpleadoBaseMasComisionmediante el uso de variables de instancia protected 3949.4.5 La jerarqua de herencia EmpleadoPorComision-EmpleadoBaseMasComisionmediante el uso de variables de instancia private 3999.5 Los constructores en las subclases 4049.6 Ingeniera de software mediante la herencia 4099.7 La clase object 4109.8 (Opcional) Ejemplo prctico de GUI y grfi cos: mostar texto e imgenes usando etiquetas 4119.9 Conclusin 41310 Programacin orientada a objetos: polimorfi smo 41710.1 Introduccin 41810.2 Ejemplos del polimorfi smo 41910.3 Demostracin del comportamiento polimrfi co 42010.4 Clases y mtodos abstractos 42310.5 Ejemplo prctico: sistema de nmina utilizando polimorfi smo 42510.5.1 Creacin de la superclase abstracta Empleado 42610.5.2 Creacin de la subclase concreta EmpleadoAsalariado 42610.5.3 Creacin de la subclase concreta EmpleadoPorHoras 42910.5.4 Creacin de la subclase concreta EmpleadoPorComision 43110.5.5 Creacin de la subclase concreta indirecta EmpleadoBaseMasComision 43210.5.6 Demostracin del procesamiento polimrfi co, el operador instanceof yla conversin descendente 43310.5.7 Resumen de las asignaciones permitidas entre variables de la superclase y de la subclase 43710.6 Mtodos y clases final 43810.7 Ejemplo prctico: creacin y uso de interfaces 43910.7.1 Desarrollo de una jerarqua PorPagar 44010.7.2 Declaracin de la interfaz PorPagar 44110.7.3 Creacin de la clase Factura 44110.7.4 Modifi cacin de la clase Empleado para implementar la interfaz PorPagar 44310.7.5 Modifi cacin de la clase EmpleadoAsalariado para usarla en la jerarqua PorPagar 44510.7.6 Uso de la interfaz PorPagar para procesar objetos Factura y Empleadomediante el polimorfi smo 44610.7.7 Declaracin de constantes con interfaces 44810.7.8 Interfaces comunes de la API de Java 44810.8 (Opcional) Ejemplo prctico de GUI y grfi cos: realizar dibujos mediante el polimorfi smo 44910.9 (Opcional) Ejemplo prctico de Ingeniera de Software: incorporacin de la herencia enel sistema ATM 45110.10 Conclusin 457 11. Contenido xi11 Componentes de la GUI: parte 1 46211.1 Introduccin 46311.2 Entrada/salida simple basada en GUI con JOptionPane 46411.3 Generalidades de los componentes de Swing 46711.4 Mostrar texto e imgenes en una ventana 46911.5 Campos de texto y una introduccin al manejo de eventos con clases anidadas 47411.6 Tipos de eventos comunes de la GUI e interfaces de escucha 47911.7 Cmo funciona el manejo de eventos 48111.8 JButton 48311.9 Botones que mantienen el estado 48611.9.1 JCheckBox 48611.9.2 JRadioButton 48911.10 JComboBox y el uso de una clase interna annima para el manejo de eventos 49211.11 JList 49511.12 Listas de seleccin mltiple 49711.13 Manejo de eventos de ratn 50011.14 Clases adaptadoras 50411.15 Subclase de JPanel para dibujar con el ratn 50711.16 Manejo de eventos de teclas 51011.17 Administradores de esquemas 51311.17.1 FlowLayout 51411.17.2 BorderLayout 51711.17.3 GridLayout 52011.18 Uso de paneles para administrar esquemas ms complejos 52211.19 JTextArea 52311.20 Conclusin 52612 Grfi cos y Java 2D 53912.1 Introduccin 54012.2 Contextos y objetos de grfi cos 54212.3 Control de colores 54212.4 Control de tipos de letra 54812.5 Dibujo de lneas, rectngulos y valos 55412.6 Dibujo de arcos 55812.7 Dibujo de polgonos y polilneas 56012.8 La API Java 2D 56312.9 Conclusin 56913 Manejo de excepciones 57813.1 Introduccin 57913.2 Generalidades acerca del manejo de excepciones 58013.3 Ejemplo: divisin entre cero sin manejo de excepciones 58013.4 Ejemplo: manejo de excepciones tipo ArithmeticException e InputMismatchException 58213.5 Cundo utilizar el manejo de excepciones 58713.6 Jerarqua de excepciones en Java 58713.7 Bloque finally 59013.8 Limpieza de la pila 59413.9 printStackTrace, getStackTrace y getMessage 59513.10 Excepciones encadenadas 59713.11 Declaracin de nuevos tipos de excepciones 59913.12 Precondiciones y poscondiciones 600 12. xii Contenido13.13 Aserciones 60113.14 Conclusin 60214 Archivos y fl ujos 60814.1 Introduccin 60914.2 Jerarqua de datos 61014.3 Archivos y fl ujos 61114.4 La clase File 61314.5 Archivos de texto de acceso secuencial 61714.5.1 Creacin de un archivo de texto de acceso secuencial 61714.5.2 Cmo leer datos de un archivo de texto de acceso secuencial 62314.5.3 Ejemplo prctico: un programa de solicitud de crdito 62514.5.4 Actualizacin de archivos de acceso secuencial 63014.6 Serializacin de objetos 63014.6.1 Creacin de un archivo de acceso secuencial mediante el uso de la serializacinde objetos 63114.6.2 Lectura y deserializacin de datos de un archivo de acceso secuencial 63614.7 Clases adicionales de java.io 63814.8 Abrir archivos con JFileChooser 64014.9 Conclusin 64315 Recursividad 65315.1 Introduccin 65415.2 Conceptos de recursividad 65515.3 Ejemplo de uso de recursividad: factoriales 65515.4 Ejemplo de uso de recursividad: serie de Fibonacci 65815.5 La recursividad y la pila de llamadas a mtodos 66115.6 Comparacin entre recursividad e iteracin 66215.7 Las torres de Hanoi 66415.8 Fractales 66615.9 Vuelta atrs recursiva (backtracking) 67615.10 Conclusin 67615.11 Recursos en Internet y Web 67616 Bsqueda y ordenamiento 68516.1 Introduccin 68616.2 Algoritmos de bsqueda 68716.2.1 Bsqueda lineal 68716.2.2 Bsqueda binaria 69016.3 Algoritmos de ordenamiento 69516.3.1 Ordenamiento por seleccin 69516.3.2 Ordenamiento por insercin 69916.3.3 Ordenamiento por combinacin 70216.4 Invariantes 70816.5 Conclusin 70917 Estructuras de datos 71417.1 Introduccin 71517.2 Clases de envoltura de tipos para los tipos primitivos 71617.3 Autoboxing y autounboxing 716 13. Contenido xiii17.4 Clases autorreferenciadas 71717.5 Asignacin dinmica de memoria 71717.6 Listas enlazadas 71817.7 Pilas 72617.8 Colas 73017.9 rboles 73317.10 Conclusin 73918 Genricos 76118.1 Introduccin 76218.2 Motivacin para los mtodos genricos 76218.3 Mtodos genricos: implementacin y traduccin en tiempo de compilacin 76418.4 Cuestiones adicionales sobre la traduccin en tiempo de compilacin: mtodos que utilizanun parmetro de tipo como tipo de valor de retorno 76718.5 Sobrecarga de mtodos genricos 77018.6 Clases genricas 77018.7 Tipos crudos (raw) 77918.8 Comodines en mtodos que aceptan parmetros de tipo 78318.9 Genricos y herencia: observaciones 78718.10 Conclusin 78718.11 Recursos en Internet y Web 78719 Colecciones 79219.1 Introduccin 79319.2 Generalidades acerca de las colecciones 79419.3 La clase Arrays 79419.4 La interfaz Collection y la clase Collections 79719.5 Listas 79819.5.1 ArrayList e Iterator 79919.5.2 LinkedList 80019.5.3 Vector 80519.6 Algoritmos de las colecciones 80819.6.1 El algoritmo sort 80919.6.2 El algoritmo shuffle 81219.6.3 Los algoritmos reverse, fill, copy, max y min 81519.6.4 El algoritmo binarySearch 81619.6.5 Los algoritmos addAll, frequency y disjoint 81819.7 La clase Stack del paquete java.util 82019.8 La clase PriorityQueue y la interfaz Queue 82219.9 Conjuntos 82319.10 Mapas 82619.11 La clase Properties 82919.12 Colecciones sincronizadas 83219.13 Colecciones no modifi cables 83319.14 Implementaciones abstractas 83419.15 Conclusin 83420 Introduccin a los applets de Java 84120.1 Introduccin 84220.2 Applets de muestra incluidos en el JDK 84220.3 Applet simple en Java: cmo dibujar una cadena 846 14. xiv Contenido20.3.1 Cmo ejecutar un applet en el appletviewer 84820.3.2 Ejecucin de un applet en un explorador Web 85020.4 Mtodos del ciclo de vida de los applets 85020.5 Cmo inicializar una variable de instancia con el mtodo int 85120.6 Modelo de seguridad caja de arena 85320.7 Recursos en Internet y Web 85320.8 Conclusin 85421 Multimedia: applets y aplicaciones 85821.1 Introduccin 85921.2 Cmo cargar, mostrar y escalar imgenes 86021.3 Animacin de una serie de imgenes 86221.4 Mapas de imgenes 86721.5 Carga y reproduccin de clips de audio 86921.6 Reproduccin de video y otros medios con el Marco de trabajo de medios de Java 87221.7 Conclusin 87621.8 Recursos Web 87622 Componentes de la GUI: parte 2 88322.1 Introduccin 88422.2 JSlider 88422.3 Ventanas: observaciones adicionales 88822.4 Uso de mens con marcos 88922.5 JPopupMenu 89622.6 Apariencia visual adaptable 89922.7 JDesktopPane y JInternalFrame 90322.8 JTabbedPane 90622.9 Administradores de esquemas: BoxLayout y GridBagLayout 90822.10 Conclusin 92023 Subprocesamiento mltiple 92523.1 Introduccin 92623.2 Estados de los subprocesos: ciclo de vida de un subproceso 92723.3 Prioridades y programacin de subprocesos 92923.4 Creacin y ejecucin de subprocesos 93123.4.1 Objetos Runnable y la clase Thread 93123.4.2 Administracin de subprocesos con el marco de trabajo Executor 93423.5 Sincronizacin de subprocesos 93523.5.1 Cmo compartir datos sin sincronizacin 93623.5.2 Cmo compartir datos con sincronizacin: hacer las operaciones atmicas 94023.6 Relacin productor/consumidor sin sincronizacin 94323.7 Relacin productor/consumidor: ArrayBlockingQueue 94923.8 Relacin productor/consumidor con sincronizacin 95223.9 Relacin productor/consumidor: bferes delimitados 95723.10 Relacin productor/consumidor: las interfaces Lock y Condition 96423.11 Subprocesamiento mltiple con GUIs 97023.11.1 Realizacin de clculos en un subproceso trabajador 97023.11.2 Procesamiento de resultados inmediatos con SwingWorker 97623.12 Otras clases e interfaces en java.util.concurrent 98223.13 Conclusin 983 15. Contenido xv24 Redes 99224.1 Introduccin 99324.2 Manipulacin de URLs 99424.3 Cmo leer un archivo en un servidor Web 99824.4 Cmo establecer un servidor simple utilizando sockets de fl ujo 100124.5 Cmo establecer un cliente simple utilizando sockets de fl ujo 100324.6 Interaccin entre cliente/servidor mediante conexiones de socket de fl ujo 100424.7 Interaccin entre cliente/servidor sin conexin mediante datagramas 101424.8 Juego de Tres en raya (Gato) tipo cliente/servidor, utilizando un servidor consubprocesamiento mltiple 102124.9 La seguridad y la red 103424.10 [Bono Web] Ejemplo prctico: servidor y cliente DeitelMessenger 103424.11 Conclusin 103525 Acceso a bases de datos con JDBC 104125.1 Introduccin 104225.2 Bases de datos relacionales 104325.3 Generalidades acerca de las bases de datos relacionales: la base de datos libros 104425.4 SQL 104725.4.1 Consulta bsica SELECT 104725.4.2 La clusula WHERE 104825.4.3 La clusula ORDER BY 105025.4.4 Cmo fusionar datos de varias tablas: INNER JOIN 105125.4.5 La instruccin INSERT 105325.4.6 La instruccin UPDATE 105325.4.7 La instruccin DELETE 105425.5 Instrucciones para instalar MySQL y MySQL Connector/J 105525.6 Instrucciones para establecer una cuenta de usuario de MySQL 105625.7 Creacin de la base de datos libros en MySQL 105725.8 Manipulacin de bases de datos con JDBC 105725.8.1 Cmo conectarse y realizar consultas en una base de datos 105725.8.2 Consultas en la base de datos libros 106225.9 La interfaz RowSet 107325.10 Java DB/Apache Derby 107525.11 Objetos PreparedStatement 107625.12 Procedimientos almacenados 109025.13 Procesamiento de transacciones 109125.14 Conclusin 109125.15 Recursos Web y lecturas recomendadas 1092Los captulos 26 a 30 as como los apndices, los encontrar en el CD que acompaa este libro.26 Aplicaciones Web: parte 1 110126.1 Introduccin 110226.2 Transacciones HTTP simples 110326.3 Arquitectura de aplicaciones multinivel 110526.4 Tecnologas Web de Java 110626.4.1 Servlets 110626.4.2 JavaServer Pages 110626.4.3 JavaServer Faces 110726.4.4 Tecnologas Web en Java Studio Creator 2 1108 16. xvi Contenido26.5 Creacin y ejecucin de una aplicacin simple en Java Studio Creator 2 110826.5.1 Anlisis de un archivo JSP 110926.5.2 Anlisis de un archivo de bean de pgina 111126.5.3 Ciclo de vida del procesamiento de eventos 111526.5.4 Relacin entre la JSP y los archivos de bean de pgina 111526.5.5 Anlisis del XHTML generado por una aplicacin Web de Java 111526.5.6 Creacin de una aplicacin Web en Java Studio Creator 2 111726.6 Componentes JSF 112326.6.1 Componentes de texto y grfi cos 112326.6.2 Validacin mediante los componentes de validacin y los validadores personalizados 112826.7 Rastreo de sesiones 113726.7.1 Cookies 113826.7.2 Rastreo de sesiones con el objeto SessionBean 115026.8 Conclusin 116226.9 Recursos Web 116327 Aplicaciones Web: parte 2 117327.1 Introduccin 117427.2 Acceso a bases de datos en las aplicaciones Web 117427.2.1 Creacin de una aplicacin Web que muestra datos de una base de datos 117527.2.2 Modifi cacin del archivo de bean de pgina para la aplicacin LibretaDirecciones 118327.3 Componentes JSF habilitados para Ajax 118527.3.1 Biblioteca de componentes Java BluePrints 118627.4 Autocomplete Text Field y formularios virtuales 118727.4.1 Confi guracin de los formularios virtuales 118727.4.2 Archivo JSP con formularios virtuales y un AutoComplete Text Field 118927.4.3 Cmo proporcionar sugerencias para un AutoComplete Text Field 119227.5 Componente Map Viewer de Google Maps 119627.5.1 Cmo obtener una clave de la API Google Maps 119627.5.2 Cmo agregar un componente y un Map Viewer a una pgina 119627.5.3 Archivo JSP con un componente Map Viewer 119727.5.4 Bean de pgina que muestra un mapa en el componente Map Viewer 120127.6 Conclusin 120627.7 Recursos Web 120628 Servicios Web JAX-WS, Web 2.0 y Mash-ups 121228.1 Introduccin 121328.1.1 Descarga, instalacin y confi guracin de Netbeans 5.5 y Sun Java SystemApplication Server 121428.1.2 Centro de recursos de servicios Web y Centros de recursos sobre Javaen www.deitel.com 121528.2 Fundamentos de los servicios Web de Java 121528.3 Creacin, publicacin, prueba y descripcin de un servicio Web 121628.3.1 Creacin de un proyecto de aplicacin Web y cmo agregar una clase de servicioWeb en Netbeans 121628.3.2 Defi nicin del servicio Web EnteroEnorme en Netbeans 121728.3.3 Publicacin del servicio Web EnteroEnorme desde Netbeans 122128.3.4 Prueba del servicio Web EnteroEnorme con la pgina Web Tester deSun Java System Application Server 122228.3.5 Descripcin de un servicio Web con el Lenguaje de descripcin de serviciosWeb (WSDL) 1224 17. Contenido xvii28.4 Cmo consumir un servicio Web 122428.4.1 Creacin de un cliente para consumir el servicio Web EnteroEnorme 122528.4.2 Cmo consumir el servicio Web EnteroEnorme 122728.5 SOAP 123428.6 Rastreo de sesiones en los servicios Web 123428.6.1 Creacin de un servicio Web Blackjack 123528.6.2 Cmo consumir el servicio Web Blackjack 123928.7 Cmo consumir un servicio Web controlado por base de datos desde una aplicacin Web 124928.7.1 Confi guracin de Java DB en Netbeans y creacin de la base de datos Reservacion 124928.7.2 Creacin de una aplicacin Web para interactuar con el servicio Web Reservacion 125328.8 Cmo pasar un objeto de un tipo defi nido por el usuario a un servicio Web 125828.9 Conclusin 126628.10 Recursos Web 126729 Salida con formato 127529.1 Introduccin 127629.2 Flujos 127629.3 Aplicacin de formato a la salida con printf 127629.4 Impresin de enteros 127729.5 Impresin de nmeros de punto fl otante 127829.6 Impresin de cadenas y caracteres 127929.7 Impresin de fechas y horas 128029.8 Otros caracteres de conversin 128329.9 Impresin con anchuras de campo y precisiones 128429.10 Uso de banderas en la cadena de formato de printf 128529.11 Impresin con ndices como argumentos 128929.12 Impresin de literales y secuencias de escape 129029.13 Aplicacin de formato a la salida con la clase Formatter 129029.14 Conclusin 129130 Cadenas, caracteres y expresiones regulares 129730.1 Introduccin 129830.2 Fundamentos de los caracteres y las cadenas 129830.3 La clase String 129930.3.1 Constructores de String 129930.3.2 Mtodos length, charAt y getChars de String 130030.3.3 Comparacin entre cadenas 130130.3.4 Localizacin de caracteres y subcadenas en las cadenas 130530.3.5 Extraccin de subcadenas de las cadenas 130730.3.6 Concatenacin de cadenas 130830.3.7 Mtodos varios de String 130830.3.8 Mtodo valueOf de String 130930.4 La clase StringBuilder 131130.4.1 Constructores de StringBuilder 131130.4.2 Mtodos length, capacity, setLength y ensureCapacity de StringBuilder 131230.4.3 Mtodos charAt, setCharAt, getChars y reverse de StringBuilder 131330.4.4 Mtodos append de StringBuilder 131430.4.5 Mtodos de insercin y eliminacin de StringBuilder 131630.5 La clase Character 131730.6 La clase StringTokenizer 132130.7 Expresiones regulares, la clase Pattern y la clase Matcher 132230.8 Conclusin 1330 18. xviii ContenidoA Tabla de precedencia de los operadores 1340B Conjunto de caracteres ASCII 1342C Palabras clave y palabras reservadas 1343D Tipos primitivos 1344E Sistemas numricos 1345E.1 Introduccin 1346E.2 Abreviatura de los nmeros binarios como nmeros octales y hexadecimales 1348E.3 Conversin de nmeros octales y hexadecimales a binarios 1349E.4 Conversin de un nmero binario, octal o hexadecimal a decimal 1350E.5 Conversin de un nmero decimal a binario, octal o hexadecimal 1351E.6 Nmeros binarios negativos: notacin de complemento a dos 1352F GroupLayout 1357F.1 Introduccin 1357F.2 Fundamentos de GroupLayout 1357F.3 Creacin de un objeto SelectorColores 1358F.4 Recursos Web sobre GroupLayout 1367G Componentes de integracin Java Desktop (JDIC) 1368G.1 Introduccin 1368G.2 Pantallas de inicio 1368G.3 La clase Desktop 1370G.4 Iconos de la bandeja 1371G.5 Proyectos JDIC Incubator 1373G.6 Demos de JDIC 1373H Mashups 1374ndice 1381 19. PrefacioNo vivas ms en fragmentos, slo conctate.Edgar Morgan FosterBienvenido a Java y Cmo programar en Java, 7 edicin! En Deitel & Associates escribimos para Prentice Halllibros de texto sobre lenguajes de programacin y libros de nivel profesional, impartimos capacitacin a empresasen todo el mundo y desarrollamos negocios en Internet. Fue un placer escribir esta edicin ya que refl eja cam-biosimportantes en el lenguaje Java y en las formas de impartir y aprender programacin. Se han realizado ajustesconsiderables en todos los captulos.Caractersticas nuevas y mejoradasHe aqu una lista de las actualizaciones que hemos realizado a la 6 y 7 ediciones:Actualizamos todo el libro a la nueva plataforma Java Standard Edition 6 (Mustang) y lo revisamoscuidadosamente, en base a la Especifi cacin del lenguaje Java.Revisamos la presentacin conforme a las recomendaciones del currculum de ACM/IEEE.Reforzamos nuestra pedagoga anticipada sobre las clases y los objetos, poniendo especial atencin a laorientacin de los profesores universitarios en nuestros equipos de revisin, para asegurarnos de obtenerel nivel conceptual correcto. Todo el libro est orientado a objetos, y las explicaciones sobre la POO sonclaras y accesibles. En el captulo 1 presentamos los conceptos bsicos y la terminologa de la tecnologade objetos. Los estudiantes desarrollan sus primeras clases y objetos personalizados en el captulo 3. Alpresentar los objetos y las clases en los primeros captulos, hacemos que los estudiantes piensen acercade objetos de inmediato, y que dominen estos conceptos con ms profundidad.La primera presentacin de clases y objetos incluye los ejemplos prcticos de las clases Tiempo, Empleadoy LibroCalificaciones, los cuales van haciendo su propio camino a travs de varias secciones y captu-los,presentando conceptos de OO cada vez ms profundos.Los profesores que imparten cursos introductorios tienen una amplia opcin en cuanto a la cantidadde GUI y grfi cos a cubrir; desde cero, a una secuencia introductoria de diez secciones breves, hasta untratamiento detallado en los captulos 11, 12 y 22, y en el apndice F.Adaptamos nuestra presentacin orientada a objetos para utilizar la versin ms reciente de UML(Lenguaje Unifi cado de Modelado): UML 2, el lenguaje grfi co estndar en la industria para modelarsistemas orientados a objetos.En los captulos 1-8 y 10 presentamos y adaptamos el ejemplo prctico opcional del cajero automtico(ATM) de DOO/UML 2. Incluimos un apndice Web adicional, con la implementacin completa delcdigo. D un vistazo a los testimonios que se incluyen en la parte posterior del libro.Agregamos varios ejemplos prcticos sustanciales sobre programacin Web orientada a objetos.Actualizamos el captulo 25, Acceso a bases de datos con JDBC, para incluir JDBC 4 y utilizar el nuevosistema de administracin de bases de datos Java DB/Apache Derby, adems de MySQL. Este captuloincluye un ejemplo prctico OO sobre el desarrollo de una libreta de direcciones controlada por unabase de datos, la cual demuestra las instrucciones preparadas y el descubrimiento automtico de contro-ladoresde JDBC 4.Agregamos los captulos 26 y 27, Aplicaciones Web: partes 1 y 2, que introducen la tecnologa Java-Server Faces (JSF) y la utilizan con Sun Java Studio Creador 2 para construir aplicaciones Web de unamanera rpida y sencilla. El captulo 26 incluye ejemplos sobre la creacin de GUIs de aplicaciones Web, 20. xx Prefacioel manejo de eventos, la validacin de formularios y el rastreo de sesiones. El material de JSF sustituyelos captulos anteriores sobre servlets y JavaServer Pages (JSP).Agregamos el captulo 27, Aplicaciones Web: parte 2, que habla acerca del desarrollo de aplicacionesWeb habilitadas para Ajax, usando las tecnologas JavaServer Faces y Java BluePrints. Este captuloincluye una aplicacin de libreta de direcciones Web multiniveles, controlada por una base de datos, quepermite a los usuarios agregar y buscar contactos, y mostrar las direcciones de los contactos en mapasde Google Maps. Esta aplicacin habilitada para Ajax le proporciona una sensacin real del desarrolloWeb 2.0. La aplicacin utiliza Componentes JSF habilitados para Ajax para sugerir los nombres de loscontactos, mientras el usuario escribe un nombre para localizar y mostrar una direccin localizada enun mapa de Google Maps.Agregamos el captulo 28, Servicios Web JAX-WS, Web 2.0 y Mash-ups que utiliza un mtodo basadoen herramientas para crear y consumir servicios Web, una capacidad tpica de Web 2.0. Los ejemplosprcticos incluyen el desarrollo de los servicios Web del juego de blackjack y un sistema de reservacionesde una aerolnea.Utilizamos el nuevo mtodo basado en herramientas para desarrollar aplicaciones Web con rapidez;todas las herramientas pueden descargarse sin costo.Fundamos la Iniciativa Deitel de Negocios por Internet (Deitel Internet Business Initiative) con 60 nue-voscentros de recursos para apoyar a nuestros lectores acadmicos y profesionales. D un vistazo a nues-trosnuevos centros de recursos (www.deitel.com/resourcecenters.html), incluyendo: Java SE 6(Mustang), Java, Evaluacin y Certifi cacin de Java, Patrones de Diseo de Java, Java EE 5, Motoresde Bsqueda de Cdigo y Sitios de Cdigo, Programacin de Juegos, Proyectos de Programacin ymuchos ms. Regstrese en el boletn de correo electrnico gratuito Deitel Buzz Online (www.deitel.com/newsletter/subscribe.html); cada semana anunciamos nuestro(s) centro(s) de recurso(s) msreciente(s); adems incluimos otros temas de inters para nuestros lectores.Hablamos sobre los conceptos clave de la comunidad de ingeniera de software, como Web 2.0, Ajax,SOA, servicios Web, software de cdigo fuente abierto, patrones de diseo, mashups, refabricacin,programacin extrema, desarrollo gil de software, prototipos rpidos y mucho ms.Rediseamos por completo el captulo 23, Subprocesamiento mltiple [nuestro agradecimiento especiala Brian Goetz y Joseph Bowbeer, coautores de Java Concurrency in Practice, Addison-Wesley, 2006].Hablamos sobre la nueva clase SwingWorker para desarrollar interfaces de usuario con subprocesamien-tomltiple.Hablamos sobre los nuevos Componentes de Integracin de Escritorio de Java (JDIC), como las panta-llasde inicio (splash screens) y las interacciones con la bandeja del sistema.Hablamos sobre el nuevo administrador de esquemas GroupLayout en el contexto de la herramienta dediseo de GUI NetBeans 5.5 Matisse para crear GUIs portables que se adhieran a los lineamientosde diseo de GUI de la plataforma subyacente.Presentamos las nuevas caractersticas de ordenamiento y fi ltrado de JTable, que permiten al usuarioreordenar los datos en un objeto JTable y fi ltrarlos mediante expresiones regulares.Presentamos un tratamiento detallado de los genricos y las colecciones de genricos.Introducimos los mashups, aplicaciones que, por lo general, se crean mediante llamadas a servicios Web(y/o usando fuentes RSS) de dos o ms sitios; otra caracterstica tpica de Web 2.0.Hablamos sobre la nueva clase StringBuilder, que tiene un mejor desempeo que StringBuffer enaplicaciones sin subprocesamiento.Presentamos las anotaciones, que reducen en gran parte la cantidad de cdigo necesario para crear apli-caciones.Las caractersticas que se presentan en Cmo programar en Java, 7a edicin, incluyen:Cmo obtener entrada con formato mediante la clase Scanner.Mostrar salida con formato mediante el mtodo printf del objeto System.out. 21. Prefacio xxiInstrucciones for mejoradas para procesar elementos de arreglos y colecciones.Declaracin de mtodos con listas de argumentos de longitud variable (varargs).Uso de clases enum que declaran conjuntos de constantes.Importacin de los miembros static de una clase para usarlos en otra.Conversin de valores de tipo primitivo a objetos de envolturas de tipo y viceversa, usando autoboxingy auto-unboxing, respectivamente.Uso de genricos para crear modelos generales de mtodos y clases que pueden declararse una vez, perousarse con muchos tipos de datos distintos.Uso de las estructuras de datos mejoradas para genricos de la API Collections.Uso de la API Concurrency para implementar aplicaciones con subprocesamiento mltiple.Uso de objetos RowSet de JDBC para acceder a los datos en una base de datos.Todo esto ha sido revisado cuidadosamente por distinguidos profesores y desarrolladores de la industria, quetrabajaron con nosotros en Cmo programar en Java 6 y 7 ediciones.Creemos que este libro y sus materiales de apoyo proporcionarn a los estudiantes y profesionales una expe-rienciainformativa, interesante, retadora y placentera. El libro incluye una extensa suite de materiales comple-mentariospara ayudar a los profesores a maximizar la experiencia de aprendizaje de sus estudiantes.Cmo programar en Java 7 edicin presenta cientos de programas completos y funcionales, y describe susentradas y salidas. ste es nuestro caracterstico mtodo de cdigo activo (live code); presentamos la mayorade los conceptos de programacin de Java en el contexto de programas funcionales completos.Si surge alguna duda o pregunta a medida que lee este libro, enve un correo electrnico a [email protected]; le responderemos a la brevedad. Para obtener actualizaciones sobre este libro y el estado de todo el softwarede soporte de Java, adems de las noticias ms recientes acerca de todas las publicaciones y servicios de Deitel,visite www.deitel.com.Regstrese en www.deitel.com/newsletter/subscribe.html para obtener el boletn de correo electrnicoDeitel Buzz Online y visite la pgina www.deitel.com/resourcecenters.html para tener acceso a nuestra listacreciente de centros de recursos.Uso de UML 2 para desarrollar un diseo orientado a objetos de un ATM. UML 2 se ha convertidoen el lenguaje de modelado grfi co preferido para disear sistemas orientados a objetos. Todos los diagramas deUML en el libro cumplen con la especifi cacin UML 2. Utilizamos los diagramas de actividad de UML parademostrar el fl ujo de control en cada una de las instrucciones de control de Java, y usamos los diagramas declases de UML para representar las clases y sus relaciones de herencia en forma visual.Incluimos un ejemplo prctico opcional (pero altamente recomendado) acerca del diseo orientado a objetosmediante el uso de UML. La revisin del ejemplo prctico estuvo a cargo de un distinguido equipo de profesoresy profesionales de la industria relacionados con DOO/UML, incluyendo lderes en el campo de Rational (loscreadores de UML) y el Grupo de administracin de objetos (responsable de la evolucin de UML). En el ejem-ploprctico, diseamos e implementamos por completo el software para un cajero automtico (ATM) simple.Las secciones Ejemplo prctico de Ingeniera de Software al fi nal de los captulos 1 a 8 y 10 presentan unaintroduccin cuidadosamente planeada al diseo orientado a objetos mediante el uso de UML. Presentamos unsubconjunto conciso y simplifi cado de UML 2, y despus lo guiamos a travs de su primera experiencia de dise-o,ideada para los principiantes. El ejemplo prctico no es un ejercicio, sino una experiencia de aprendizaje deprincipio a fi n, que concluye con un recorrido detallado a travs del cdigo completo en Java. Las secciones delEjemplo Prctico de Ingeniera de Software ayudan a los estudiantes a desarrollar un diseo orientado a objetospara complementar los conceptos de programacin orientada a objetos que empiezan a aprender en el captulo 1,y que implementan en el captulo 3. En la primera de estas secciones, al fi nal del captulo 1, introducimoslos conceptos bsicos y la terminologa del DOO. En las secciones opcionales Ejemplo Prctico de Ingeniera deSoftware al fi nal de los captulos 2 a 5, consideramos cuestiones ms sustanciales al emprender la tarea de resolverun problema retador con las tcnicas del DOO. Analizamos un documento de requerimientos tpico que especi-fica un sistema a construir, determina los objetos necesarios para implementar ese sistema, establece los atributosque deben tener estos objetos, fi ja los comportamientos que deben exhibir estos objetos y especifi ca la formaen que deben interactuar los objetos entre s para cumplir con los requerimientos del sistema. En un apndice 22. xxii PrefacioWeb adicional presentamos el cdigo completo de una implementacin en Java del sistema orientado a objetosque diseamos en los primeros captulos. El ejemplo prctico ayuda a preparar a los estudiantes para los tipos deproyectos sustanciales que encontrarn en la industria. Empleamos un proceso de diseo orientado a objetoscuidadosamente desarrollado e incremental para producir un modelo en UML 2 para nuestro sistema ATM.A partir de este diseo, producimos una implementacin sustancial funcional en Java, usando las nociones clavede la programacin orientada a objetos, incluyendo clases, objetos, encapsulamiento, visibilidad, composicin,herencia y polimorfi smo.Grfi co de dependenciasEn el grfi co de la siguiente pgina se muestra las dependencias entre los captulos, para ayudar a los profesores a pla-nearsu programa de estudios. Cmo programar en Java 7 edicin es un libro extenso, apropiado para una variedad decursos de programacin en distintos niveles. Los captulos 1-14 forman una secuencia de programacin elementalaccesible, con una slida introduccin a la programacin orientada a objetos. Los captulos 11, 12, 20, 21 y 22 for-manuna secuencia sustancial de GUI, grfi cos y multimedia. Los captulos 15 a 19 forman una excelente secuenciade estructuras de datos. Los captulos 24 a 28 forman una clara secuencia de desarrollo Web con uso intensivo debases de datos.Mtodo de enseanzaCmo programar en Java 7 edicin contiene una extensa coleccin de ejemplos. El libro se concentra en losprincipios de la buena ingeniera de software, haciendo hincapi en la claridad de los programas. Enseamosmediante ejemplos. Somos educadores que impartimos temas de vanguardia en salones de clases de la industriaalrededor del mundo. El Dr. Harvey M. Deitel tiene 20 aos de experiencia en la enseanza universitaria y 17, enla enseanza en la industria. Paul Deitel tiene 15 aos de experiencia en la enseanza en la industria. Juntos hanimpartido cursos, en todos los niveles, a clientes gubernamentales, industriales, militares y acadmicos de Deitel& Associates.Mtodo del cdigo activo. Cmo programar en Java 7 edicin est lleno de ejemplos de cdigo activo; estosignifi ca que cada nuevo concepto se presenta en el contexto de una aplicacin en Java completa y funcional, quees seguido inmediatamente por una o ms ejecuciones actuales, que muestran las entradas y salidas del programa.Este estilo ejemplifi ca la manera en que enseamos y escribimos acerca de la programacin; a ste le llamamos elmtodo del cdigo activo.Resaltado de cdigo. Colocamos rectngulos de color gris alrededor de los segmentos de cdigo clave en cadaprograma.Uso de fuentes para dar nfasis. Colocamos los trminos clave y la referencia a la pgina del ndice paracada ocurrencia de defi nicin en texto en negritas para facilitar su referencia. Enfatizamos los componentes enpantalla en la fuente Helvtica en negritas (por ejemplo, el men Archivo) y enfatizamos el texto del programaen la fuente Lucida (por ejemplo, int x = 5).Acceso Web. Todos los ejemplos de cdigo fuente para Cmo programar en Java 7 edicin (y para nuestras otraspublicaciones) se pueden descargar en:www.deitel.com/books/jhtp7www.pearsoneducacion.net/deitelEl registro en el sitio es un proceso fcil y rpido. Descargue todos los ejemplos y, a medida que lea las correspon-dientesdiscusiones en el libro de texto, despus ejecute cada programa. Realizar modifi caciones a los ejemplos yver los efectos de esos cambios es una excelente manera de mejorar su experiencia de aprendizaje en Java.Objetivos. Cada captulo comienza con una declaracin de objetivos. Esto le permite saber qu es lo que debeesperar y le brinda la oportunidad, despus de leer el captulo, de determinar si ha cumplido con ellos.Frases. Despus de los objetivos de aprendizaje aparecen una o ms frases. Algunas son graciosas, otras fi losfi cas ylas dems ofrecen ideas interesantes. Esperamos que disfrute relacionando las frases con el material del captulo. 23. 1 Introduccin a las computadoras,Internet y Web2 Introduccin a lasaplicaciones en Java3 Introduccin a las clases y los objetos4 Instrucciones de control: parte 15 Instrucciones de control: parte 26 Mtodos: Un anlisis ms detallado7 Arreglos8 Clases y objetos:un anlisis ms detallado9 Programacin orientadaa objetos: herencia10 Programacin orientadaa objetos: polimorfismoPrefacio xxiii(Opcional) Ruta de GUI y grficos3.9 Uso de cuadros de dilogo4.14 Creacin de dibujos simples5.10 Dibujo de rectngulos y valos6.13 Colores y figuras rellenas7.13 Cmo dibujar arcos8.18 Uso de objetoscon grficos9.8 Mostrar texto e imgenesusando etiquetas10.8 Realizar dibujos medianteel polimorfismo11 Componentes dela GUI: parte 112 Grficos y Java2D25 Acceso abase de datoscon JDBC113 Manejo deexcepciones129 Salida conformato(la mayor parte)30 Cadenas,caracteres yexpresionesregulares15 Recursividad316 Bsqueda yordenamiento17 Estructuras de datos18 Genricos14 Archivosy flujos24 Redes 226 AplicacionesWeb:parte 119 Colecciones parte 223 Subprocesamientomltiple420 Introduccin a losapplets de Java21 Multimedia: appletsy aplicaciones22 Componentes dela GUI: parte 227 AplicacionesWeb:28 Servicios WebJAX-WS, Web 2.0y Mash-ups1. Los captulos 13 y 25 dependen del captulo 11 para la GUI que se utiliza en un ejemplo.2. El captulo 24 depende del captulo 20 para un ejemplo que utiliza un applet. El ejemplo prctico extensoal final de este captulo depende del captulo 22 para la GUI y del captulo 23 para el subprocesamiento mltiple.3. El captulo 15 depende de los captulos 11 y 12 para la GUI y los grficos que se utilizan en un ejemplo.4. El captulo 23 depende del captulo 11 para la GUI que se utiliza en un ejemplo, y de los captulos 18-19 paraun ejemplo.Plan general. El plan general de cada captulo le permite abordar el material de manera ordenada, para poderanticiparse a lo que est por venir y establecer un ritmo cmodo y efectivo de aprendizaje.Ilustraciones/Figuras. Incluimos una gran cantidad de grfi cas, tablas, dibujos lineales, programas y salidas deprograma. Modelamos el fl ujo de control en las instrucciones de control mediante diagramas de actividad en 24. xxiv PrefacioUML. Los diagramas de clases de UML modelan los campos, constructores y mtodos de las clases. En el ejemploprctico opcional del ATM de DOO/UML 2 hacemos uso extensivo de seis tipos principales de diagramas enUML.Tips de programacin. Incluimos tips de programacin para ayudarle a enfocarse en los aspectos importantesdel desarrollo de programas. Estos tips y prcticas representan lo mejor que hemos podido recabar a lo largo deseis dcadas combinadas de experiencia en la programacin y la enseanza. Una de nuestras alumnas, estudiantede matemticas, recientemente nos coment que siente que este mtodo es similar al de resaltar axiomas, teoremasy corolarios en los libros de matemticas, ya que proporciona una base slida sobre la cual se puede construirbuen software.Buena prctica de programacinLas buenas prcticas de programacin llaman la atencin hacia tcnicas que le ayudarn a producir programasms claros, comprensibles y fciles de mantener.Error comn de programacinCon frecuencia, los estudiantes tienden a cometer ciertos tipos de errores; al poner atencin en estos Errores comunesde programacin se reduce la probabilidad de que usted pueda cometerlos.Tip para prevenir erroresEstos tips contienen sugerencias para exponer los errores y eliminarlos de sus programas; muchos de ellos describenaspectos de Java que evitan que los errores entren a los programas.Tip de rendimientoA los estudiantes les gusta turbo cargar sus programas. Estos tips resaltan las oportunidades para hacer que susprogramas se ejecuten ms rpido, o para minimizar la cantidad de memoria que ocupan.Tip de portabilidadIncluimos Tips de portabilidad para ayudarle a escribir el cdigo que pueda ejecutarse en una variedad de plata-formas,y que expliquen cmo es que Java logra su alto grado de portabilidad.Observacin de ingeniera de softwareLas Observaciones de ingeniera de software resaltan los asuntos de arquitectura y diseo, lo cual afecta la cons-truccinde los sistemas de software, especialmente los de gran escala.ArchivoNuevoAbrir...CerrarObservaciones de apariencia visualLe ofrecemos Observaciones de apariencia visual para resaltar las convenciones de la interfaz grfi ca de usuario.Estas observaciones le ayudan a disear interfaces grfi cas de usuario atractivas y amigables para el usuario, en con-formidadcon las normas de la industria.Seccin de conclusin. Cada uno de los captulos termina con una seccin breve de conclusin, que recapitulael contenido del captulo y la transicin al siguiente captulo.Vietas de resumen. Cada captulo termina con estrategias pedaggicas adicionales. Presentamos un resumendetallado del captulo, estilo lista con vietas, seccin por seccin.Terminologa. Incluimos una lista alfabetizada de los trminos importantes defi nidos en cada captulo.Ejercicios de autoevaluacin y respuestas. Se incluyen diversos ejercicios de autoevaluacin con sus respuestas,para que los estudiantes practiquen por su cuenta. 25. Prefacio xxvEjercicios. Cada captulo concluye con un diverso conjunto de ejercicios, incluyendo recordatorios simples determinologa y conceptos importantes; identifi car los errores en muestras de cdigo, escribir instrucciones in-dividualesde programas; escribir pequeas porciones de mtodos y clases en Java; escribir mtodos, clases yprogramas completos; y crear proyectos fi nales importantes. El extenso nmero de ejercicios permite a losinstructores adaptar sus cursos a las necesidades nicas de sus estudiantes, y variar las asignaciones de los cur-soscada semestre. Los profesores pueden usar estos ejercicios para formar tareas, exmenes cortos, exmenesregulares y proyectos fi nales. [NOTA: No nos escriba para solicitarnos acceso al Centro de Recursos paraInstructores. El acceso est limitado estrictamente a profesores universitarios que impartan clases en baseal libro. Los profesores slo pueden obtener acceso a travs de los representantes de Pearson Educacin].Asegrese de revisar nuestro centro de recursos de proyectos de programacin (http://www.deitel.com/ProgrammingProjects/) para obtener muchos ejercicios adicionales y posibilidades de proyectos.Miles de entradas en el ndice. Hemos incluido un extenso ndice, que es til, en especial, cuando se utiliza ellibro como referencia.Doble indexado de ejemplos de cdigo activo de Java. Para cada programa de cdigo fuente en el libro,indexamos la leyenda de la fi gura en forma alfabtica y como subndice, bajo Ejemplos. Esto facilita encontrarlos ejemplos usando las caractersticas especiales.Recursos para el estudiante incluidos enCmo programar en Java 7 edicinHay, disponibles a la venta, una variedad de herramientas de desarrollo, pero ninguna de ellas es necesaria paracomenzar a trabajar con Java. Escribimos Cmo programar en Java 7 edicin utilizando slo el nuevo Kit deDesarrollo de Java Standard Edition (JDK), versin 6.0. Puede descargar la versin actual del JDK del sitio Webde Java de Sun: java.sun.com/javase/downloads/index.jsp. Este sitio tambin contiene las descargas de ladocumentacin del JDK.El CD que se incluye con este libro contienen el Entorno de Desarrollo Integrado (IDE) NetBeans 5.5para desarrollar todo tipo de aplicaciones en Java, y el software Sun Java Studio Creator 2 Update 1 para eldesarrollo de aplicaciones Web. Se proporciona tambin una versin en Windows de MySQL 5.0 CommunityEdition 5.0.27 y MySQL Connector/J 5.0.4, para el procesamiento de datos que se lleva a cabo en los captulos25 a 28.El CD tambin contiene los ejemplos del libro y una pgina Web con vnculos al sitio Web de Deitel &Associates, Inc. Puede cargar esta pgina Web en un explorador Web para obtener un rpido acceso a todos losrecursos.Encontrar recursos adicionales y descargas de software en nuestro centro de recursos de Java SE 6 (Mus-tang),ubicado en:www.deitel.com/JavaSE6Mustang/Java Multimedia Cyber Classroom 7 edicinCmo programar en Java 7 edicin incluye multimedia interactiva con mucho audio y basada en Web, comple-mentariapara el libro Java Multimedia Cyber Classroom, 7 edicin, disponible en ingls. Nuestro Ciber saln declases (Cyber Classroom) basado en Web incluye recorridos con audio de los ejemplos de cdigo de los captulos 1a 14, soluciones a casi la mitad de los ejercicios del libro, un manual de laboratorio y mucho ms. Para obtenerms informacin acerca del Cyber Classroom basado en Web, visite:www.prenhall.com/deitel/cyberclassroom/A los estudiantes que utilizan nuestros Ciber salones de clases les gusta su interactividad y capacidades de refe-rencia.Los profesores nos dicen que sus estudiantes disfrutan al utilizar el Ciber saln de clases y, en consecuencia,invierten ms tiempo en los cursos, dominando un porcentaje mayor del material que en los cursos que sloutilizan libros de texto. 26. xxvi PrefacioRecursos para el instructor de Cmo programar en Java 7 edicinCmo programar en Java 7 edicin tiene una gran cantidad de recursos para los profesores. El Centro de Recursospara Instructores de Prentice Hall contiene el Manual de soluciones, con respuestas para la mayora de los ejerciciosal fi nal de cada captulo, un Archivo de elementos de prueba de preguntas de opcin mltiple (aproximadamentedos por cada seccin del libro) y diapositivas en PowerPoint que contienen todo el cdigo y las fi guras del texto,adems de los elementos en vietas que sintetizan los puntos clave del libro. Los profesores pueden personalizarlas diapositivas. Si usted todava no es un miembro acadmico registrado, pngase en contacto con su represen-tantede Pearson Educacin. Cabe mencionar que todos estos recursos se encuentran en ingls.Boletn de correo electrnico gratuito Deitel Buzz OnlineCada semana, el boletn de correo electrnico Deitel Buzz Online anuncia nuestro(s) centro(s) de recursos msreciente(s) e incluye comentarios acerca de las tendencias y desarrollos en la industria, vnculos a artculos y recur-sosgratuitos de nuestros libros publicados y de las prximas publicaciones, itinerarios de lanzamiento de produc-tos,fe de erratas, retos, ancdotas, informacin sobre nuestros cursos de capacitacin corporativa impartidos porinstructores y mucho ms. Tambin es una buena forma para que usted se mantenga actualizado acerca de todolo relacionado con Cmo programar en Java 7 edicin. Para suscribirse, visite la pgina Web:www.deitel.com/newsletter/subscribe.htmlNovedades en DeitelCentros de recursos y la iniciativa de negocios por Internet de Deitel. Hemos creado muchos centrosde recursos en lnea (en www.deitel.com/resourcecenters.html) para mejorar su experiencia de aprendizajeen Java. Anunciamos nuevos centros de recursos en cada edicin del boletn de correo electrnico Deitel BuzzOnline. Aquellos de especial inters para los lectores de este libro incluyen: Java, Certifi cacin en Java, Patronesde Diseo en Java, Java EE 5, Java SE 6, AJAX, Apache, Motores de Bsqueda de Cdigo y Sitios de Cdigo,Eclipse, Programacin de Juegos, Mashups, MySQL, Cdigo Abierto, Proyectos de Programacin, Web2.0,Web 3.0, Servicios Web y XML. Los centros de recursos de Deitel adicionales incluyen: Programas Afi liados,Servicios de Alerta, ASP.NET, Economa de Atencin, Creacin de Comunidades Web, C, C++, C#, Juegosde Computadora, DotNetNuke, FireFox, Gadgets, Google AdSense, Google Analytics, Google Base, GoogleServices, Google Video, Google Web Toolkit, IE7, Iniciativa de Negocios por Internet, Publicidad por Internet,Internet Video, Linux, Microformatos, .NET, Ning, OpenGL, Perl, PHP, Podcasting, Python, RecommenderSystems, RSS, Ruby, Motores de Bsqueda, Optimizacin de Motores de Bsqueda, Skype, Sudoku, MundosVirtuales, Visual Basic, Wikis, Windows Vista, WinFX y muchos ms por venir.Iniciativa de contenido libre. Nos complace ofrecerle artculos de invitados y tutoriales gratuitos, seleccio-nadosde nuestras publicaciones actuales y futuras como parte de nuestra iniciativa de contenido libre. En cadatema del boletn de correo electrnico Deitel Buzz Online, anunciamos las adiciones ms recientes a nuestrabiblioteca de contenido libre.ReconocimientosUno de los mayores placeres al escribir un libro de texto es el de reconocer el esfuerzo de mucha gente, cuyos nom-bresquiz no aparezcan en la portada, pero cuyo arduo trabajo, cooperacin, amistad y comprensin fue crucialpara la elaboracin de este libro. Mucha gente en Deitel & Associates, Inc. dedic largas horas a este proyecto;queremos agradecer en especial a Abbey Deitel y Barbara Deitel.Tambin nos gustara agradecer a dos participantes de nuestro programa de Pasanta con Honores, que con-tribuyerona esta publicacin: Megan Shuster, con especialidad en ciencias computacionales en el SwarthmoreCollege, y Henry Klementowicz, con especialidad en ciencias computacionales en la Universidad de Columbia.Nos gustara mencionar nuevamente a nuestros colegas que realizaron contribuciones importantes a Cmoprogramar en Java 6 edicin: Andrew B. Goldberg, Jeff Listfi eld, Su Zhang, Cheryl Yaeger, Jing Hu, Sin Han Lo,John Paul Casiello y Christi Kelsey.Somos afortunados al haber trabajado en este proyecto con un talentoso y dedicado equipo de editores pro-fesionalesen Prentice Hall. Apreciamos el extraordinario esfuerzo de Marcia Horton, Directora Editorial de laDivisin de Ingeniera y Ciencias Computacionales de Prentice Hall. Jennifer Cappello y Dolores Mars hicieron 27. Prefacio xxviiun excelente trabajo al reclutar el equipo de revisin del libro y administrar el proceso de revisin. Francesco San-talucia(un artista independiente) y Kristine Carney de Prentice Hall hicieron un maravilloso trabajo al disear laportada del libro; nosotros proporcionamos el concepto y ellos lo hicieron realidad. Vince OBrien, Bob Engel-hardt,Donna Crilly y Marta Samsel hicieron un extraordinario trabajo al administrar la produccin del libro.Deseamos reconocer el esfuerzo de nuestros revisores. Al adherirse a un estrecho itinerario, escrutinizaronel texto y los programas, proporcionando innumerables sugerencias para mejorar la precisin e integridad de lapresentacin.Apreciamos con sinceridad los esfuerzos de nuestros revisores de post-publicacin de la 6 edicin, y nuestrosrevisores de la 7 edicin:Revisores de Cmo programar en Java 7 edicin(incluyendo los revisores de la post-publicacin de la 6 edicin)Revisores de Sun Microsystems: Lance Andersen (Lder de especifi caciones de JDBC/Rowset, Java SE Engi-neering),Ed Burns, Ludovic Champenois (Servidor de Aplicaciones de Sun para programadores de Java EEcon Sun Application Server y herramientas: NetBeans, Studio Enterprise y Studio Creador), James Davidson,Vadiraj Deshpande (Grupo de Integracin de Sistemas de Java Enterprise, Sun Microsystems India), SanjayDhamankar (Grupo Core Developer Platform), Jesse Glick (Grupo NetBeans), Brian Goetz (autor de Java Con-currencyin Practice, Addison-Wesley, 2006), Doug Kohlert (Grupo Web Technologies and Standards), SandeepKonchady (Organizacin de Ingeniera de Software de Java), John Morrison (Grupo Portal Server Product deSun Java System), Winston Prakash, Brandon Taylor (grupo SysNet dentro de la Divisin de Software) y JayashriVisvanathan (Equipo de Java Studio Creador de Sun Microsystems). Revisores acadmicos y de la industria:Akram Al-Rawi (Universidad King Faisal), Mark Biamonte (DataDiret), Ayad Boudiab (Escuela Internacional deChoueifat, Lbano), Joe Bowbeer (Mobile App Consulting), Harlan Brewer (Select Engineering Services), MaritaEllixson (Eglin AFB, Universidad Indiana Wesleyan, Facilitador en Jefe), John Goodson (DataDiret), Anne Hor-ton(Lockheed Martin), Terrell Regis Hull (Logicalis Integration Solutions), Clark Richey (RABA Technologies,LLC, Java Sun Champion), Manfred Riem (UTA Interactive, LLC, Java Sun Champion), Karen Tegtmeyer(Model Technologies, Inc.), David Wolf (Universidad Pacifi c Lutheran) y Hua Yan (Borough of ManhattanCommunity Collage, City University of New York). Revisores de la post-publicacin de Cmo programaren Java 6 edicin: Anne Horton (Lockheed Martin), William Martz (Universidad de Colorado, en ColoradoSprings), Bill OFarrell (IBM), Jeff ry Babb (Universidad Virginia Commonwealth), Jeff rey Six (Universidad deDelaware, Instalaciones Adjuntas), Jesse Glick (Sun Microsystems), Karen Tegtmeyer (Model Technologies, Inc.),Kyle Gabhart (L-3 Communications), Marita Ellixson (Eglin AFB, Universidad Indiana Wesleyan, Facilitador enJefe) y Sean Santry (Consultor independiente).Revisores de Cmo programar en Java 6 edicin(incluyendo a los revisores de la post-publicacin de la 5 edicin)Revisores acadmicos: Karen Arlien (Colegio Estatal de Bismarck), Ben Blake (Universidad Estatal de Cleve-land),Walt Bunch (Universidad Chapman), Marita Ellixson (Eglin AFB/Universidad de Arkansas), EphremEyob (Universidad Estatal de Virginia), Bjorn Foss (Universidad Metropolitana de Florida), Bill Freitas (Th eLawrenceville School), Joe Kasprzyk (Colegio Estatal de Salem), Brian Larson (Modesto Junior College), RobertoLopez-Herrejon (Universidad de Texas en Austin), Dean Mellas (Cerritos College), David Messier (Eastern Uni-versity),Andy Novobilski (Universidad de Tennessee, Chattanooga), Richard Ord (Universidad de California, SanDiego), Gavin Osborne (Saskatchewan Institute of Applied Science & Technology), Donna Reese (UniversidadEstatal de Mississippi), Craig Slinkman (Universidad de Texas en Arlington), Sreedhar Th ota (Western Iowa TechCommunity Collage), Mahendran Velauthapillai (Universidad de Georgetown), Loran Walter (UniversidadTecnolgica de Lawrence) y Stephen Weiss (Universidad de Carolina del Norte en Chapel Hill). Revisores de laindustria: Butch Anton (Wi-Tech Consulting), Jonathan Bruce (Sun Microsystems, Inc.; Lder de Especifi ca-cionesde JCP para JDBC), Gilad Bracha (Sun Microsystems, Inc.; Lder de Especifi caciones de JCP para Gen-ricos),Michael Develle (Consultor independiente), Jonathan Gadzik (Consultor independiente), Brian Goetz(Quiotix Corporation (Miembro del Grupo de Expertos de Especifi caciones de Herramientas de Concurrenciade JCP), Anne Horton (AT&T Bell Laboratories), James Huddleston (Consultor independiente), Peter Jones(Sun Microsystems, Inc.), Doug Kohlert (Sun Microsystems, Inc.), Earl LaBatt (Altaworks Corp./Universidadde New Hampshire), Paul Monday (Sun Microsystems, Inc.), Bill OFarrell (IBM), Cameron Skinner (Embar-caderoTechnologies, Inc.), Brandon Taylor (Sun Microsystems, Inc.) y Karen Tegtmeyer (Consultor indepen- 28. xxviii Prefaciodiente). Revisores del ejemplo prctico opcional de DOO/UML: Sinan Si Alhir (Consultor independiente),Gene Ames (Star HRG), Jan Bergandy (Universidad de Massachussetts en Dartmouth), Marita Ellixson (EglinAFB/Universidad de Arkansas), Jonathan Gadzik (Consultor independiente), Th omas Harder (ITT ESI, Inc.),James Huddleston (Consultor independiente), Terrell Hull (Consultor independiente), Kenneth Hussey (IBM),Joe Kasprzyk (Colegio Estatal de Salem), Dan McCracken (City College of New York), Paul Monday (SunMicrosystems, Inc.), Davyd Norris (Rational Software), Cameron Skinner (Embarcadero Technologies, Inc.),Craig Slinkman (Universidad de Texas en Arlington) y Steve Tockey (Construx Software).Estos profesionales revisaron cada aspecto del libro y realizaron innumerables sugerencias para mejorar laprecisin e integridad de la presentacin.Bueno ah lo tiene! Java es un poderoso lenguaje de programacin que le ayudar a escribir programas conrapidez y efi ciencia. Escala sin problemas hacia el mbito del desarrollo de sistemas empresariales, para ayudar alas organizaciones a crear sus sistemas de informacin crticos. A medida que lea el libro, apreciaremos con sinceri-dadsus comentarios, crticas, correcciones y sugerencias para mejorar el texto. Dirija toda su correspondencia a:[email protected] responderemos oportunamente y publicaremos las correcciones y aclaraciones en nuestro sitio Web,www.deitel.com/books/jHTP7/Esperamos que disfrute aprendiendo con este libro tanto como nosotros disfrutamos el escribirlo!Paul J. DeitelDr. Harvey M. DeitelMaynard, MassachussetsDiciembre del 2006Acerca de los autoresPaul J. Deitel, CEO y Director Tcnico de Deitel & Associates, Inc., es egresado del Sloan School of Manage-mentdel MIT (Massachussets Institute of Technology), en donde estudi Tecnologa de la Informacin. Posee lascertifi caciones Programador Certifi cado en Java (Java Certifi ed Programmer) y Desarrollador Certifi cado en Java(Java Certifi ed Developer), y ha sido designado por Sun Microsystems como Java Champion. A travs de Deitel& Associates, Inc., ha impartido cursos en Java, C, C++, C# y Visual Basic a clientes de la industria, incluyendo:IBM, Sun Microsystems, Dell, Lucent Technologies, Fidelity, NASA en el Centro Espacial Kennedy, el Natio-nalSevere Storm Laboratory, White Sands Missile Range, Rogue Wave Software, Boeing, Stratus, CambridgeTechnology Partners, Open Environment Corporation, One Wave, Hyperion Software, Adra Systems, Entergy,CableData Systems, Nortel Networks, Puma, iRobot, Invensys y muchos ms. Tambin ha ofrecido conferenciasde Java y C++ para la Boston Chapter of the Association for Computing Machinery. l y su padre, el Dr. Harvey M.Deitel, son autores de los libros de programacin ms vendidos en el mundo.Dr. Harvey M. Deitel, es Presidente y Consejero de Estrategia de Deitel & Associates, Inc., tiene 45 aosde experiencia en el campo de la computacin; lo que incluye un amplio trabajo acadmico y en la industria. ElDr. Deitel tiene una licenciatura y una maestra por el MIT y un doctorado de la Universidad de Boston. Tiene20 aos de experiencia como profesor universitario, la cual incluye un puesto vitalicio y el haber sido presidentedel departamento de Ciencias de la computacin en el 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, y piensanescribir muchos ms. Los textos de los Deitel se han ganado el reconocimiento internacional y han sido tradu-cidosal japons, alemn, ruso, espaol, chino tradicional, chino simplifi cado, coreano, francs, polaco, italiano,portugus, griego, urd y turco. El Dr. Deitel ha impartido cientos de seminarios profesionales para grandesempresas, instituciones acadmicas, organizaciones gubernamentales y diversos sectores del ejrcito.Acerca de Deitel & Associates, Inc.Deitel & Associates, Inc. es una empresa reconocida a nivel mundial, dedicada al entrenamiento corporativo yla creacin de contenido, con especializacin en lenguajes de programacin, tecnologa de software para Inter-net/World Wide Web, educacin de tecnologa de objetos y desarrollo de negocios por Internet a travs de su 29. Iniciativa de Negocios en Internet. La empresa proporciona cursos, que son impartidos por instructores, sobrela mayora de los lenguajes y plataformas de programacin, como Java, Java Avanzado, C, C++, C#, Visual C++,Visual Basic, XML, Perl, Python, tecnologa de objetos y programacin en Internet y World Wide Web. Los fun-dadoresde Deitel & Associates, Inc. son el Dr. Harvey M. Deitel y Paul J. Deitel. Sus clientes incluyen muchas delas empresas ms grandes del mundo, agencias gubernamentales, sectores del ejrcito e instituciones acadmicas.A lo largo de su sociedad editorial de 30 aos con Prentice Hall, Deitel & Associates Inc. ha publicado librosde texto de vanguardia sobre programacin, libros profesionales, multimedia interactiva en CD como los CyberClassrooms, Cursos Completos de Capacitacin, cursos de capacitacin basados en Web y contenido electrnico paralos populares sistemas de administracin de cursos WebCT, Blackboard y CourseCompass de Pearson. Deitel &Associates, Inc. y los autores pueden ser contactados mediante correo electrnico en:[email protected] conocer ms acerca de Deitel & Associates, Inc., sus publicaciones y su currculum mundial de la Serie deCapacitacin Corporativa DIVE INTO, visite:www.deitel.comy suscrbase al boletn gratuito de correo electrnico, Deitel Buzz Online, en:www.deitel.com/newsletter/subscribe.htmlPuede verifi car la lista creciente de Centros de Recursos Deitel en:www.deitel.com/resourcecenters.htmlQuienes deseen comprar publicaciones de Deitel pueden hacerlo en:www.deitel.com/books/index.htmlLas empresas, el gobierno, las instituciones militares y acadmicas que deseen realizar pedidos en masa debenhacerlo directamente con Prentice Hall. Para obtener ms informacin, visite:www.prenhall.com/mischtm/support.html#orderPrefacio xxix 30. Antes de empezarAntes de comenzar a utilizar este libro, debe seguir las instrucciones de esta seccin para asegurarse que Java estinstalado de manera apropiada en su computadora.Convenciones de fuentes y nomenclaturaUtilizamos varios tipos de letra para diferenciar los componentes en la pantalla (como los nombres de mens ylos elementos de los mismos) y el cdigo o los comandos en Java. Nuestra convencin es hacer hincapi en loscomponentes en pantalla en una fuente Helvetica sans-serif en negritas (por ejemplo, el men Archivo) y enfatizarel cdigo y los comandos de Java en una fuente Lucida sans-serif (por ejemplo, System.out.println()).Kit de desarrollo de Java Standard Edition (JDK) 6Los ejemplos en este libro se desarrollaron con el Kit de Desarrollo de Java Standard Edition (JDK) 6. Puededescargar la versin ms reciente y su documentacin en:java.sun.com/javase/6/download.jspSi tiene preguntas, enve un correo electrnico a [email protected]. Le responderemos en breve.Requerimientos de software y hardware del sistemaProcesador Pentium III de 500 MHz (mnimo) o de mayor velocidad; Sun Java Studio Creator 2Update 1 requiere un procesador Intel Pentium 4 de 1 GHz (o equivalente).Microsoft Windows Server 2003, Windows XP (con Service Pack 2), Windows 2000 Professional (conService Pack 4).Una de las siguientes distribuciones de Linux: Red Hat Enterprise Linux 3, o Red Hat Fedora Core 3.Mnimo 512 MB de memoria en RAM; Sun Java Studio Creator 2 Update 1 requiere 1 GB de RAM.Mnimo 1.5 GB de espacio en disco duro.Unidad de CD-ROM.Conexin a Internet.Explorador Web, Adobe Acrobat Reader y una herramienta para descomprimir archivos zip.Uso de los CDLos ejemplos para Cmo programar en Java, 7 edicin se encuentran en los CD (Windows y Linux) que se inclu-yenen este libro. Siga los pasos de la siguiente seccin, Cmo copiar los ejemplos del libro del CD, para copiar eldirectorio de ejemplos apropiado del CD a su disco duro. Le sugerimos trabajar desde su disco duro en lugar dehacerlo desde su unidad de CD por dos razones: 1, los CD son de slo lectura, por lo que no podr guardar susaplicaciones en ellos; 2 es posible acceder a los archivos con mayor rapidez desde un disco duro que de un CD.Los ejemplos del libro tambin estn disponibles para descargarse de:www.deitel.com/books/jhtp7/www.pearsoneducacion.net/deitel/La interfaz para el contenido del CD de Microsoft Windows est diseada para iniciarse de manera auto-mtica,a travs del archivo AUTORUN.EXE. Si no aparece una pantalla de inicio cuando inserte el CD en su 31. Antes de empezar xxxicomputadora, haga doble clic en el archivo welcome.htm para iniciar la interfaz del CD para el estudiante,o consulte el archivo readme.txt en el CD. Para iniciar la interfaz del CD para Linux, haga doble clic en elarchivo welcome.html.Cmo copiar los ejemplos del libro del CDLas capturas de pantalla de esta seccin pueden diferir un poco de lo que usted ver en su computadora, de acuer-docon el sistema operativo y el explorador Web de que disponga. Las instrucciones de los siguientes pasos asumenque est utilizando Microsoft Windows.1. Insertar el CD. Inserte el CD que se incluye con este libro en la unidad de CD de su computadora.A continuacin deber aparecer de manera automtica la pgina Web welcome.htm (fi gura 1) en Win-dows.Tambin puede utilizar el Explorador de Windows para ver el contenido del CD y hacer dobleclic en welcome.htm para mostrar esta pgina.2. Abrir el directorio del CD-ROM. Haga clic en el vnculo Browse CD Contents (Explorar contenidodel CD) (fi gura 1) para ver el contenido del CD.Figura 1 | Pgina de bienvenida para el CD de Cmo programar en Java.Haga clic en el vnculo BrowseCD Contents para acceder alcontenido del CD3. Copiar el directorio ejemplos. Haga clic en el directorio ejemplos (fi gura 2), despus seleccioneCopiar. A continuacin, use el Explorador de Windows para ver el contenido de su unidad C:. (Tal veznecesite hacer clic en un vnculo para mostrar el contenido de la unidad). Una vez que se muestre el con-tenido,haga clic en cualquier parte y seleccione la opcin Pegar del men Editar para copiar el direc-torioejemplos del CD a su unidad C:. [Nota: guardamos los ejemplos directamente en la unidad C:y hacemos referencia a esta unidad a lo largo del texto. Puede optar por guardar sus archivos en unaunidad distinta, con base en la confi guracin de su computadora, en el laboratorio de su escuela o suspreferencias personales. Si trabaja en un laboratorio de computadoras, consulte con su profesor paraobtener ms informacin para confi rmar en dnde se deben guardar los ejemplos].Modifi cacin de la propiedad de slo lectura de los archivosLos archivos de ejemplo que copi a su computadora desde el CD son de slo lectura. A continuacin eliminarla propiedad de slo lectura, para poder modifi car y ejecutar los ejemplos.1. Abrir el cuadro de dilogo Propiedades. Haga clic con el botn derecho del ratn en el directorioejemplos y seleccione Propiedades. A continuacin aparecer el cuadro de dilogo Propiedades deejemplos (fi gura 3). 32. xxxii Antes de empezarHaga clic con el botn derecho delratn en el directorio ejemplosFigura 2 | Copia del directorio ejemplos.Figura 3 | Cuadro de dilogo Propiedades de ejemplos.Seleccione Copiar2. Cambiar la propiedad de slo lectura. En la seccin Atributos de este cuadro de dilogo, haga clic enel botn Slo lectura para eliminar la marca de verifi cacin (fi gura 4). Haga clic en Aplicar para aplicarlos cambios. 33. Figura 4 | Desactivar la casilla de verifi cacin Slo lectura.Antes de empezar xxxiiiDesactive el atributoSlo lectura3. Cambiar la propiedad para todos los archivos. Al hacer clic en Aplicar se mostrar la ventana Confi r-marcambios de atributos (fi gura 5). En esta ventana, haga clic en el botn de opcin Aplicar cambiosa esta carpeta y a todas las subcarpetas y archivos y haga clic en Aceptar para eliminar la propiedadde slo lectura para todos los archivos y directorios en el directorio ejemplos.Haga clic en este botn de opcinpara eliminar la propiedad Slolectura para todos los archivosFigura 5 | Eliminar la propiedad de slo lectura para todos los archivos en el directorio ejemplos.Instalacin del Kit de Desarrollo de Java Standard Edition (JDK)Antes de ejecutar las aplicaciones de este libro o de crear sus propias aplicaciones, debe instalar el Kit de Desarrollode Java Standard Edition (JDK) 6 o una herramienta de desarrollo para Java que soporte a Java SE 6.Puede descargar el JDK 6 y su documentacin de java.sun.com/javase/6/download.jsp. Haga clic enel botn DOWNLOAD para JDK 6. Debe aceptar el acuerdo de licencia antes de descargar. Una vez que acepte elacuerdo, haga clic en el vnculo para el instalador de su plataforma. Guarde el instalador en su disco duro y noolvide en dnde lo guard. Antes de instalar, lea con cuidado las instrucciones de instalacin del JDK para suplataforma, que se encuentran en java.sun.com/javase/6/webnotes/install/index.html.Despus de descargar el instalador del JDK, haga doble clic en el programa instalador para empezar a insta-larlo.Le recomendamos que acepte todas las opciones de instalacin predeterminadas. Si modifi ca el directoriopredeterminado, asegrese de anotar el nombre y la ubicacin exactos que eligi, ya que necesitar esta informa-cinms adelante en el proceso de instalacin. En Windows, el JDK se coloca, de manera predeterminada, en elsiguiente directorio:C:Archivos de programaJavajdk1.6.0 34. xxxiv Antes de empezarEstablecer la variable de entorno PATHLa variable de entorno PATH en su computadora indica qu directorios debe buscar la computadora cuando inten-telocalizar aplicaciones, como aquellas que le permiten compilar y ejecutar sus aplicaciones en Java (conocidascomo javac.exe y java.exe, respectivamente). Ahora aprender a establecer la variable de entorno PATH en sucomputadora para indicar en dnde estn instaladas las herramientas del JDK.1. Abrir el cuadro de dilogo Propiedades del sistema. Haga clic en Inicio > Panel de control > Sistemapara mostrar el cuadro de dilogo Propiedades del sistema (fi gura 6). [Nota: su cuadro de dilogo Pro-piedadesdel sistema puede tener una apariencia distinta al que se muestra en la fi gura 6, dependiendode la versin de Microsoft Windows. Este cuadro de dilogo especfi co es de una computadora queejecuta Microsoft Windows XP. Sin embargo, el que aparece en su computadora podra incluir distintainformacin].2. Abrir el cuadro de dilogo Variables de entorno. Seleccione la fi cha Opciones avanzadas de la partesuperior del cuadro de dilogo Propiedades del sistema (fi gura 7). Haga clic en el botn Variables deentorno para desplegar el cuadro de dilogo Variables de entorno (fi gura 8).3. Editar la variable PATH. Desplcese por el cuadro Variables del sistema para seleccionar la variablePATH. Haga clic en el botn Modifi car. Esto har que se despliegue el cuadro de dilogo Modifi car lavariable del sistema (fi gura 9).4. Modifi car la variable PATH. Coloque el cursor dentro del campo Valor de variable. Use la fl echaizquierda para desplazar el cursor hasta el inicio de la lista. Al principio de la lista, escriba el nombre deldirectorio en el que coloc el JDK, seguido de bin; (fi gura 10). Agregue C:Archivos de progra-maJavajdk1.6.0bin; a la variable PATH, si eligi el directorio de instalacin predeterminado. Nocoloque espacios antes o despus de lo que escriba. No se permiten espacios antes o despus de cada valor enuna variable de entorno. Haga clic en el botn Aceptar para aplicar sus cambios a la variable PATH.Si no establece la variable PATH de manera correcta, al utilizar las herramientas del JDK recibir un mensajecomo ste:java no se reconoce como un comando interno o externo,programa o archivo por lotes ejecutable.En este caso, regrese al principio de esta seccin y vuelva a comprobar sus pasos. Si ha descargado una versinms reciente del JDK, tal vez necesite modifi car el nombre del directorio de instalacin del JDK en la variablePATH.Figura 6 | Cuadro de dilogo Propiedades del sistema. 35. Antes de empezar xxxvFigura 7 | Ficha Opciones avanzadas del cuadro de dilogo Propiedades del sistema.Figura 8 | Cuadro de dilogo Variables de entorno.Seleccione la fi chaOpciones avanzadasHaga clic en el botnVariables de entornoFigura 9 | Cuadro de dilogo Modifi car la variable del sistema.Figura 10 | Modifi cacin de la variable PATH. 36. xxxvi Antes de empezarEstablecer la variable de entorno CLASSPATHSi trata de ejecutar un programa en Java y recibe un mensaje como:Exception in thread main java.lang.NoClassDefFoundError: SuClaseentonces su sistema tiene una variable de entorno CLASSPATH que debe modifi carse. Para corregir el error anterior,siga los pasos para establecer la variable de entorno PATH, localice la variable CLASSPATH y modifi que su valor paraque incluya lo siguiente:.;al principio de su valor (sin espacios antes o despus de estos caracteres).Ahora est listo para empezar sus estudios de Java con el libro Cmo programar en Java, 7 edicin. Espera-mosque lo disfrute! 37. Introduccina lascomputadoras,Internet y WebOBJETIVOSEn este captulo aprender a:QComprender los conceptos bsicos de hardware y software.QConocer los conceptos bsicos de la tecnologa de objetos,como las clases, objetos, atributos, comportamientos,encapsulamiento, herencia y polimorfi smo.QFamiliarizarse con los distintos lenguajes de programacin.QSaber qu lenguajes de programacin se utilizan ms.QComprender un tpico entorno de desarrollo en Java.QEntender el papel de Java en el desarrollo de aplicacionescliente/servidor distribuidas para Internet y Web.QConocer la historia de UML: el lenguaje de diseo orientadoa objetos estndar en la industria.QConocer la historia de Internet y World Wide Web.QProbar aplicaciones en Java.Nuestra vida se malgastapor los detallessimplifi car, simplifi car.Henry David Th oreauLa principal cualidad dellenguaje es la claridad.GalenMi sublime objetivo deberllevarlo a cabo a tiempo.W. S. GilbertTena un maravillosotalento para empacarestrechamente elpensamiento, hacindoloportable.Th omas B. MacaulayCaray, creo que de los dos,el intrprete es el ms difcilde entender!Richard Brinsley SheridanEl hombre sigue siendola computadora msextraordinaria de todas.John F. Kennedy1 38. 2 Captulo 1 Introduccin a las computadoras, Internet y Web1.1 Introduccin1.2 Qu es una computadora?1.3 Organizacin de una computadora1.4 Los primeros sistemas operativos1.5 Computacin personal, distribuida y cliente/servidor1.6 Internet y World Wide Web1.7 Lenguajes mquina, ensambladores y de alto nivel1.8 Historia de C y C++1.9 Historia de Java1.10 Bibliotecas de clases de Java1.11 FORTRAN, COBOL, Pascal y Ada1.12 BASIC, Visual Basic, Visual C++, C# y .NET1.13 Entorno de desarrollo tpico en Java1.14 Generalidades acerca de Java y este libro1.15 Prueba de una aplicacin en Java1.16 Ejemplo prctico de Ingeniera de Software: introduccin a la tecnologa de objetos y UML1.17 Web 2.01.18 Tecnologas de software1.19 Conclusin1.20 Recursos WebResumen | Terminologa | Ejercicios de autoevaluacin | Respuestas a los ejercicios de autoevaluacin | Ejercicios1.1 IntroduccinBienvenido a Java! Hemos trabajado duro para crear lo que pensamos ser una experiencia de aprendizaje infor-mativa,divertida y retadora para usted. Java es un poderoso lenguaje de programacin, divertido para los princi-piantesy apropiado para los programadores experimentados que desarrollan sistemas de informacin de tamaoconsiderable. Cmo programar en Java, 7 edicin es una herramienta efectiva de aprendizaje para cada una deestas audiencias.PedagogaLa parte central del libro se enfoca en la claridad de los programas, a travs de las tcnicas comprobadas de la pro-gramacinorientada a objetos. Los principiantes aprendern programacin de manera correcta, desde el principio.La presentacin es clara, simple y tiene muchas ilustraciones. Incluye cientos de programas completos y funcio-nalesen Java, y muestra la salida que se obtiene al ejecutar estos programas en una computadora. Enseamos lascaractersticas de Java en un contexto de programas completos y funcionales; a esto le llamamos el mtodo decdigo activo (Live-Code). Los programas de ejemplo estn disponibles en el CD que acompaa a este libro.Tambin puede descargarlos de los sitios Web www.deitel.com/books/jhtp7/ o www.pearsoneducacion.net.com/deitel.FundamentosLos primeros captulos presentan los fundamentos de las computadoras, la programacin de stas y el lenguaje deprogramacin Java, con lo cual se provee una base slida para un anlisis ms detallado de Java en los captulosposteriores. Los programadores experimentados tienden a leer los primeros captulos rpidamente, y descubrenque el anlisis de Java en los captulos posteriores es riguroso y retador.La mayora de las personas estn familiarizadas con las emocionantes tareas que realizan las computado-ras.Por medio de este libro, usted aprender a programar las computadoras para que realicen dichas tareas. ElPlan general 39. 1.1 Introduccin 3software (las instrucciones que usted escribe para indicar a la computadora que realice acciones y tome decisio-nes)es quien controla a las computadoras (conocidas comnmente como hardware). Java, desarrollado por SunMicrosystems, es uno de los lenguajes para desarrollo de software ms populares en la actualidad.Java Standard Edition 6 (Java SE 6) y el Kit de Desarrollo de Java 6 (JDK 6)Este libro se basa en la plataforma Java Standard Edition 6 (Java SE 6) de Sun, tambin conocida como Mus-tang.Sun ofrece una implementacin de Java SE 6, conocida como Kit de Desarrollo de Java (JDK), queincluye las herramientas necesarias para escribir software en Java. Nosotros utilizamos el JDK versin 6.0 para losprogramas en este libro. Por lo regular, Sun actualiza el JDK para corregir errores: para descargar la versin msreciente del JDK 6, visite java.sun.com/javase/6/download.jsp.Evolucin de la computacin y de la programacinEl uso de las computadoras se est incrementando en casi cualquier campo de trabajo; los costos de se han redu-cidoen forma dramtica, debido al rpido desarrollo en la tecnologa de hardware y software. Las computadorasque ocupaban grandes habitaciones y que costaban millones de dlares, hace algunas dcadas, ahora puedencolocarse en las superfi cies de chips de silicio ms pequeos que una ua, y con un costo de quiz unos cuan-tosdlares cada uno. Por fortuna, el silicio es uno de los materiales ms abundantes en el planeta (es uno delos ingredientes de la tierra). La tecnologa de los chips de silicio ha vuelto tan econmica a la tecnologa de lacomputacin que cientos de millones de computadoras de uso general se encuentran actualmente ayudandoa la gente de todo el mundo en: empresas, la industria, el gobierno y en sus vidas. Dicho nmero podra dupli-carsefcilmente en unos cuantos aos.A travs de los aos, muchos programadores aprendieron la metodologa conocida como programacinestructurada. Usted aprender tanto la programacin estructurada como la novedosa y excitante metodologa dela programacin orientada a objetos. Por qu enseamos ambas? La programacin orientada a objetos es lametodologa clave utilizada hoy en da por los programadores. Usted crear y trabajar con muchos objetos desoftware en este libro. Sin embargo, descubrir que la estructura interna de estos objetos se construye, a menudo,utilizando tcnicas de programacin estructurada. Adems, la lgica requerida para manipular objetos se expresaalgunas veces mediante la programacin estructurada.El lenguaje de eleccin para las aplicaciones en redJava se ha convertido en el lenguaje de eleccin para implementar aplicaciones basadas en Internet, y softwarepara dispositivos que se comunican a travs de una red. Ahora, los estreos y otros dispositivos en los hogarespueden conectarse entre s mediante el uso de tecnologa Java. En la conferencia JavaOne en mayo del 2006,Sun anunci que haba mil millones de telfonos mviles y dispositivos porttiles habilitados para Java! Java haevolucionado rpidamente en el mbito de las aplicaciones de gran escala. Es el lenguaje preferido para satisfacerla mayora de las necesidades de programacin de muchas organizaciones.Java ha evolucionado tan rpidamente que publicamos esta sptima edicin de Cmo programar en Javajustamente 10 aos despus de publicar la primera edicin. Java ha crecido tanto que cuenta con otras dos edi-ciones.La edicin Java Enterprise Edition (Java EE) est orientada hacia el desarrollo de aplicaciones de reddistribuidas, de gran escala, y aplicaciones basadas en Web. La plataforma Java Micro Edition (Java ME) estorientada hacia el desarrollo de aplicaciones para dispositivos pequeos, con memoria limitada, como los telfo-noscelulares, radiolocalizadores y PDAs.Permanezca en contacto con nosotrosEst a punto de comenzar una ruta de desafos y recompensas. Mientras tanto, si desea comunicarse con nosotros,envenos un correo a [email protected] o explore nuestro sitio Web en www.deitel.com. Le responderemosa la brevedad. Para mantenerse al tanto de los desarrollos con Java en Deitel & Associates, regstrese para recibirnuestro boletn de correo electrnico, Deitel Buzz Online enwww.deitel.com/newsletter/subscribe.htmlPara obtener material adicional sobre Java, visite nuestra creciente lista de centros de recursos en www.deitel.com/ResourceCenters.html. Esperamos que disfrute aprender con Cmo programar en Java, 7 edicin. 40. 4 Captulo 1 Introduccin a las computadoras, Internet y Web1.2 Qu es una computadora?Una computadora es un dispositivo capaz de realizar clculos y tomar decisiones lgicas a velocidades de millones(incluso de miles de millones) de veces ms rpidas que los humanos. Por ejemplo, muchas de las computadoraspersonales actuales pueden realizar varios miles de millones de clculos en un segundo. Una persona con unacalculadora podra requerir toda una vida para completar el mismo nmero de operaciones. (Puntos a considerar:cmo sabra que la persona sum los nmeros de manera correcta?, cmo sabra que la computadora sum losnmeros de manera correcta?) Las supercomputadoras actuales ms rpidas pueden realizar billones de sumaspor segundo!Las computadoras procesan los datos bajo el control de conjuntos de instrucciones llamadas programas decmputo. Estos programas guan a la computadora a travs de conjuntos ordenados de acciones especifi cadas porgente conocida como programadores de computadoras.Una computadora est compuesta por diversos dispositivos (como teclado, monitor, ratn, discos, memoria,DVD, CD-ROM y unidades de procesamiento) conocidos como hardware. A los programas que se ejecutanen una computadora se les denomina software. Los costos de las piezas de hardware han disminuido de maneraespectacular en aos recientes, al punto en que las computadoras personales se han convertido en artculos doms-ticos.En este libro aprender mtodos comprobados que pueden reducir los costos de desarrollo del software:programacin orientada a objetos y (en nuestro Ejemplo prctico de Ingeniera de Software en los captulos 2-8y 10) diseo orientado a objetos.1.3 Organizacin de una computadoraIndependientemente de las diferencias en su apariencia fsica, casi todas las computadoras pueden representarsemediante seis unidades lgicas o secciones:1. Unidad de entrada. Esta seccin receptora obtiene informacin (datos y programas de cmputo)desde diversos dispositivos de entrada y pone esta informacin a disposicin de las otras unidades paraque pueda procesarse. La mayora de la informacin se introduce a travs de los teclados y ratones; tam-binpuede introducirse de muchas otras formas, como hablar con su computadora, digitalizar imgenesy desde una red, como Internet.2. Unidad de salida. Esta seccin de embarque toma informacin que ya ha sido procesada por lacomputadora y la coloca en los diferentes dispositivos de salid