1. INC LUYE CD-R OM H o ssFly Vistenos en:
www.pearsoneducacion.net ISBN 978-970-26-1190-5 Una introduccin
completa y autorizada del cdigo activo de DEITEL a la pro- gramacin
orientada a objetos, con la nueva edicin Java Standard Edition 6,
JDBC 4, JavaServer Faces y Servicios Web Java es el lenguaje de
programacin orientada a objetos ms popular, con cinco millones de
desarrolladores! Esta nueva edicin del libro de texto sobre Java ms
utilizado en el mundo emplea un mtodo anticipado para las clases y
objetos. Incluye tambin una cobertura completa de la programacin
orientada a objetos en Java, para lo cual presenta varios ejemplos
prcticos integrados: la clase Tiempo, la clase Empleado, la clase
LibroCalificaciones, un ejemplo prctico opcional de DOO/UML 2 con
el ATM (captulos 1 a 8 y 10), el ejemplo prctico opcional de GUI y
grficos (captulos 3 a 10), un libro de direc- ciones controlado por
base de datos (captulo 25) y dos aplicaciones Web multinivel
controladas por bases de datos: una libreta de direcciones que
utiliza controles JSF habilitados para AJAX para mostrar un nombre
y una direccin en un Mapa de Google (captulo 27), y un sistema de
reservaciones de una aerolnea que utiliza ser- vicios Web (captulo
28). Los recursos para los usuarios de este libro incluyen los
sitios Web (www.deitel.com y www.pearsoeducacion.net/deitel) con
los ejemplos de cdigo del libro e informacin para profesores,
estudiantes y profesionales. El CD de este libro incluye material
adicional en espaol y cdigos de los ejemplos del libro. Para mayor
informacin visite: www.pearsoneducacion.net/deitel Deitel Java.qxp
4/29/08 9:47 AM Page 1
2.
3. P. J. Deitel Deitel & Associates, Inc. H. M. Deitel
Deitel & Associates, Inc. TRADUCCIN Alfonso Vidal Romero
Elizondo Ingeniero en Sistemas Electrnicos Instituto Tecnolgico y
de Estudios Superiores de Monterrey Campus Monterrey REVISIN TCNICA
Gabriela Azucena Campos Garca Roberto Martnez Romn Departamento de
Computacin Instituto Tecnolgico y de Estudios Superiores de
Monterrey Campus Estado de Mxico Jorge Armando Aparicio Lemus
Coordinador del rea de Software Universidad Tecnolgica de El
Salvador
4. Authorized 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-5 Traduccin 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 espaol Editor: Luis Miguel Cruz Castillo
e-mail: luis.cruzpearsoned.com Editor de desarrollo: Bernardino
Gutirrez Hernndez Supervisor de produccin: Enrique Trejo Hernndez
Edicin en ingls DEITEL, PAUL J. Y HARVEY M. DEITEL CMO PROGRAMAR EN
JAVA. Sptima edicin PEARSON EDUCACIN, Mxico 2008 ISBN:
978-970-26-1190-5 rea: Computacin Formato: 20 25.5 cm Pginas: 1152
Vice President and Editorial Director, ECS: Marcia J. Horton
Associate Editor: Jennifer Cappello Assistant Editor: Carole Snyder
Executive Managing Editor: Vince OBrien Managing Editor: Bob
Engelhardt Production Editors: Donna M. Crilly, Marta Samsel
Director of Creative Services: Paul Belfanti A/V Production Editor:
Xiaohong Zhu Art Studio: Artworks, York, PA Creative Director: Juan
Lpez Art Director: Kristine Carney Cover Design: Abbey S. Deitel,
Harvey M. Deitel, Francesco Santalucia, Kristine Carney Interior
Design: Harvey M. Deitel, Kristine Carney Manufacturing Manager:
Alexis Heydt-Long Manufacturing Buyer: Lisa McDowell Executive
Marketing Manager: Robin OBrien SPTIMA EDICIN, 2008 D.R. 2008 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.
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 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 o de sus
represen- tantes. ISBN 10: 970-26-1190-3 ISBN 13: 978-970-26-1190-5
Impreso 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 registradas DEITEL, 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- dos y/o en
otros pases UNIX es una marca registrada de The Open Group.
7. Contenido Prefacio xix Antes de empezar xxx 1 Introduccin a
las computadoras, Internet y Web 1 1.1 Introduccin 2 1.2 Qu es una
computadora? 4 1.3 Organizacin de una computadora 4 1.4 Los
primeros sistemas operativos 5 1.5 Computacin personal, distribuida
y cliente/servidor 5 1.6 Internet y World Wide Web 6 1.7 Lenguajes
mquina, ensambladores y de alto nivel 6 1.8 Historia de C y C++ 7
1.9 Historia de Java 8 1.10 Bibliotecas de clases de Java 8 1.11
FORTRAN, COBOL, Pascal y Ada 9 1.12 BASIC, Visual Basic, Visual
C++, C# y .NET 10 1.13 Entorno de desarrollo tpico en Java 10 1.14
Generalidades acerca de Java y este libro 13 1.15 Prueba de una
aplicacin en Java 14 1.16 Ejemplo prctico de Ingeniera de Software:
introduccin a la tecnologa de objetos y UML 19 1.17 Web 2.0 23 1.18
Tecnologas de software 24 1.19 Conclusin 25 1.20 Recursos Web 25 2
Introduccin a las aplicaciones en Java 34 2.1 Introduccin 35 2.2 Su
primer programa en Java: imprimir una lnea de texto 35 2.3
Modicacin de nuestro primer programa en Java 41 2.4 Cmo mostrar
texto con printf 43 2.5 Otra aplicacin en Java: suma de enteros 44
2.6 Conceptos acerca de la memoria 48 2.7 Aritmtica 49 2.8 Toma de
decisiones: operadores de igualdad y relacionales 52 2.9 (Opcional)
Ejemplo prctico de Ingeniera de Software: cmo examinar el documento
de requerimientos de un problema 56 2.10 Conclusin 65 3 Introduccin
a las clases y los objetos 75 3.1 Introduccin 76 3.2 Clases,
objetos, mtodos y variables de instancia 76
8. viii Contenido 3.3 Declaracin de una clase con un mtodo e
instanciamiento de un objeto de una clase 77 3.4 Declaracin de un
mtodo con un parmetro 81 3.5 Variables de instancia, mtodos
establecer y mtodos obtener 84 3.6 Comparacin entre tipos
primitivos y tipos por referencia 88 3.7 Inicializacin de objetos
mediante constructores 89 3.8 Nmeros de punto otante y el tipo
double 91 3.9 (Opcional) Ejemplo prctico de GUI y grcos: uso de
cuadros de dilogo 95 3.10 (Opcional) Ejemplo prctico de Ingeniera
de Software: identicacin de las clases en un documento de
requerimientos 98 3.11 Conclusin 105 4 Instrucciones de control:
parte 1 112 4.1 Introduccin 113 4.2 Algoritmos 113 4.3 Seudocdigo
114 4.4 Estructuras de control 114 4.5 Instruccin de seleccin
simple if 116 4.6 Instruccin de seleccin doble if...else 117 4.7
Instruccin de repeticin while 121 4.8 Cmo formular algoritmos:
repeticin controlada por un contador 123 4.9 Cmo formular
algoritmos: repeticin controlada por un centinela 127 4.10 Cmo
formular algoritmos: instrucciones de control anidadas 134 4.11
Operadores de asignacin compuestos 138 4.12 Operadores de
incremento y decremento 139 4.13 Tipos primitivos 142 4.14
(Opcional) Ejemplo prctico de GUI y grcos: creacin de dibujos
simples 142 4.15 (Opcional) Ejemplo prctico de Ingeniera de
Software: identicacin de los atributos de las clases 146 4.16
Conclusin 150 5 Instrucciones de control: parte 2 164 5.1
Introduccin 165 5.2 Fundamentos de la repeticin controlada por
contador 165 5.3 Instruccin de repeticin for 167 5.4 Ejemplos sobre
el uso de la instruccin for 171 5.5 Instruccin de repeticin
do...while 174 5.6 Instruccin de seleccin mltiple switch 176 5.7
Instrucciones break y continue 183 5.8 Operadores lgicos 185 5.9
Resumen sobre programacin estructurada 190 5.10 (Opcional) Ejemplo
prctico de GUI y grcos: dibujo de rectngulos y valos 194 5.11
(Opcional) Ejemplo prctico de Ingeniera de Software: cmo identicar
los estados y actividades de los objetos 197 5.12 Conclusin 200 6
Mtodos: un anlisis ms detallado 211 6.1 Introduccin 212 6.2 Mdulos
de programas en Java 212 6.3 Mtodos static, campos static y la
clase Math 214 6.4 Declaracin de mtodos con mltiples parmetros 216
6.5 Notas acerca de cmo declarar y utilizar los mtodos 219 6.6 Pila
de llamadas a los mtodos y registros de activacin 221 6.7 Promocin
y conversin de argumentos 221
9. Contenido ix 6.8 Paquetes de la API de Java 222 6.9 Ejemplo
prctico: generacin de nmeros aleatorios 224 6.9.1 Escalamiento y
desplazamiento generalizados de nmeros aleatorios 227 6.9.2
Repetitividad de nmeros aleatorios para prueba y depuracin 228 6.10
Ejemplo prctico: un juego de probabilidad (introduccin a las
enumeraciones) 228 6.11 Alcance de las declaraciones 232 6.12
Sobrecarga de mtodos 235 6.13 (Opcional) Ejemplo prctico de GUI y
grcos: colores y guras rellenas 238 6.14 (Opcional) Ejemplo prctico
de Ingeniera de Software: identicacin de las operaciones de las
clases 241 6.15 Conclusin 246 7 Arreglos 260 7.1 Introduccin 261
7.2 Arreglos 261 7.3 Declaracin y creacin de arreglos 262 7.4
Ejemplos acerca del uso de los arreglos 264 7.5 Ejemplo prctico:
simulacin para barajar y repartir cartas 272 7.6 Instruccin for
mejorada 274 7.7 Paso de arreglos a los mtodos 276 7.8 Ejemplo
prctico: la clase LibroCalicaciones que usa un arreglo para
almacenar las calicaciones 279 7.9 Arreglos multidimensionales 284
7.10 Ejemplo prctico: la clase LibroCalicaciones que usa un arreglo
bidimensional 288 7.11 Listas de argumentos de longitud variable
293 7.12 Uso de argumentos de lnea de comandos 294 7.13 (Opcional)
Ejemplo prctico de GUI y grcos: cmo dibujar arcos 296 7.14
(Opcional) Ejemplo prctico de Ingeniera de Software: colaboracin
entre los objetos 299 7.15 Conclusin 305 8 Clases y objetos: un
anlisis ms detallado 325 8.1 Introduccin 326 8.2 Ejemplo prctico de
la clase Tiempo 327 8.3 Control del acceso a los miembros 330 8.4
Referencias a los miembros del objeto actual mediante this 331 8.5
Ejemplo prctico de la clase Tiempo: constructores sobrecargados 333
8.6 Constructores predeterminados y sin argumentos 338 8.7
Observaciones acerca de los mtodos Establecer y Obtener 338 8.8
Composicin 340 8.9 Enumeraciones 342 8.10 Recoleccin de basura y el
mtodo nalize 345 8.11 Miembros de clase static 345 8.12 Declaracin
static import 350 8.13 Variables de instancia nal 351 8.14
Reutilizacin de software 353 8.15 Abstraccin de datos y
encapsulamiento 354 8.16 Ejemplo prctico de la clase Tiempo:
creacin de paquetes 355 8.17 Acceso a paquetes 360 8.18 (Opcional)
Ejemplo prctico de GUI y grcos: uso de objetos con grcos 361 8.19
(Opcional) Ejemplo prctico de Ingeniera de Software: inicio de la
programacin de las clases del sistema ATM 364 8.20 Conclusin
369
10. x Contenido 9 Programacin orientada a objetos: herencia 378
9.1 Introduccin 379 9.2 Superclases y subclases 380 9.3 Miembros
protected 382 9.4 Relacin entre las superclases y las subclases 382
9.4.1 Creacin y uso de una clase EmpleadoPorComision 383 9.4.2
Creacin de una clase EmpleadoBaseMasComision sin usar la herencia
387 9.4.3 Creacin de una jerarqua de herencia EmpleadoPorComision-
EmpleadoBaseMasComision 391 9.4.4 La jerarqua de herencia
EmpleadoPorComision-EmpleadoBaseMasComision mediante el uso de
variables de instancia protected 394 9.4.5 La jerarqua de herencia
EmpleadoPorComision-EmpleadoBaseMasComision mediante el uso de
variables de instancia private 399 9.5 Los constructores en las
subclases 404 9.6 Ingeniera de software mediante la herencia 409
9.7 La clase object 410 9.8 (Opcional) Ejemplo prctico de GUI y
grcos: mostar texto e imgenes usando etiquetas 411 9.9 Conclusin
413 10 Programacin orientada a objetos: polimorsmo 417 10.1
Introduccin 418 10.2 Ejemplos del polimorsmo 419 10.3 Demostracin
del comportamiento polimrco 420 10.4 Clases y mtodos abstractos 423
10.5 Ejemplo prctico: sistema de nmina utilizando polimorsmo 425
10.5.1 Creacin de la superclase abstracta Empleado 426 10.5.2
Creacin de la subclase concreta EmpleadoAsalariado 426 10.5.3
Creacin de la subclase concreta EmpleadoPorHoras 429 10.5.4 Creacin
de la subclase concreta EmpleadoPorComision 431 10.5.5 Creacin de
la subclase concreta indirecta EmpleadoBaseMasComision 432 10.5.6
Demostracin del procesamiento polimrco, el operador instanceof y la
conversin descendente 433 10.5.7 Resumen de las asignaciones
permitidas entre variables de la superclase y de la subclase 437
10.6 Mtodos y clases nal 438 10.7 Ejemplo prctico: creacin y uso de
interfaces 439 10.7.1 Desarrollo de una jerarqua PorPagar 440
10.7.2 Declaracin de la interfaz PorPagar 441 10.7.3 Creacin de la
clase Factura 441 10.7.4 Modicacin de la clase Empleado para
implementar la interfaz PorPagar 443 10.7.5 Modicacin de la clase
EmpleadoAsalariado para usarla en la jerarqua PorPagar 445 10.7.6
Uso de la interfaz PorPagar para procesar objetos Factura y
Empleado mediante el polimorsmo 446 10.7.7 Declaracin de constantes
con interfaces 448 10.7.8 Interfaces comunes de la API de Java 448
10.8 (Opcional) Ejemplo prctico de GUI y grcos: realizar dibujos
mediante el polimorsmo 449 10.9 (Opcional) Ejemplo prctico de
Ingeniera de Software: incorporacin de la herencia en el sistema
ATM 451 10.10 Conclusin 457
11. Contenido xi 11 Componentes de la GUI: parte 1 462 11.1
Introduccin 463 11.2 Entrada/salida simple basada en GUI con
JOptionPane 464 11.3 Generalidades de los componentes de Swing 467
11.4 Mostrar texto e imgenes en una ventana 469 11.5 Campos de
texto y una introduccin al manejo de eventos con clases anidadas
474 11.6 Tipos de eventos comunes de la GUI e interfaces de escucha
479 11.7 Cmo funciona el manejo de eventos 481 11.8 JButton 483
11.9 Botones que mantienen el estado 486 11.9.1 JCheckBox 486
11.9.2 JRadioButton 489 11.10 JComboBox y el uso de una clase
interna annima para el manejo de eventos 492 11.11 JList 495 11.12
Listas de seleccin mltiple 497 11.13 Manejo de eventos de ratn 500
11.14 Clases adaptadoras 504 11.15 Subclase de JPanel para dibujar
con el ratn 507 11.16 Manejo de eventos de teclas 510 11.17
Administradores de esquemas 513 11.17.1 FlowLayout 514 11.17.2
BorderLayout 517 11.17.3 GridLayout 520 11.18 Uso de paneles para
administrar esquemas ms complejos 522 11.19 JTextArea 523 11.20
Conclusin 526 12 Grcos y Java 2D 539 12.1 Introduccin 540 12.2
Contextos y objetos de grcos 542 12.3 Control de colores 542 12.4
Control de tipos de letra 548 12.5 Dibujo de lneas, rectngulos y
valos 554 12.6 Dibujo de arcos 558 12.7 Dibujo de polgonos y
polilneas 560 12.8 La API Java 2D 563 12.9 Conclusin 569 13 Manejo
de excepciones 578 13.1 Introduccin 579 13.2 Generalidades acerca
del manejo de excepciones 580 13.3 Ejemplo: divisin entre cero sin
manejo de excepciones 580 13.4 Ejemplo: manejo de excepciones tipo
ArithmeticException e InputMismatchException 582 13.5 Cundo
utilizar el manejo de excepciones 587 13.6 Jerarqua de excepciones
en Java 587 13.7 Bloque nally 590 13.8 Limpieza de la pila 594 13.9
printStackTrace, getStackTrace y getMessage 595 13.10 Excepciones
encadenadas 597 13.11 Declaracin de nuevos tipos de excepciones 599
13.12 Precondiciones y poscondiciones 600
12. xii Contenido 13.13 Aserciones 601 13.14 Conclusin 602 14
Archivos y ujos 608 14.1 Introduccin 609 14.2 Jerarqua de datos 610
14.3 Archivos y ujos 611 14.4 La clase File 613 14.5 Archivos de
texto de acceso secuencial 617 14.5.1 Creacin de un archivo de
texto de acceso secuencial 617 14.5.2 Cmo leer datos de un archivo
de texto de acceso secuencial 623 14.5.3 Ejemplo prctico: un
programa de solicitud de crdito 625 14.5.4 Actualizacin de archivos
de acceso secuencial 630 14.6 Serializacin de objetos 630 14.6.1
Creacin de un archivo de acceso secuencial mediante el uso de la
serializacin de objetos 631 14.6.2 Lectura y deserializacin de
datos de un archivo de acceso secuencial 636 14.7 Clases
adicionales de java.io 638 14.8 Abrir archivos con JFileChooser 640
14.9 Conclusin 643 15 Recursividad 653 15.1 Introduccin 654 15.2
Conceptos de recursividad 655 15.3 Ejemplo de uso de recursividad:
factoriales 655 15.4 Ejemplo de uso de recursividad: serie de
Fibonacci 658 15.5 La recursividad y la pila de llamadas a mtodos
661 15.6 Comparacin entre recursividad e iteracin 662 15.7 Las
torres de Hanoi 664 15.8 Fractales 666 15.9 Vuelta atrs recursiva
(backtracking) 676 15.10 Conclusin 676 15.11 Recursos en Internet y
Web 676 16 Bsqueda y ordenamiento 685 16.1 Introduccin 686 16.2
Algoritmos de bsqueda 687 16.2.1 Bsqueda lineal 687 16.2.2 Bsqueda
binaria 690 16.3 Algoritmos de ordenamiento 695 16.3.1 Ordenamiento
por seleccin 695 16.3.2 Ordenamiento por insercin 699 16.3.3
Ordenamiento por combinacin 702 16.4 Invariantes 708 16.5 Conclusin
709 17 Estructuras de datos 714 17.1 Introduccin 715 17.2 Clases de
envoltura de tipos para los tipos primitivos 716 17.3 Autoboxing y
autounboxing 716
13. Contenido xiii 17.4 Clases autorreferenciadas 717 17.5
Asignacin dinmica de memoria 717 17.6 Listas enlazadas 718 17.7
Pilas 726 17.8 Colas 730 17.9 rboles 733 17.10 Conclusin 739 18
Genricos 761 18.1 Introduccin 762 18.2 Motivacin para los mtodos
genricos 762 18.3 Mtodos genricos: implementacin y traduccin en
tiempo de compilacin 764 18.4 Cuestiones adicionales sobre la
traduccin en tiempo de compilacin: mtodos que utilizan un parmetro
de tipo como tipo de valor de retorno 767 18.5 Sobrecarga de mtodos
genricos 770 18.6 Clases genricas 770 18.7 Tipos crudos (raw) 779
18.8 Comodines en mtodos que aceptan parmetros de tipo 783 18.9
Genricos y herencia: observaciones 787 18.10 Conclusin 787 18.11
Recursos en Internet y Web 787 19 Colecciones 792 19.1 Introduccin
793 19.2 Generalidades acerca de las colecciones 794 19.3 La clase
Arrays 794 19.4 La interfaz Collection y la clase Collections 797
19.5 Listas 798 19.5.1 ArrayList e Iterator 799 19.5.2 LinkedList
800 19.5.3 Vector 805 19.6 Algoritmos de las colecciones 808 19.6.1
El algoritmo sort 809 19.6.2 El algoritmo shufe 812 19.6.3 Los
algoritmos reverse, ll, copy, max y min 815 19.6.4 El algoritmo
binarySearch 816 19.6.5 Los algoritmos addAll, frequency y disjoint
818 19.7 La clase Stack del paquete java.util 820 19.8 La clase
PriorityQueue y la interfaz Queue 822 19.9 Conjuntos 823 19.10
Mapas 826 19.11 La clase Properties 829 19.12 Colecciones
sincronizadas 832 19.13 Colecciones no modicables 833 19.14
Implementaciones abstractas 834 19.15 Conclusin 834 20 Introduccin
a los applets de Java 841 20.1 Introduccin 842 20.2 Applets de
muestra incluidos en el JDK 842 20.3 Applet simple en Java: cmo
dibujar una cadena 846
14. xiv Contenido 20.3.1 Cmo ejecutar un applet en el
appletviewer 848 20.3.2 Ejecucin de un applet en un explorador Web
850 20.4 Mtodos del ciclo de vida de los applets 850 20.5 Cmo
inicializar una variable de instancia con el mtodo int 851 20.6
Modelo de seguridad caja de arena 853 20.7 Recursos en Internet y
Web 853 20.8 Conclusin 854 21 Multimedia: applets y aplicaciones
858 21.1 Introduccin 859 21.2 Cmo cargar, mostrar y escalar imgenes
860 21.3 Animacin de una serie de imgenes 862 21.4 Mapas de imgenes
867 21.5 Carga y reproduccin de clips de audio 869 21.6 Reproduccin
de video y otros medios con el Marco de trabajo de medios de Java
872 21.7 Conclusin 876 21.8 Recursos Web 876 22 Componentes de la
GUI: parte 2 883 22.1 Introduccin 884 22.2 JSlider 884 22.3
Ventanas: observaciones adicionales 888 22.4 Uso de mens con marcos
889 22.5 JPopupMenu 896 22.6 Apariencia visual adaptable 899 22.7
JDesktopPane y JInternalFrame 903 22.8 JTabbedPane 906 22.9
Administradores de esquemas: BoxLayout y GridBagLayout 908 22.10
Conclusin 920 23 Subprocesamiento mltiple 925 23.1 Introduccin 926
23.2 Estados de los subprocesos: ciclo de vida de un subproceso 927
23.3 Prioridades y programacin de subprocesos 929 23.4 Creacin y
ejecucin de subprocesos 931 23.4.1 Objetos Runnable y la clase
Thread 931 23.4.2 Administracin de subprocesos con el marco de
trabajo Executor 934 23.5 Sincronizacin de subprocesos 935 23.5.1
Cmo compartir datos sin sincronizacin 936 23.5.2 Cmo compartir
datos con sincronizacin: hacer las operaciones atmicas 940 23.6
Relacin productor/consumidor sin sincronizacin 943 23.7 Relacin
productor/consumidor: ArrayBlockingQueue 949 23.8 Relacin
productor/consumidor con sincronizacin 952 23.9 Relacin
productor/consumidor: bferes delimitados 957 23.10 Relacin
productor/consumidor: las interfaces Lock y Condition 964 23.11
Subprocesamiento mltiple con GUIs 970 23.11.1 Realizacin de clculos
en un subproceso trabajador 970 23.11.2 Procesamiento de resultados
inmediatos con SwingWorker 976 23.12 Otras clases e interfaces en
java.util.concurrent 982 23.13 Conclusin 983
15. Contenido xv 24 Redes 992 24.1 Introduccin 993 24.2
Manipulacin de URLs 994 24.3 Cmo leer un archivo en un servidor Web
998 24.4 Cmo establecer un servidor simple utilizando sockets de
ujo 1001 24.5 Cmo establecer un cliente simple utilizando sockets
de ujo 1003 24.6 Interaccin entre cliente/servidor mediante
conexiones de socket de ujo 1004 24.7 Interaccin entre
cliente/servidor sin conexin mediante datagramas 1014 24.8 Juego de
Tres en raya (Gato) tipo cliente/servidor, utilizando un servidor
con subprocesamiento mltiple 1021 24.9 La seguridad y la red 1034
24.10 [Bono Web] Ejemplo prctico: servidor y cliente
DeitelMessenger 1034 24.11 Conclusin 1035 25 Acceso a bases de
datos con JDBC 1041 25.1 Introduccin 1042 25.2 Bases de datos
relacionales 1043 25.3 Generalidades acerca de las bases de datos
relacionales: la base de datos libros 1044 25.4 SQL 1047 25.4.1
Consulta bsica SELECT 1047 25.4.2 La clusula WHERE 1048 25.4.3 La
clusula ORDER BY 1050 25.4.4 Cmo fusionar datos de varias tablas:
INNER JOIN 1051 25.4.5 La instruccin INSERT 1053 25.4.6 La
instruccin UPDATE 1053 25.4.7 La instruccin DELETE 1054 25.5
Instrucciones para instalar MySQL y MySQL Connector/J 1055 25.6
Instrucciones para establecer una cuenta de usuario de MySQL 1056
25.7 Creacin de la base de datos libros en MySQL 1057 25.8
Manipulacin de bases de datos con JDBC 1057 25.8.1 Cmo conectarse y
realizar consultas en una base de datos 1057 25.8.2 Consultas en la
base de datos libros 1062 25.9 La interfaz RowSet 1073 25.10 Java
DB/Apache Derby 1075 25.11 Objetos PreparedStatement 1076 25.12
Procedimientos almacenados 1090 25.13 Procesamiento de
transacciones 1091 25.14 Conclusin 1091 25.15 Recursos Web y
lecturas recomendadas 1092 Los captulos 26 a 30 as como los
apndices, los encontrar en el CD que acompaa este libro. 26
Aplicaciones Web: parte 1 1101 26.1 Introduccin 1102 26.2
Transacciones HTTP simples 1103 26.3 Arquitectura de aplicaciones
multinivel 1105 26.4 Tecnologas Web de Java 1106 26.4.1 Servlets
1106 26.4.2 JavaServer Pages 1106 26.4.3 JavaServer Faces 1107
26.4.4 Tecnologas Web en Java Studio Creator 2 1108
16. xvi Contenido 26.5 Creacin y ejecucin de una aplicacin
simple en Java Studio Creator 2 1108 26.5.1 Anlisis de un archivo
JSP 1109 26.5.2 Anlisis de un archivo de bean de pgina 1111 26.5.3
Ciclo de vida del procesamiento de eventos 1115 26.5.4 Relacin
entre la JSP y los archivos de bean de pgina 1115 26.5.5 Anlisis
del XHTML generado por una aplicacin Web de Java 1115 26.5.6
Creacin de una aplicacin Web en Java Studio Creator 2 1117 26.6
Componentes JSF 1123 26.6.1 Componentes de texto y grcos 1123
26.6.2 Validacin mediante los componentes de validacin y los
validadores personalizados 1128 26.7 Rastreo de sesiones 1137
26.7.1 Cookies 1138 26.7.2 Rastreo de sesiones con el objeto
SessionBean 1150 26.8 Conclusin 1162 26.9 Recursos Web 1163 27
Aplicaciones Web: parte 2 1173 27.1 Introduccin 1174 27.2 Acceso a
bases de datos en las aplicaciones Web 1174 27.2.1 Creacin de una
aplicacin Web que muestra datos de una base de datos 1175 27.2.2
Modicacin del archivo de bean de pgina para la aplicacin
LibretaDirecciones 1183 27.3 Componentes JSF habilitados para Ajax
1185 27.3.1 Biblioteca de componentes Java BluePrints 1186 27.4
Autocomplete Text Field y formularios virtuales 1187 27.4.1
Conguracin de los formularios virtuales 1187 27.4.2 Archivo JSP con
formularios virtuales y un AutoComplete Text Field 1189 27.4.3 Cmo
proporcionar sugerencias para un AutoComplete Text Field 1192 27.5
Componente Map Viewer de Google Maps 1196 27.5.1 Cmo obtener una
clave de la API Google Maps 1196 27.5.2 Cmo agregar un componente y
un Map Viewer a una pgina 1196 27.5.3 Archivo JSP con un componente
Map Viewer 1197 27.5.4 Bean de pgina que muestra un mapa en el
componente Map Viewer 1201 27.6 Conclusin 1206 27.7 Recursos Web
1206 28 Servicios Web JAX-WS, Web 2.0 y Mash-ups 1212 28.1
Introduccin 1213 28.1.1 Descarga, instalacin y conguracin de
Netbeans 5.5 y Sun Java System Application Server 1214 28.1.2
Centro de recursos de servicios Web y Centros de recursos sobre
Java en www.deitel.com 1215 28.2 Fundamentos de los servicios Web
de Java 1215 28.3 Creacin, publicacin, prueba y descripcin de un
servicio Web 1216 28.3.1 Creacin de un proyecto de aplicacin Web y
cmo agregar una clase de servicio Web en Netbeans 1216 28.3.2
Denicin del servicio Web EnteroEnorme en Netbeans 1217 28.3.3
Publicacin del servicio Web EnteroEnorme desde Netbeans 1221 28.3.4
Prueba del servicio Web EnteroEnorme con la pgina Web Tester de Sun
Java System Application Server 1222 28.3.5 Descripcin de un
servicio Web con el Lenguaje de descripcin de servicios Web (WSDL)
1224
17. Contenido xvii 28.4 Cmo consumir un servicio Web 1224
28.4.1 Creacin de un cliente para consumir el servicio Web
EnteroEnorme 1225 28.4.2 Cmo consumir el servicio Web EnteroEnorme
1227 28.5 SOAP 1234 28.6 Rastreo de sesiones en los servicios Web
1234 28.6.1 Creacin de un servicio Web Blackjack 1235 28.6.2 Cmo
consumir el servicio Web Blackjack 1239 28.7 Cmo consumir un
servicio Web controlado por base de datos desde una aplicacin Web
1249 28.7.1 Conguracin de Java DB en Netbeans y creacin de la base
de datos Reservacion 1249 28.7.2 Creacin de una aplicacin Web para
interactuar con el servicio Web Reservacion 1253 28.8 Cmo pasar un
objeto de un tipo denido por el usuario a un servicio Web 1258 28.9
Conclusin 1266 28.10 Recursos Web 1267 29 Salida con formato 1275
29.1 Introduccin 1276 29.2 Flujos 1276 29.3 Aplicacin de formato a
la salida con printf 1276 29.4 Impresin de enteros 1277 29.5
Impresin de nmeros de punto otante 1278 29.6 Impresin de cadenas y
caracteres 1279 29.7 Impresin de fechas y horas 1280 29.8 Otros
caracteres de conversin 1283 29.9 Impresin con anchuras de campo y
precisiones 1284 29.10 Uso de banderas en la cadena de formato de
printf 1285 29.11 Impresin con ndices como argumentos 1289 29.12
Impresin de literales y secuencias de escape 1290 29.13 Aplicacin
de formato a la salida con la clase Formatter 1290 29.14 Conclusin
1291 30 Cadenas, caracteres y expresiones regulares 1297 30.1
Introduccin 1298 30.2 Fundamentos de los caracteres y las cadenas
1298 30.3 La clase String 1299 30.3.1 Constructores de String 1299
30.3.2 Mtodos length, charAt y getChars de String 1300 30.3.3
Comparacin entre cadenas 1301 30.3.4 Localizacin de caracteres y
subcadenas en las cadenas 1305 30.3.5 Extraccin de subcadenas de
las cadenas 1307 30.3.6 Concatenacin de cadenas 1308 30.3.7 Mtodos
varios de String 1308 30.3.8 Mtodo valueOf de String 1309 30.4 La
clase StringBuilder 1311 30.4.1 Constructores de StringBuilder 1311
30.4.2 Mtodos length, capacity, setLength y ensureCapacity de
StringBuilder 1312 30.4.3 Mtodos charAt, setCharAt, getChars y
reverse de StringBuilder 1313 30.4.4 Mtodos append de StringBuilder
1314 30.4.5 Mtodos de insercin y eliminacin de StringBuilder 1316
30.5 La clase Character 1317 30.6 La clase StringTokenizer 1321
30.7 Expresiones regulares, la clase Pattern y la clase Matcher
1322 30.8 Conclusin 1330
18. xviii Contenido A Tabla de precedencia de los operadores
1340 B Conjunto de caracteres ASCII 1342 C Palabras clave y
palabras reservadas 1343 D Tipos primitivos 1344 E Sistemas
numricos 1345 E.1 Introduccin 1346 E.2 Abreviatura de los nmeros
binarios como nmeros octales y hexadecimales 1348 E.3 Conversin de
nmeros octales y hexadecimales a binarios 1349 E.4 Conversin de un
nmero binario, octal o hexadecimal a decimal 1350 E.5 Conversin de
un nmero decimal a binario, octal o hexadecimal 1351 E.6 Nmeros
binarios negativos: notacin de complemento a dos 1352 F GroupLayout
1357 F.1 Introduccin 1357 F.2 Fundamentos de GroupLayout 1357 F.3
Creacin de un objeto SelectorColores 1358 F.4 Recursos Web sobre
GroupLayout 1367 G Componentes de integracin Java Desktop (JDIC)
1368 G.1 Introduccin 1368 G.2 Pantallas de inicio 1368 G.3 La clase
Desktop 1370 G.4 Iconos de la bandeja 1371 G.5 Proyectos JDIC
Incubator 1373 G.6 Demos de JDIC 1373 H Mashups 1374 ndice
1381
19. No vivas ms en fragmentos, slo conctate. Edgar Morgan
Foster Bienvenido a Java y Cmo programar en Java, 7 edicin! En
Deitel & Associates escribimos para Prentice Hall libros de
texto sobre lenguajes de programacin y libros de nivel profesional,
impartimos capacitacin a empresas en todo el mundo y desarrollamos
negocios en Internet. Fue un placer escribir esta edicin ya que
reeja cam- bios importantes en el lenguaje Java y en las formas de
impartir y aprender programacin. Se han realizado ajustes
considerables en todos los captulos. Caractersticas nuevas y
mejoradas He 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 revisamos
cuidadosamente, en base a la Especicacin 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 la orientacin
de los profesores universitarios en nuestros equipos de revisin,
para asegurarnos de obtener el nivel conceptual correcto. Todo el
libro est orientado a objetos, y las explicaciones sobre la POO son
claras y accesibles. En el captulo 1 presentamos los conceptos
bsicos y la terminologa de la tecnologa de objetos. Los estudiantes
desarrollan sus primeras clases y objetos personalizados en el
captulo 3. Al presentar los objetos y las clases en los primeros
captulos, hacemos que los estudiantes piensen acerca de 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, Empleado y LibroCalicaciones, 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 cantidad de GUI y grcos a cubrir; desde cero,
a una secuencia introductoria de diez secciones breves, hasta un
tratamiento 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 Unicado de Modelado): UML 2,
el lenguaje grco estndar en la industria para modelar sistemas
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 del cdigo. 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 nuevo sistema de administracin de
bases de datos Java DB/Apache Derby, adems de MySQL. Este captulo
incluye un ejemplo prctico OO sobre el desarrollo de una libreta de
direcciones controlada por una base de datos, la cual demuestra las
instrucciones preparadas y el descubrimiento automtico de contro-
ladores de 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 una manera rpida y sencilla. El captulo 26
incluye ejemplos sobre la creacin de GUIs de aplicaciones Web,
Prefacio
20. el manejo de eventos, la validacin de formularios y el
rastreo de sesiones. El material de JSF sustituye los captulos
anteriores sobre servlets y JavaServer Pages (JSP). Agregamos el
captulo 27, Aplicaciones Web: parte 2, que habla acerca del
desarrollo de aplicaciones Web habilitadas para Ajax, usando las
tecnologas JavaServer Faces y Java BluePrints. Este captulo incluye
una aplicacin de libreta de direcciones Web multiniveles,
controlada por una base de datos, que permite a los usuarios
agregar y buscar contactos, y mostrar las direcciones de los
contactos en mapas de Google Maps. Esta aplicacin habilitada para
Ajax le proporciona una sensacin real del desarrollo Web 2.0. La
aplicacin utiliza Componentes JSF habilitados para Ajax para
sugerir los nombres de los contactos, mientras el usuario escribe
un nombre para localizar y mostrar una direccin localizada en un
mapa de Google Maps. Agregamos el captulo 28, Servicios Web JAX-WS,
Web 2.0 y Mash-ups que utiliza un mtodo basado en herramientas para
crear y consumir servicios Web, una capacidad tpica de Web 2.0. Los
ejemplos prcticos incluyen el desarrollo de los servicios Web del
juego de blackjack y un sistema de reservaciones de 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- vos
centros de recursos para apoyar a nuestros lectores acadmicos y
profesionales. D un vistazo a nues- tros nuevos centros de recursos
(www.deitel.com/resourcecenters.html), incluyendo: Java SE 6
(Mustang), Java, Evaluacin y Certicacin de Java, Patrones de Diseo
de Java, Java EE 5, Motores de Bsqueda de Cdigo y Sitios de Cdigo,
Programacin de Juegos, Proyectos de Programacin y muchos 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) ms reciente(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 especial a 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- to mltiple. Hablamos
sobre los nuevos Componentes de Integracin de Escritorio de Java
(JDIC), como las panta- llas de 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 de diseo de GUI NetBeans 5.5 Matisse para crear GUIs
portables que se adhieran a los lineamientos de diseo de GUI de la
plataforma subyacente. Presentamos las nuevas caractersticas de
ordenamiento y ltrado de JTable, que permiten al usuario reordenar
los datos en un objeto JTable y 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 en aplicaciones 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. xx Prefacio
21. Instrucciones 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
autoboxing y auto-unboxing, respectivamente. Uso de genricos para
crear modelos generales de mtodos y clases que pueden declararse
una vez, pero usarse 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, que trabajaron 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- riencia informativa, interesante, retadora y placentera.
El libro incluye una extensa suite de materiales comple- mentarios
para 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
sus entradas y salidas. ste es nuestro caracterstico mtodo de cdigo
activo (live code); presentamos la mayora de 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 deitel@deitel. com; le
responderemos a la brevedad. Para obtener actualizaciones sobre
este libro y el estado de todo el software de 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 electrnico Deitel Buzz Online y visite la pgina
www.deitel.com/resourcecenters.html para tener acceso a nuestra
lista creciente de centros de recursos. Uso de UML 2 para
desarrollar un diseo orientado a objetos de un ATM. UML 2 se ha
convertido en el lenguaje de modelado grco preferido para disear
sistemas orientados a objetos. Todos los diagramas de UML en el
libro cumplen con la especicacin UML 2. Utilizamos los diagramas de
actividad de UML para demostrar el ujo de control en cada una de
las instrucciones de control de Java, y usamos los diagramas de
clases 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 objetos
mediante el uso de UML. La revisin del ejemplo prctico estuvo a
cargo de un distinguido equipo de profesores y profesionales de la
industria relacionados con DOO/UML, incluyendo lderes en el campo
de Rational (los creadores de UML) y el Grupo de administracin de
objetos (responsable de la evolucin de UML). En el ejem- plo
prctico, diseamos e implementamos por completo el software para un
cajero automtico (ATM) simple. Las secciones Ejemplo prctico de
Ingeniera de Software al nal de los captulos 1 a 8 y 10 presentan
una introduccin cuidadosamente planeada al diseo orientado a
objetos mediante el uso de UML. Presentamos un subconjunto conciso
y simplicado 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 de
principio a n, que concluye con un recorrido detallado a travs del
cdigo completo en Java. Las secciones del Ejemplo Prctico de
Ingeniera de Software ayudan a los estudiantes a desarrollar un
diseo orientado a objetos para 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 nal del captulo 1, introducimos los conceptos
bsicos y la terminologa del DOO. En las secciones opcionales
Ejemplo Prctico de Ingeniera de Software al nal de los captulos 2 a
5, consideramos cuestiones ms sustanciales al emprender la tarea de
resolver un problema retador con las tcnicas del DOO. Analizamos un
documento de requerimientos tpico que especi- ca un sistema a
construir, determina los objetos necesarios para implementar ese
sistema, establece los atributos que deben tener estos objetos, ja
los comportamientos que deben exhibir estos objetos y especica la
forma en que deben interactuar los objetos entre s para cumplir con
los requerimientos del sistema. En un apndice Prefacio xxi
22. Web adicional presentamos el cdigo completo de una
implementacin en Java del sistema orientado a objetos que diseamos
en los primeros captulos. El ejemplo prctico ayuda a preparar a los
estudiantes para los tipos de proyectos sustanciales que encontrarn
en la industria. Empleamos un proceso de diseo orientado a objetos
cuidadosamente 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 clave de la programacin orientada a objetos,
incluyendo clases, objetos, encapsulamiento, visibilidad,
composicin, herencia y polimorsmo. Grco de dependencias En el grco
de la siguiente pgina se muestra las dependencias entre los
captulos, para ayudar a los profesores a pla- near su programa de
estudios. Cmo programar en Java 7 edicin es un libro extenso,
apropiado para una variedad de cursos de programacin en distintos
niveles. Los captulos 1-14 forman una secuencia de programacin
elemental accesible, con una slida introduccin a la programacin
orientada a objetos. Los captulos 11, 12, 20, 21 y 22 for- man una
secuencia sustancial de GUI, grcos y multimedia. Los captulos 15 a
19 forman una excelente secuencia de estructuras de datos. Los
captulos 24 a 28 forman una clara secuencia de desarrollo Web con
uso intensivo de bases de datos. Mtodo de enseanza Cmo programar en
Java 7 edicin contiene una extensa coleccin de ejemplos. El libro
se concentra en los principios de la buena ingeniera de software,
haciendo hincapi en la claridad de los programas. Enseamos mediante
ejemplos. Somos educadores que impartimos temas de vanguardia en
salones de clases de la industria alrededor del mundo. El Dr.
Harvey M. Deitel tiene 20 aos de experiencia en la enseanza
universitaria y 17, en la enseanza en la industria. Paul Deitel
tiene 15 aos de experiencia en la enseanza en la industria. Juntos
han impartido 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; esto signica que cada
nuevo concepto se presenta en el contexto de una aplicacin en Java
completa y funcional, que es seguido inmediatamente por una o ms
ejecuciones actuales, que muestran las entradas y salidas del
programa. Este estilo ejemplica la manera en que enseamos y
escribimos acerca de la programacin; a ste le llamamos el mtodo del
cdigo activo. Resaltado de cdigo. Colocamos rectngulos de color
gris alrededor de los segmentos de cdigo clave en cada programa.
Uso de fuentes para dar nfasis. Colocamos los trminos clave y la
referencia a la pgina del ndice para cada ocurrencia de denicin en
texto en negritas para facilitar su referencia. 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, int x = 5). Acceso Web. Todos los
ejemplos de cdigo fuente para Cmo programar en Java 7 edicin (y
para nuestras otras publicaciones) se pueden descargar en:
www.deitel.com/books/jhtp7 www.pearsoneducacion.net/deitel El
registro en el sitio es un proceso fcil y rpido. Descargue todos
los ejemplos y, a medida que lea las correspon- dientes discusiones
en el libro de texto, despus ejecute cada programa. Realizar
modicaciones a los ejemplos y ver 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 debe esperar 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
loscas y las dems ofrecen ideas interesantes. Esperamos que
disfrute relacionando las frases con el material del captulo. xxii
Prefacio
23. Plan general. El plan general de cada captulo le permite
abordar el material de manera ordenada, para poder anticiparse a lo
que est por venir y establecer un ritmo cmodo y efectivo de
aprendizaje. Ilustraciones/Figuras. Incluimos una gran cantidad de
grcas, tablas, dibujos lineales, programas y salidas de programa.
Modelamos el ujo de control en las instrucciones de control
mediante diagramas de actividad en 1 Introduccin a las
computadoras, Internet y Web 2 Introduccin a las aplicaciones en
Java 3 Introduccin a las clases y los objetos 4 Instrucciones de
control: parte 1 5 Instrucciones de control: parte 2 6 Mtodos: Un
anlisis ms detallado 10 Programacin orientada a objetos:
polimorfismo 8 Clases y objetos: un anlisis ms detallado 9
Programacin orientada a objetos: herencia 11 Componentes de la GUI:
parte 1 12 Grficos y Java2D 25 Acceso a base de datos con JDBC1 13
Manejo de excepciones1 15 Recursividad3 18 Genricos 24 Redes2 14
Archivos y flujos 23 Subprocesamiento mltiple4 7 Arreglos 16
Bsqueda y ordenamiento 21 Multimedia: applets y aplicaciones 22
Componentes de la GUI: parte 2 26 Aplicaciones Web: parte 1 27
Aplicaciones Web: parte 219 Colecciones 20 Introduccin a los
applets de Java 29 Salida con formato (la mayor parte) 30 Cadenas,
caracteres y expresiones regulares 3.9 Uso de cuadros de dilogo
(Opcional) Ruta de GUI y grficos 4.14 Creacin de dibujos simples
5.10 Dibujo de rectngulos y valos 6.13 Colores y figuras rellenas
7.13 Cmo dibujar arcos 8.18 Uso de objetos con grficos 9.8 Mostrar
texto e imgenes usando etiquetas 10.8 Realizar dibujos mediante el
polimorfismo 17 Estructuras de datos 28 Servicios Web JAX-WS, Web
2.0 y Mash-ups 1. 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 extenso al 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 para un ejemplo. Prefacio xxiii
24. UML. Los diagramas de clases de UML modelan los campos,
constructores y mtodos de las clases. En el ejemplo prctico
opcional del ATM de DOO/UML 2 hacemos uso extensivo de seis tipos
principales de diagramas en UML. Tips de programacin. Incluimos
tips de programacin para ayudarle a enfocarse en los aspectos
importantes del desarrollo de programas. Estos tips y prcticas
representan lo mejor que hemos podido recabar a lo largo de seis
dcadas combinadas de experiencia en la programacin y la enseanza.
Una de nuestras alumnas, estudiante de matemticas, recientemente
nos coment que siente que este mtodo es similar al de resaltar
axiomas, teoremas y corolarios en los libros de matemticas, ya que
proporciona una base slida sobre la cual se puede construir buen
software. Buena prctica de programacin Las buenas prcticas de
programacin llaman la atencin hacia tcnicas que le ayudarn a
producir programas ms claros, comprensibles y fciles de mantener.
Error comn de programacin Con frecuencia, los estudiantes tienden a
cometer ciertos tipos de errores; al poner atencin en estos Errores
comunes de programacin se reduce la probabilidad de que usted pueda
cometerlos. Tip para prevenir errores Estos tips contienen
sugerencias para exponer los errores y eliminarlos de sus
programas; muchos de ellos describen aspectos de Java que evitan
que los errores entren a los programas. Tip de rendimiento A los
estudiantes les gusta turbo cargar sus programas. Estos tips
resaltan las oportunidades para hacer que sus programas se ejecuten
ms rpido, o para minimizar la cantidad de memoria que ocupan. Tip
de portabilidad Incluimos 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 software Las Observaciones
de ingeniera de software resaltan los asuntos de arquitectura y
diseo, lo cual afecta la cons- truccin de los sistemas de software,
especialmente los de gran escala. Archivo Nuevo Abrir... Cerrar
Observaciones de apariencia visual Le ofrecemos Observaciones de
apariencia visual para resaltar las convenciones de la interfaz
grca de usuario. Estas observaciones le ayudan a disear interfaces
grcas de usuario atractivas y amigables para el usuario, en con-
formidad con las normas de la industria. Seccin de conclusin. Cada
uno de los captulos termina con una seccin breve de conclusin, que
recapitula el contenido del captulo y la transicin al siguiente
captulo. Vietas de resumen. Cada captulo termina con estrategias
pedaggicas adicionales. Presentamos un resumen detallado del
captulo, estilo lista con vietas, seccin por seccin. Terminologa.
Incluimos una lista alfabetizada de los trminos importantes denidos
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. xxiv
Prefacio
25. Ejercicios. Cada captulo concluye con un diverso conjunto
de ejercicios, incluyendo recordatorios simples de terminologa y
conceptos importantes; identicar los errores en muestras de cdigo,
escribir instrucciones in- dividuales de programas; escribir
pequeas porciones de mtodos y clases en Java; escribir mtodos,
clases y programas completos; y crear proyectos nales importantes.
El extenso nmero de ejercicios permite a los instructores adaptar
sus cursos a las necesidades nicas de sus estudiantes, y variar las
asignaciones de los cur- sos cada semestre. Los profesores pueden
usar estos ejercicios para formar tareas, exmenes cortos, exmenes
regulares y proyectos nales. [NOTA: No nos escriba para
solicitarnos acceso al Centro de Recursos para Instructores. El
acceso est limitado estrictamente a profesores universitarios que
impartan clases en base al 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 el libro 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 gura en forma
alfabtica y como subndice, bajo Ejemplos. Esto facilita encontrar
los ejemplos usando las caractersticas especiales. Recursos para el
estudiante incluidos en Cmo programar en Java 7 edicin Hay,
disponibles a la venta, una variedad de herramientas de desarrollo,
pero ninguna de ellas es necesaria para comenzar a trabajar con
Java. Escribimos Cmo programar en Java 7 edicin utilizando slo el
nuevo Kit de Desarrollo de Java Standard Edition (JDK), versin 6.0.
Puede descargar la versin actual del JDK del sitio Web de Java de
Sun: java.sun.com/javase/downloads/index.jsp. Este sitio tambin
contiene las descargas de la documentacin del JDK. El CD que se
incluye con este libro contienen el Entorno de Desarrollo Integrado
(IDE) NetBeans 5.5 para desarrollar todo tipo de aplicaciones en
Java, y el software Sun Java Studio Creator 2 Update 1 para el
desarrollo de aplicaciones Web. Se proporciona tambin una versin en
Windows de MySQL 5.0 Community Edition 5.0.27 y MySQL Connector/J
5.0.4, para el procesamiento de datos que se lleva a cabo en los
captulos 25 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 los recursos. 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
edicin Cmo programar en Java 7 edicin incluye multimedia
interactiva con mucho audio y basada en Web, comple- mentaria para
el libro Java Multimedia Cyber Classroom, 7 edicin, disponible en
ingls. Nuestro Ciber saln de clases (Cyber Classroom) basado en Web
incluye recorridos con audio de los ejemplos de cdigo de los
captulos 1 a 14, soluciones a casi la mitad de los ejercicios del
libro, un manual de laboratorio y mucho ms. Para obtener ms
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
slo utilizan libros de texto. Prefacio xxv
26. Recursos para el instructor de Cmo programar en Java 7
edicin Cmo programar en Java 7 edicin tiene una gran cantidad de
recursos para los profesores. El Centro de Recursos para
Instructores de Prentice Hall contiene el Manual de soluciones, con
respuestas para la mayora de los ejercicios al nal de cada captulo,
un Archivo de elementos de prueba de preguntas de opcin mltiple
(aproximadamente dos por cada seccin del libro) y diapositivas en
PowerPoint que contienen todo el cdigo y las guras del texto, adems
de los elementos en vietas que sintetizan los puntos clave del
libro. Los profesores pueden personalizar las diapositivas. Si
usted todava no es un miembro acadmico registrado, pngase en
contacto con su represen- tante de Pearson Educacin. Cabe mencionar
que todos estos recursos se encuentran en ingls. Boletn de correo
electrnico gratuito Deitel Buzz Online Cada semana, el boletn de
correo electrnico Deitel Buzz Online anuncia nuestro(s) centro(s)
de recursos ms reciente(s) e incluye comentarios acerca de las
tendencias y desarrollos en la industria, vnculos a artculos y
recur- sos gratuitos 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 por instructores y mucho ms.
Tambin es una buena forma para que usted se mantenga actualizado
acerca de todo lo relacionado con Cmo programar en Java 7 edicin.
Para suscribirse, visite la pgina Web:
www.deitel.com/newsletter/subscribe.html Novedades en Deitel
Centros de recursos y la iniciativa de negocios por Internet de
Deitel. Hemos creado muchos centros de recursos en lnea (en
www.deitel.com/resourcecenters.html) para mejorar su experiencia de
aprendizaje en Java. Anunciamos nuevos centros de recursos en cada
edicin del boletn de correo electrnico Deitel Buzz Online. Aquellos
de especial inters para los lectores de este libro incluyen: Java,
Certicacin en Java, Patrones de 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
Aliados, Servicios de Alerta, ASP.NET, Economa de Atencin, Creacin
de Comunidades Web, C, C++, C#, Juegos de Computadora, DotNetNuke,
FireFox, Gadgets, Google AdSense, Google Analytics, Google Base,
Google Services, 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, Recommender Systems, RSS, Ruby, Motores de Bsqueda,
Optimizacin de Motores de Bsqueda, Skype, Sudoku, Mundos Virtuales,
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- nados de nuestras
publicaciones actuales y futuras como parte de nuestra iniciativa
de contenido libre. En cada tema del boletn de correo electrnico
Deitel Buzz Online, anunciamos las adiciones ms recientes a nuestra
biblioteca de contenido libre. Reconocimientos Uno de los mayores
placeres al escribir un libro de texto es el de reconocer el
esfuerzo de mucha gente, cuyos nom- bres quiz no aparezcan en la
portada, pero cuyo arduo trabajo, cooperacin, amistad y comprensin
fue crucial para 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- tribuyeron a esta publicacin: Megan
Shuster, con especialidad en ciencias computacionales en el
Swarthmore College, 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 Cmo programar en Java 6 edicin: Andrew
B. Goldberg, Je Listeld, 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- fesionales en Prentice Hall. Apreciamos el
extraordinario esfuerzo de Marcia Horton, Directora Editorial de la
Divisin de Ingeniera y Ciencias Computacionales de Prentice Hall.
Jennifer Cappello y Dolores Mars hicieron xxvi Prefacio
27. un 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 la portada 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, escrutinizaron el texto y los
programas, proporcionando innumerables sugerencias para mejorar la
precisin e integridad de la presentacin. Apreciamos con sinceridad
los esfuerzos de nuestros revisores de post-publicacin de la 6
edicin, y nuestros revisores 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 especicaciones de JDBC/Rowset, Java SE
Engi- neering), Ed Burns, Ludovic Champenois (Servidor de
Aplicaciones de Sun para programadores de Java EE con 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),
Sanjay Dhamankar (Grupo Core Developer Platform), Jesse Glick
(Grupo NetBeans), Brian Goetz (autor de Java Con- currency in
Practice, Addison-Wesley, 2006), Doug Kohlert (Grupo Web
Technologies and Standards), Sandeep Konchady (Organizacin de
Ingeniera de Software de Java), John Morrison (Grupo Portal Server
Product de Sun Java System), Winston Prakash, Brandon Taylor (grupo
SysNet dentro de la Divisin de Software) y Jayashri Visvanathan
(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 de Choueifat, Lbano), Joe Bowbeer (Mobile App
Consulting), Harlan Brewer (Select Engineering Services), Marita
Ellixson (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 Pacic Lutheran) y Hua
Yan (Borough of Manhattan Community Collage, City University of New
York). Revisores de la post-publicacin de Cmo programar en Java 6
edicin: Anne Horton (Lockheed Martin), William Martz (Universidad
de Colorado, en Colorado Springs), Bill OFarrell (IBM), Jery Babb
(Universidad Virginia Commonwealth), Jerey Six (Universidad de
Delaware, Instalaciones Adjuntas), Jesse Glick (Sun Microsystems),
Karen Tegtmeyer (Model Technologies, Inc.), Kyle Gabhart (L-3
Communications), Marita Ellixson (Eglin AFB, Universidad Indiana
Wesleyan, Facilitador en Jefe) 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), Ephrem Eyob (Universidad Estatal de Virginia), Bjorn
Foss (Universidad Metropolitana de Florida), Bill Freitas (The
Lawrenceville School), Joe Kasprzyk (Colegio Estatal de Salem),
Brian Larson (Modesto Junior College), Roberto Lopez-Herrejon
(Universidad de Texas en Austin), Dean Mellas (Cerritos College),
David Messier (Eastern Uni- versity), Andy Novobilski (Universidad
deTennessee, Chattanooga), Richard Ord (Universidad de California,
San Diego), Gavin Osborne (Saskatchewan Institute of Applied
Science & Technology), Donna Reese (Universidad Estatal de
Mississippi), Craig Slinkman (Universidad de Texas en Arlington),
Sreedhar Thota (Western Iowa Tech Community Collage), Mahendran
Velauthapillai (Universidad de Georgetown), Loran Walter
(Universidad Tecnolgica de Lawrence) y Stephen Weiss (Universidad
de Carolina del Norte en Chapel Hill). Revisores de la industria:
Butch Anton (Wi-Tech Consulting), Jonathan Bruce (Sun Microsystems,
Inc.; Lder de Especica- ciones de JCP para JDBC), Gilad Bracha (Sun
Microsystems, Inc.; Lder de Especicaciones de JCP para Gen- ricos),
Michael Develle (Consultor independiente), Jonathan Gadzik
(Consultor independiente), Brian Goetz (Quiotix Corporation
(Miembro del Grupo de Expertos de Especicaciones de Herramientas de
Concurrencia de 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./Universidad de New Hampshire), Paul Monday
(Sun Microsystems, Inc.), Bill OFarrell (IBM), Cameron Skinner
(Embar- cadero Technologies, Inc.), Brandon Taylor (Sun
Microsystems, Inc.) y Karen Tegtmeyer (Consultor indepen- Prefacio
xxvii
28. diente). 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 (Eglin AFB/Universidad de Arkansas), Jonathan Gadzik
(Consultor independiente), Thomas 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
(Sun Microsystems, 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 la precisin e
integridad de la presentacin. Bueno ah lo tiene! Java es un
poderoso lenguaje de programacin que le ayudar a escribir programas
con rapidez y eciencia. Escala sin problemas hacia el mbito del
desarrollo de sistemas empresariales, para ayudar a las
organizaciones a crear sus sistemas de informacin crticos. A medida
que lea el libro, apreciaremos con sinceri- dad sus comentarios,
crticas, correcciones y sugerencias para mejorar el texto. Dirija
toda su correspondencia a: [email protected] Le 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. Deitel Dr. Harvey M. Deitel Maynard,
Massachussets Diciembre del 2006 Acerca de los autores Paul J.
Deitel, CEO y Director Tcnico de Deitel & Associates, Inc., es
egresado del Sloan School of Manage- ment del MIT (Massachussets
Institute of Technology), en donde estudi Tecnologa de la
Informacin. Posee las certicaciones Programador Certicado en Java
(Java Certied Programmer) y Desarrollador Certicado en Java (Java
Certied 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- nal Severe Storm Laboratory, White Sands Missile Range,
Rogue Wave Software, Boeing, Stratus, Cambridge Technology
Partners, Open Environment Corporation, One Wave, Hyperion
Software, Adra Systems, Entergy, CableData Systems, Nortel
Networks, Puma, iRobot, Invensys y muchos ms. Tambin ha ofrecido
conferencias de 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 aos de
experiencia en el campo de la computacin; lo que incluye un amplio
trabajo acadmico y en la industria. El Dr. Deitel tiene una
licenciatura y una maestra por el MIT y un doctorado de la
Universidad de Boston. Tiene 20 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 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 piensan escribir muchos ms. Los
textos de los Deitel se han ganado el reconocimiento internacional
y han sido tradu- cidos al japons, alemn, ruso, espaol, chino
tradicional, chino simplicado, coreano, francs, polaco, italiano,
portugus, griego, urd y turco. El Dr. Deitel ha impartido cientos
de seminarios profesionales para grandes empresas, 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 y la 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 xxviii
Prefacio
29. Iniciativa de Negocios en Internet. La empresa proporciona
cursos, que son impartidos por instructores, sobre la 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-
dadores de Deitel & Associates, Inc. son el Dr. Harvey M.
Deitel y Paul J. Deitel. Sus clientes incluyen muchas de las
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 libros de texto de vanguardia sobre programacin,
libros profesionales, multimedia interactiva en CD como los Cyber
Classrooms, Cursos Completos de Capacitacin, cursos de capacitacin
basados en Web y contenido electrnico para los 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] Para
conocer ms acerca de Deitel & Associates, Inc., sus
publicaciones y su currculum mundial de la Serie de Capacitacin
Corporativa DIVE INTO, visite: www.deitel.com y suscrbase al boletn
gratuito de correo electrnico, Deitel Buzz Online, en:
www.deitel.com/newsletter/subscribe.html Puede vericar la lista
creciente de Centros de Recursos Deitel en:
www.deitel.com/resourcecenters.html Quienes deseen comprar
publicaciones de Deitel pueden hacerlo en:
www.deitel.com/books/index.html Las empresas, el gobierno, las
instituciones militares y acadmicas que deseen realizar pedidos en
masa deben hacerlo directamente con Prentice Hall. Para obtener ms
informacin, visite: www.prenhall.com/mischtm/support.html#order
Prefacio xxix
30. Antes de comenzar a utilizar este libro, debe seguir las
instrucciones de esta seccin para asegurarse que Java est instalado
de manera apropiada en su computadora. Convenciones de fuentes y
nomenclatura Utilizamos varios tipos de letra para diferenciar los
componentes en la pantalla (como los nombres de mens y los
elementos de los mismos) y el cdigo o los comandos en Java. Nuestra
convencin es hacer hincapi en los componentes en pantalla en una
fuente Helvetica sans-serif en negritas (por ejemplo, el men
Archivo) y enfatizar el 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) 6 Los ejemplos en este
libro se desarrollaron con el Kit de Desarrollo de Java Standard
Edition (JDK) 6. Puede descargar la versin ms reciente y su
documentacin en: java.sun.com/javase/6/download.jsp Si tiene
preguntas, enve un correo electrnico a [email protected]. Le
responderemos en breve. Requerimientos de software y hardware del
sistema Procesador Pentium III de 500 MHz (mnimo) o de mayor
velocidad; Sun Java Studio Creator 2 Update 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 (con Service 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 CD Los ejemplos para Cmo programar en Java, 7
edicin se encuentran en los CD (Windows y Linux) que se inclu- yen
en este libro. Siga los pasos de la siguiente seccin, Cmo copiar
los ejemplos del libro del CD, para copiar el directorio de
ejemplos apropiado del CD a su disco duro. Le sugerimos trabajar
desde su disco duro en lugar de hacerlo desde su unidad de CD por
dos razones: 1, los CD son de slo lectura, por lo que no podr
guardar sus aplicaciones 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 Antes de empezar
31. computadora, 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 el archivo welcome.html. Cmo copiar los
ejemplos del libro del CD Las capturas de pantalla de esta seccin
pueden diferir un poco de lo que usted ver en su computadora, de
acuer- do con el sistema operativo y el explorador Web de que
disponga. Las instrucciones de los siguientes pasos asumen que 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 (gura 1) en Win- dows. Tambin puede utilizar el
Explorador de Windows para ver el contenido del CD y hacer doble
clic en welcome.htm para mostrar esta pgina. 2. Abrir el directorio
del CD-ROM. Haga clic en el vnculo Browse CD Contents (Explorar
contenido del CD) (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 Browse CD Contents para acceder al contenido del CD 3.
Copiar el directorio ejemplos. Haga clic en el directorio ejemplos
(gura 2), despus seleccione Copiar. A continuacin, use el
Explorador de Windows para ver el contenido de su unidad C:. (Tal
vez necesite 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- torio ejemplos 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 una unidad distinta, con base en la
conguracin de su computadora, en el laboratorio de su escuela o sus
preferencias personales. Si trabaja en un laboratorio de
computadoras, consulte con su profesor para obtener ms informacin
para conrmar en dnde se deben guardar los ejemplos]. Modicacin de
la propiedad de slo lectura de los archivos Los archivos de ejemplo
que copi a su computadora desde el CD son de slo lectura. A
continuacin eliminar la propiedad de slo lectura, para poder
modicar y ejecutar los ejemplos. 1. Abrir el cuadro de dilogo
Propiedades. Haga clic con el botn derecho del ratn en el
directorio ejemplos y seleccione Propiedades. A continuacin
aparecer el cuadro de dilogo Propiedades de ejemplos (gura 3).
Antes de empezar xxxi
32. 2. Cambiar la propiedad de slo lectura. En la seccin
Atributos de este cuadro de dilogo, haga clic en el botn Slo
lectura para eliminar la marca de vericacin (gura 4). Haga clic en
Aplicar para aplicar los cambios. Figura 3 | Cuadro de dilogo
Propiedades de ejemplos. xxxii Antes de empezar Figura 2 | Copia
del directorio ejemplos. Haga clic con el botn derecho del ratn en
el directorio ejemplos Seleccione Copiar
33. Figura 4 | Desactivar la casilla de vericacin Slo lectura.
Figura 5 | Eliminar la propiedad de slo lectura para todos los
archivos en el directorio ejemplos. Antes de empezar xxxiii 3.
Cambiar la propiedad para todos los archivos. Al hacer clic en
Aplicar se mostrar la ventana Conr- mar cambios de atributos (gura
5). En esta ventana, haga clic en el botn de opcin Aplicar cambios
a esta carpeta y a todas las subcarpetas y archivos y haga clic en
Aceptar para eliminar la propiedad de slo lectura para todos los
archivos y directorios en el directorio ejemplos. Desactive el
atributo Slo lectura 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
Desarrollo de 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 en el botn DOWNLOAD para JDK 6. Debe aceptar el acuerdo de
licencia antes de descargar. Una vez que acepte el acuerdo, haga
clic en el vnculo para el instalador de su plataforma. Guarde el
instalador en su disco duro y no olvide en dnde lo guard. Antes de
instalar, lea con cuidado las instrucciones de instalacin del JDK
para su plataforma, 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 modica el
directorio predeterminado, asegrese de anotar el nombre y la
ubicacin exactos que eligi, ya que necesitar esta informa- cin ms
adelante en el proceso de instalacin. En Windows, el JDK se coloca,
de manera predeterminada, en el siguiente directorio: C:Archivos de
programaJavajdk1.6.0 Haga clic en este botn de opcin para eliminar
la propiedad Slo lectura para todos los archivos
34. Establecer la variable de entorno PATH La variable de
entorno PATH en su computadora indica qu directorios debe buscar la
computadora cuando inten- te localizar aplicaciones, como aquellas
que le permiten compilar y ejecutar sus aplicaciones en Java
(conocidas como javac.exe y java.exe, respectivamente). Ahora
aprender a establecer la variable de entorno PATH en su computadora
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 > Sistema para mostrar el cuadro de
dilogo Propiedades del sistema (gura 6). [Nota: su cuadro de dilogo
Pro- piedades del sistema puede tener una apariencia distinta al
que se muestra en la gura 6, dependiendo de la versin de Microsoft
Windows. Este cuadro de dilogo especco es de una computadora que
ejecuta Microsoft Windows XP. Sin embargo, el que aparece en su
computadora podra incluir distinta informacin]. 2. Abrir el cuadro
de dilogo Variables de entorno. Seleccione la cha Opciones
avanzadas de la parte superior del cuadro de dilogo Propiedades del
sistema (gura 7). Haga clic en el botn Variables de entorno para
desplegar el cuadro de dilogo Variables de entorno (gura 8). 3.
Editar la variable PATH. Desplcese por el cuadro Variables del
sistema para seleccionar la variable PATH. Haga clic en el botn
Modicar. Esto har que se despliegue el cuadro de dilogo Modicar la
variable del sistema (gura 9). 4. Modicar la variable PATH. Coloque
el cursor dentro del campo Valor de variable. Use la echa izquierda
para desplazar el cursor hasta el inicio de la lista. Al principio
de la lista, escriba el nombre del directorio en el que coloc el
JDK, seguido de bin; (gura 10). Agregue C:Archivos de progra- ma
Javajdk1.6.0bin; a la variable PATH, si eligi el directorio de
instalacin predeterminado. No coloque espacios antes o despus de lo
que escriba. No se permiten espacios antes o despus de cada valor
en una 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 mensaje como 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 versin ms reciente del JDK, tal vez
necesite modicar el nombre del directorio de instalacin del JDK en
la variable PATH. Figura 6 | Cuadro de dilogo Propiedades del
sistema. xxxiv Antes de empezar
35. Antes de empezar xxxv Figura 8 | Cuadro de dilogo Variables
de entorno. Figura 7 | Ficha Opciones avanzadas del cuadro de
dilogo Propiedades del sistema. Seleccione la cha Opciones
avanzadas Haga clic en el botn Variables de entorno Figura 9 |
Cuadro de dilogo Modicar la variable del sistema. Figura 10 |
Modicacin de la variable PATH.
36. Establecer la variable de entorno CLASSPATH Si trata de
ejecutar un programa en Java y recibe un mensaje como: Exception in
thread main java.lang.NoClassDefFoundError: SuClase entonces su
sistema tiene una variable de entorno CLASSPATH que debe modicarse.
Para corregir el error anterior, siga los pasos para establecer la
variable de entorno PATH, localice la variable CLASSPATH y modique
su valor para que 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- mos que lo disfrute! xxxvi Antes de
empezar
37. Introduccin a las computadoras, Internet y Web OBJETIVOS En
este captulo aprender a: Comprender los conceptos bsicos de
hardware y software. Conocer los conceptos bsicos de la tecnologa
de objetos, como las clases, objetos, atributos, comportamientos,
encapsulamiento, herencia y polimorsmo. Familiarizarse con los
distintos lenguajes de programacin. Saber qu lenguajes de
programacin se utilizan ms. Comprender un tpico entorno de
desarrollo en Java. Entender el papel de Java en el desarrollo de
aplicaciones cliente/servidor distribuidas para Internet y Web.
Conocer la historia de UML: el lenguaje de diseo orientado a
objetos estndar en la industria. Conocer la historia de Internet y
World Wide Web. Probar aplicaciones en Java. Nuestra vida se
malgasta por los detalles simplicar, simplicar. Henry David Thoreau
La principal cualidad del lenguaje es la claridad. Galen Mi sublime
objetivo deber llevarlo a cabo a tiempo. W. S. Gilbert Tena un
maravilloso talento para empacar estrechamente el pensamiento,
hacindolo portable. Thomas B. Macaulay Caray, creo que de los dos,
el intrprete es el ms difcil de entender! Richard Brinsley Sheridan
El hombre sigue siendo la computadora ms extraordinaria de todas.
John F. Kennedy 1
38. 2 Captulo 1 Introduccin a las computadoras, Internet y Web
1.1 Introduccin Bienvenido 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- piantes y apropiado para
los programadores experimentados que desarrollan sistemas de
informacin de tamao considerable. Cmo programar en Java, 7 edicin
es una herramienta efectiva de aprendizaje para cada una de estas
audiencias. Pedagoga La parte central del libro se enfoca en la
claridad de los programas, a travs de las tcnicas comprobadas de la
pro- gramacin orientada 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- nales en Java, y muestra la salida
que se obtiene al ejecutar estos programas en una computadora.
Enseamos las caractersticas de Java en un contexto de programas
completos y funcionales; a esto le llamamos el mtodo de cdigo
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. Fundamentos Los primeros captulos presentan los
fundamentos de las computadoras, la programacin de stas y el
lenguaje