0% encontró este documento útil (0 votos)
146 vistas45 páginas

Java Como Programar Deitel 10 Edicion

Cargado por

hapafit904
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
146 vistas45 páginas

Java Como Programar Deitel 10 Edicion

Cargado por

hapafit904
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 45

TM

Décima edición

www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd i 5/11/16 6:58 PM


www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd ii 5/4/16 10:13 PM


TM

Paul Deitel
Deitel & Associates, Inc.

www.fullengineeringbook.net
Harvey Deitel
Deitel & Associates, Inc.
Traducción
Alfonso Vidal Romero Elizondo
Ingeniero en Sistemas Electrónicos
Instituto Tecnológico y de Estudios Superiores de Monterrey - Campus Monterrey

Revisión técnica
Sergio Fuenlabrada Velázquez
Edna Martha Miranda Chávez
Judith Sonck Ledezma
Mario Alberto Sesma Martínez
Mario Oviedo Galdeano
José Luis López Goytia
Departamento de Sistemas
Unidad Profesional Interdisciplinaria de Ingeniería y Ciencias Sociales
y Administrativas, Instituto Politécnico Nacional, México
Datos de catalogación bibliográfica

DEITEL, PAUL y DEITEL, HARVEY


Cómo programar en Java
Décima edición

PEARSON EDUCACIÓN, México, 2016


ISBN: 978-607-32-3802-1
Área: Computación
Formato: 20 × 25.5 cm Páginas: 560

Authorized translation from the English language edition, entitled Java How to program 100th Edition, byy Paul Deitel and Harvey Deitel,
published by Pearson Education, Inc., publishing as Prentice Hall, Copyright © 2016. All rights reserved.
ISBN 9780133807806

Traducción autorizada de la edición en idioma inglés titulada Java How to program 10a edición, por Paul Deitel and Harvey Deitel,
publicada por Pearson Education, Inc., publicada como Prentice Hall, Copyright © 2016. Todos los derechos reservados.

Esta edición en español es la única autorizada.

Edición en español
Director General: Sergio Fonseca Garza
Director de innovación y servicios educativos: Alan David Palau
Gerencia de contenidos y servicios editoriales: Jorge Luis Íñiguez Caso
Coordinador de Contenidos, Educación Superior: Guillermo Domínguez Chávez
[email protected]
Especialista en Contenidos de Aprendizaje: Luis Miguel Cruz Castillo
Especialista en Desarrollo de Contenidos: Bernardino Gutiérrez Hernández

www.fullengineeringbook.net
Supervisor de Arte y Diseño:

DÉCIMA EDICIÓN, 2016


José Dolores Hernández Garduño

D.R. © 2016 por Pearson Educación de México, S.A. de C.V.


Antonio Dovalí Jaime, núm. 70,
Torre B, Piso 6, Col. Zedec
Ed. Plaza Santa Fe,
Deleg. Álvaro Obregón
C.P. 01210, Ciudad de México

Cámara Nacional de la Industria Editorial Mexicana Reg. Núm. 1031

Reservados todos los derechos. Ni la totalidad ni parte de esta publicación puede reproducirse, registrarse o transmitirse, por un
sistema de recuperación de información, en ninguna forma ni por ningún medio, sea electrónico, mecánico, fotoquímico, magnético
o electroóptico, por fotocopia, grabación o cualquier otro, sin permiso previo por escrito del editor.

El préstamo, alquiler o cualquier otra forma de cesión de uso de este ejemplar requerirá también la autorización del editor o de sus
representantes.

ISBN VERSIÓN IMPRESA: 978-607-32-3802-1


ISBN VERSIÓN E-BOOK: 978-607-32-3803-8

Impreso en México. Printed in Mexico.


1 2 3 4 5 6 7 8 9 0 - 19 18 17 16

www.pearsonenespañol.com

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd iv 5/4/16 10:13 PM


Para Brian Goetz,
Arquitecto del lenguaje Java de Oracle y
jefe de especificaciones para el proyecto
Lambda de Java SE 8:

Su tutoría nos ayudó a hacer un mejor libro.


Gracias por insistir en que lo hiciéramos bien.

Paul y Harvey Deitel

www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd v 5/4/16 10:13 PM


www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd vi 5/4/16 10:13 PM


Contenido

Prólogo xxi

Prefacio xxiii

Antes de empezar xxxvii

1 Introducción a las computadoras, Internet y Java 1


1.1 Introducción 2
1.2 Hardware y software 4
1.2.1 Ley de Moore 4
www.fullengineeringbook.net
1.3
1.4
1.2.2 Organización de la computadora
Jerarquía de datos
Lenguajes máquina, lenguajes ensambladores y lenguajes de alto nivel
5
6
9
1.5 Introducción a la tecnología de los objetos 10
1.5.1 El automóvil como un objeto 10
1.5.2 Métodos y clases 11
1.5.3 Instanciamiento 11
1.5.4 Reutilización 11
1.5.5 Mensajes y llamadas a métodos 11
1.5.6 Atributos y variables de instancia 11
1.5.7 Encapsulamiento y ocultamiento de información 12
1.5.8 Herencia 12
1.5.9 Interfaces 12
1.5.10 Análisis y diseño orientado a objetos (A/DOO) 12
1.5.11 El UML (Lenguaje unificado de modelado) 13
1.6 Sistemas operativos 13
1.6.1 Windows: un sistema operativo propietario 13
1.6.2 Linux: un sistema operativo de código fuente abierto 14
1.6.3 Android 14
1.7 Lenguajes de programación 15
1.8 Java 17
1.9 Un típico entorno de desarrollo en Java 17
1.10 Prueba de una aplicación en Java 21
1.11 Internet y World Wide Web 25
1.11.1 Internet: una red de redes 26
1.11.2 World Wide Web: cómo facilitar el uso de Internet 26
1.11.3 Servicios Web y mashupss 26

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd vii 5/11/16 6:59 PM


viii Contenido

1.11.4 Ajax 27
1.11.5 Internet de las cosas 27
1.12 Tecnologías de software 28
1.13 Cómo estar al día con las tecnologías de información 30

2 Introducción a las aplicaciones en Java:


entrada/salida y operadores 34
2.1 Introducción 35
2.2 Su primer programa en Java: impresión de una línea de texto 35
2.3 Edición de su primer programa en Java 41
2.4 Cómo mostrar texto con printf 43
2.5 Otra aplicación: suma de enteros 45
2.5.1 Declaraciones import 45
2.5.2 Declaración de la clase Suma 46
2.5.3 Declaración y creación de un objeto Scanner para obtener la entrada
del usuario mediante el teclado 46
2.5.4 Declaración de variables para almacenar enteros 47
2.5.5 Cómo pedir la entrada al usuario 48
2.5.6 Cómo obtener un valor int como entrada del usuario 48
2.5.7 Cómo pedir e introducir un segundo int 49
2.5.8 Uso de variables en un cálculo 49
2.5.9 Cómo mostrar el resultado del cálculo 49

www.fullengineeringbook.net
2.6
2.7
2.8
2.5.10 Documentación de la API de Java
Conceptos acerca de la memoria
Aritmética
Toma de decisiones: operadores de igualdad y relacionales
49
50
51
54
2.9 Conclusión 58

3 Introducción a las clases, los objetos, los métodos


y las cadenas 69
3.1 Introducción 70
3.2 Variables de instancia, métodos establecerr y métodos obtener 71
3.2.1 La clase Cuenta con una variable de instancia,
un método establecer y un método obtener 71
3.2.2 La clase PruebaCuenta que crea y usa un objeto de la clase Cuenta 74
3.2.3 Compilación y ejecución de una aplicación con varias clases 77
3.2.4 Diagrama de clases en UML de Cuenta con una variable de instancia
y métodos establecer y obtener 77
3.2.5 Observaciones adicionales sobre la clase PruebaCuenta 78
3.2.6 Ingeniería de software con variables de instancia private y métodos
establecerr y obtener public 79
3.3 Comparación entre tipos primitivos y tipos por referencia 80
3.4 La clase Cuenta: inicialización de objetos mediante constructores 81
3.4.1 Declaración de un constructor de Cuenta para la inicialización
personalizada de objetos 81
3.4.2 La clase PruebaCuenta: inicialización de objetos Cuenta cuando se crean 82
3.5 La clase Cuenta con un saldo: los números de punto flotante 84
3.5.1 La clase Cuenta con una variable de instancia llamada saldo de tipo double 85
3.5.2 La clase PruebaCuenta que usa la clase Cuenta 86

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd viii 5/4/16 10:13 PM


Contenido ix

3.6 (Opcional) Ejemplo práctico de GUI y gráficos: uso de cuadros de diálogo 90


3.7 Conclusión 93

4 Instrucciones de control: parte 1:


operadores de asignación, ++ y -- 101
4.1 Introducción 102
4.2 Algoritmos 102
4.3 Seudocódigo 103
4.4 Estructuras de control 103
4.5 Instrucción if de selección simple 105
4.6 Instrucción if...else de selección doble 106
4.7 Clase Estudiante: instrucciones if...else anidadas 111
4.8 Instrucción de repetición while 113
4.9 Formulación de algoritmos: repetición controlada
por un contador 115
4.10 Formulación de algoritmos: repetición controlada por un centinela 119
4.11 Formulación de algoritmos: instrucciones de control anidadas 126
4.12 Operadores de asignación compuestos 131
4.13 Operadores de incremento y decremento 131
4.14 Tipos primitivos 134
4.15 (Opcional) Ejemplo práctico de GUI y gráficos: creación de dibujos simples 135
4.16 Conclusión 139

www.fullengineeringbook.net
5 Instrucciones de control: parte 2: operadores lógicos 152
5.1 Introducción 153
5.2 Fundamentos de la repetición controlada por contador 153
5.3 Instrucción de repetición for 155
5.4 Ejemplos sobre el uso de la instrucción for 159
5.5 Instrucción de repetición do...while 163
5.6 Instrucción de selección múltiple switch 165
5.7 Ejemplo práctico de la clase PolizaAuto: objetos String en instrucciones switch 171
5.8 Instrucciones break y continue 174
5.9 Operadores lógicos 176
5.10 Resumen sobre programación estructurada 182
5.11 (Opcional) Ejemplo práctico de GUI y gráficos: dibujo de rectángulos y óvalos 187
5.12 Conclusión 190

6 Métodos: un análisis más detallado 200


6.1 Introducción 201
6.2 Módulos de programas en Java 201
6.3 Métodos static, campos static y la clase Math 203
6.4 Declaración de métodos con múltiples parámetros 205
6.5 Notas sobre cómo declarar y utilizar los métodos 208
6.6 La pila de llamadas a los métodos y los marcos de pila 209
6.7 Promoción y conversión de argumentos 210
6.8 Paquetes de la API de Java 211
6.9 Ejemplo práctico: generación de números aleatorios seguros 213
6.10 Ejemplo práctico: un juego de probabilidad; introducción a los tipos enum 218

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd ix 5/4/16 10:13 PM


x Contenido

6.11 Alcance de las declaraciones 222


6.12 Sobrecarga de métodos 225
6.13 (Opcional) Ejemplo práctico de GUI y gráficos: colores y figuras rellenas 227
6.14 Conclusión 230

7 Arreglos y objetos ArrayList 243


7.1 Introducción 244
7.2 Arreglos 245
7.3 Declaración y creación de arreglos 246
7.4 Ejemplos sobre el uso de los arreglos 247
7.4.1 Creación e inicialización de un arreglo 247
7.4.2 Uso de un inicializador de arreglos 248
7.4.3 Cálculo de los valores a almacenar en un arreglo 249
7.4.4 Suma de los elementos de un arreglo 251
7.4.5 Uso de gráficos de barra para mostrar en forma gráfica los datos de un arreglo 251
7.4.6 Uso de los elementos de un arreglo como contadores 253
7.4.7 Uso de arreglos para analizar los resultados de una encuesta 254
7.5 Manejo de excepciones: procesamiento de la respuesta incorrecta 256
7.5.1 La instrucción try 256
7.5.2 Ejecución del bloque catch 256
7.5.3 El método toString del parámetro de excepción 257
7.6 Ejemplo práctico: simulación para barajar y repartir cartas 257
7.7 Instrucción for mejorada 262

www.fullengineeringbook.net
7.8
7.9
7.10
Paso de arreglos a los métodos
Comparación entre paso por valor y paso por referencia
Ejemplo práctico: la clase LibroCalificaciones que usa un arreglo
263
265

para almacenar las calificaciones 266


7.11 Arreglos multidimensionales 272
7.12 Ejemplo práctico: la clase LibroCalificaciones que usa un arreglo bidimensional 275
7.13 Listas de argumentos de longitud variable 281
7.14 Uso de argumentos de línea de comandos 283
7.15 La clase Arrays 285
7.16 Introducción a las colecciones y la clase ArrayList 287
7.17 (Opcional) Ejemplo práctico de GUI y gráficos: cómo dibujar arcos 291
7.18 Conclusión 294

8 Clases y objetos: un análisis más detallado 315


8.1 Introducción 316
8.2 Ejemplo práctico de la clase Tiempo 316
8.3 Control del acceso a los miembros 321
8.4 Referencias a los miembros del objeto actual mediante la referencia this 322
8.5 Ejemplo práctico de la clase Tiempo: constructores sobrecargados 324
8.6 Constructores predeterminados y sin argumentos 330
8.7 Observaciones acerca de los métodos Establecerr y Obtener 330
8.8 Composición 332
8.9 Tipos enum 335
8.10 Recolección de basura 337
8.11 Miembros de clase static 338
8.12 Declaración de importación static 342
8.13 Variables de instancia final 343

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd x 5/4/16 10:13 PM


Contenido xi

8.14 Acceso a paquetes 344


8.15 Uso de BigDecimal para cálculos monetarios precisos 345
8.16 (Opcional) Ejemplo práctico de GUI y gráficos: uso de objetos con gráficos 348
8.17 Conclusión 352

9 Programación orientada a objetos: herencia 360


9.1 Introducción 361
9.2 Superclases y subclases 362
9.3 Miembros protected 364
9.4 Relación entre las superclases y las subclases 365
9.4.1 Creación y uso de una clase EmpleadoPorComision 365
9.4.2 Creación y uso de una clase EmpleadoBaseMasComision 371
9.4.3 Creación de una jerarquía de herencia
EmpleadoPorComision-EmpleadoBaseMasComision 376
9.4.4 La jerarquía de herencia EmpleadoPorComision-EmpleadoBaseMasComision
mediante el uso de variables de instancia protected 379
9.4.5 La jerarquía de herencia EmpleadoPorComision-EmpleadoBaseMasComision
mediante el uso de variables de instancia private 382
9.5 Los constructores en las subclases 387
9.6 La clase Object 387
9.7 (Opcional) Ejemplo práctico de GUI y gráficos: mostrar texto e imágenes usando
etiquetas 388
9.8 Conclusión 391
www.fullengineeringbook.net
10 Programación orientada a objetos:
polimorfismo e interfaces 395
10.1 Introducción 396
10.2 Ejemplos del polimorfismo 398
10.3 Demostración del comportamiento polimórfico 399
10.4 Clases y métodos abstractos 401
10.5 Ejemplo práctico: sistema de nómina utilizando polimorfismo 404
10.5.1 La superclase abstracta Empleado 405
10.5.2 La subclase concreta EmpleadoAsalariado 407
10.5.3 La subclase concreta EmpleadoPorHoras 409
10.5.4 La subclase concreta EmpleadoPorComision 411
10.5.5 La subclase concreta indirecta EmpleadoBaseMasComision 413
10.5.6 El procesamiento polimórfico, el operador instanceof
y la conversión descendente 414
10.6 Asignaciones permitidas entre variables de la superclase y la subclase 419
10.7 Métodos y clases final 419
10.8 Una explicación más detallada de los problemas con las llamadas a métodos
desde los constructores 420
10.9 Creación y uso de interfaces 421
10.9.1 Desarrollo de una jerarquía PorPagar 422
10.9.2 La interfaz PorPagar 423
10.9.3 La clase Factura 424
10.9.4 Modificación de la clase Empleado para implementar la interfaz PorPagar 426
10.9.5 Modificación de la clase EmpleadoAsalariado para usarla en la
jerarquía PorPagar 428

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xi 5/4/16 10:13 PM


xii Contenido

10.9.6Uso de la interfaz PorPagar para procesar objetos Factura y Empleado


mediante el polimorfismo 430
10.9.7 Algunas interfaces comunes de la API de Java 431
10.10 Mejoras a las interfaces de Java SE 8 432
10.10.1 Métodos default de una interfaz 432
10.10.2 Métodos static de una interfaz 433
10.10.3 Interfaces funcionales 433
10.11 (Opcional) Ejemplo práctico de GUI y gráficos: realización de dibujos mediante
el polimorfismo 433
10.12 Conclusión 436

11 Manejo de excepciones: un análisis más detallado 441


11.1 Introducción 442
11.2 Ejemplo: división entre cero sin manejo de excepciones 443
11.3 Ejemplo: manejo de excepciones tipo ArithmeticException e InputMismatchException 445
11.4 Cuándo utilizar el manejo de excepciones 451
11.5 Jerarquía de excepciones en Java 451
11.6 Bloque finally 454
11.7 Limpieza de la pila y obtención de información de un objeto excepción 459
11.8 Excepciones encadenadas 461
11.9 Declaración de nuevos tipos de excepciones 464
11.10 Precondiciones y poscondiciones 465

www.fullengineeringbook.net
11.11
11.12
11.13
Aserciones
Cláusula try con recursos: desasignación automática de recursos
Conclusión
465
467
467

A Tabla de precedencia de operadores A-3

B Conjunto de caracteres ASCII A-5

C Palabras clave y palabras reservadas A-6

D Tipos primitivos A-7

E Uso del depurador A-8


E.1 Introducción A-9
E.2 Los puntos de interrupción y los comandos run, stop, cont y print A-9
E.3 Los comandos print y set A-13
E.4 Cómo controlar la ejecución mediante los comandos step, step up y next A-15
E.5 El comando watch A-18
E.6 El comando clear A-20
E.7 Conclusión A-23

Índice analítico I-1

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xii 5/4/16 10:13 PM


Contenido xiii

LOS CAPÍTULOS 12 A 19 SE ENCUENTRAN DISPONIBLES, EN ESPAÑOL,


EN EL SITIO WEB DE ESTE LIBRO

12 Componentes de la GUI: parte 1 473


12.1 Introducción 474
12.2 La apariencia visual Nimbus de Java 475
12.3 Entrada/salida simple basada en GUI con JOptionPane 476
12.4 Generalidades de los componentes de Swing 479
12.5 Presentación de texto e imágenes en una ventana 481
12.6 Campos de texto y una introducción al manejo de eventos con clases anidadas 485
12.7 Tipos de eventos comunes de la GUI e interfaces de escucha 491
12.8 Cómo funciona el manejo de eventos 493
12.9 JButton 495
12.10 Botones que mantienen el estado 498
12.10.1 JCheckBox 499
12.10.2 JRadioButton 501
12.11 JComboBox: uso de una clase interna anónima para el manejo de eventos 504
12.12 JList 508
12.13 Listas de selección múltiple 511
12.14 Manejo de eventos de ratón 513
12.15 Clases adaptadoras 518
12.16 Subclase de JPanel para dibujar con el ratón 522

www.fullengineeringbook.net
12.17 Manejo de eventos de teclas
12.18 Introducción a los administradores de esquemas
12.18.1 FlowLayout
12.18.2 BorderLayout
525
528
530
532
12.18.3 GridLayout 536
12.19 Uso de paneles para administrar esquemas más complejos 538
12.20 JTextArea 539
12.21 Conclusión 542

13 Gráficos y Java 2D 555


13.1 Introducción 556
13.2 Contextos y objetos de gráficos 558
13.3 Control de colores 559
13.4 Manipulación de tipos de letra 566
13.5 Dibujo de líneas, rectángulos y óvalos 571
13.6 Dibujo de arcos 575
13.7 Dibujo de polígonos y polilíneas 578
13.8 La API Java 2D 581
13.9 Conclusión 588

14 Cadenas, caracteres y expresiones regulares 596


14.1 Introducción 597
14.2 Fundamentos de los caracteres y las cadenas 597
14.3 La clase String 598
14.3.1 Constructores de String 598

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xiii 5/4/16 10:13 PM


xiv
v Contenido

14.3.2 Métodos length, charAt y getChars de String 599


14.3.3 Comparación entre cadenas 600
14.3.4 Localización de caracteres y subcadenas en las cadenas 605
14.3.5 Extracción de subcadenas de las cadenas 607
14.3.6 Concatenación de cadenas 608
14.3.7 Métodos varios de String 608
14.3.8 Método valueOf de String 610
14.4 La clase StringBuilder 611
14.4.1 Constructores de StringBuilder 612
14.4.2 Métodos length, capacity, setLength y ensureCapacity
de StringBuilder 612
14.4.3 Métodos charAt, setCharAt, getChars y reverse de StringBuilder 614
14.4.4 Métodos append de StringBuilder 615
14.4.5 Métodos de inserción y eliminación de StringBuilder 617
14.5 La clase Character 618
14.6 División de objetos String en tokens 623
14.7 Expresiones regulares, la clase Pattern y la clase Matcher 624
14.8 Conclusión 633

15 Archivos, flujos y serialización de objetos 644


15.1 Introducción 645
15.2 Archivos y flujos 645
15.3 Uso de clases e interfaces NIO para obtener información de archivos y directorios 647

www.fullengineeringbook.net
15.4 Archivos de texto de acceso secuencial
15.4.1 Creación de un archivo de texto de acceso secuencial
15.4.2 Cómo leer datos de un archivo de texto de acceso secuencial
651
651
655
15.4.3 Caso de estudio: un programa de solicitud de crédito 657
15.4.4 Actualización de archivos de acceso secuencial 661
15.5 Serialización de objetos 662
15.5.1 Creación de un archivo de acceso secuencial mediante el uso
de la serialización de objetos 663
15.5.2 Lectura y deserialización de datos de un archivo de acceso secuencial. 668
15.6 Abrir archivos con JFileChooser 670
15.7 (Opcional) Clases adicionales de java.io 673
15.7.1 Interfaces y clases para entrada y salida basada en bytes 673
15.7.2 Interfaces y clases para entrada y salida basada en caracteres 675
15.8 Conclusión 676

16 Colecciones de genéricos 684


16.1 Introducción 685
16.2 Generalidades acerca de las colecciones 685
16.3 Clases de envoltura de tipos 687
16.4 Autoboxing y auto-unboxing 687
16.5 La interfaz Collection y la clase Collections 687
16.6 Listas 688
16.6.1 ArrayList e Iterator 689
16.6.2 LinkedList 691
16.7 Métodos de las colecciones 696
16.7.1 El método sort 697
16.7.2 El método shuffle 700

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xiv 5/4/16 10:13 PM


Contenido xv

16.7.3 Los métodos reverse, fill, copy, max y min 702


16.7.4 El método binarySearch 704
16.7.5 Los métodos addAll, frequency y disjoint 706
16.8 La clase Stack del paquete java.util 708
16.9 La clase PriorityQueue y la interfaz Queue 710
16.10 Conjuntos 711
16.11 Mapas 714
16.12 La clase Properties 718
16.13 Colecciones sincronizadas 721
16.14 Colecciones no modificables 721
16.15 Implementaciones abstractas 722
16.16 Conclusión 722

17 Lambdas y flujos de Java SE 8 729


17.1 Introducción 730
17.2 Generalidades acerca de las tecnologías de programación funcional 731
17.2.1 Interfaces funcionales 732
17.2.2 Expresiones lambda 733
17.2.3 Flujos 734
17.3 Operaciones IntStream 736
17.3.1 Creación de un IntStream y visualización de sus valores
con la operación terminal forEach 738

www.fullengineeringbook.net
17.3.2 Operaciones terminales count, min, max, sum y average
17.3.3 Operación terminal reduce
17.3.4 Operaciones intermedias: filtrado y ordenamiento de valores IntStream
739
739
741
17.3.5 Operación intermedia: asignación (mapping) 742
17.3.6 Creación de flujos de valores int con los métodos range
y rangeClosed de IntStream 743
17.4 Manipulaciones Stream<Integer> 743
17.4.1 Crear un Stream<Integer> 744
17.4.2 Ordenar un Stream y recolectar los resultados 745
17.4.3 Filtrar un Stream y ordenar los resultados para su uso posterior 745
17.4.4 Filtrar y ordenar un Stream y recolectar los resultados 745
17.4.5 Ordenar los resultados recolectados previamente 745
17.5 Manipulciones Stream<String> 746
17.5.1 Asignar objetos String a mayúsculas mediante una referencia a
un método 747
17.5.2 Filtrar objetos String y luego ordenarlos en forma ascendente sin
distinguir entre mayúsculas y minúsculas 748
17.5.3 Filtrar objetos String y luego ordenarlos en forma descendente sin
distinguir entre mayúsculas y minúsculas 748
17.6 Manipulaciones Stream<Empleado> 748
17.6.1 Crear y mostrar una List<Empleado> 750
17.6.2 Filtrar objetos Empleado con salarios en un rango especificado 751
17.6.3 Ordenar objetos Empleado con base en varios campos 752
17.6.4 Asignar objetos Empleado a objetos String con apellidos únicos 754
17.6.5 Agrupar objetos Empleado por departamento 755
17.6.6 Contar el número de objetos Empleado en cada departamento 756
17.6.7 Sumar y promediar los salarios de los objetos Empleado 756
17.7 Crear un objeto Stream<String> a partir de un archivo 758

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xv 5/4/16 10:13 PM


xvi Contenido

17.8 Generar flujos de valores aleatorios 761


17.9 Manejadores de eventos con lambdas 763
17.10 Observaciones adicionales sobre las interfaces de Java SE 8 763
17.11 Recusos de Java SE 8 y de programación funcional 764
17.12 Conclusión 764

18 Recursividad 776
18.1 Introducción 777
18.2 Conceptos de recursividad 778
18.3 Ejemplo de uso de recursividad: factoriales 779
18.4 Reimplementar la clase CalculadoraFactorial mediante la clase BigInteger 781
18.5 Ejemplo de uso de recursividad: serie de Fibonacci 783
18.6 La recursividad y la pila de llamadas a métodos 786
18.7 Comparación entre recursividad e iteración 787
18.8 Las torres de Hanoi 789
18.9 Fractales 791
18.9.1 Fractal de curva de Koch 791
18.9.2 (Opcional) Ejemplo práctico: fractal de pluma Lo 792
18.10 “Vuelta atrás” recursiva (backtracking) 801
18.11 Conclusión 802

19 Búsqueda, ordenamiento y Big O 810


www.fullengineeringbook.net
19.1
19.2
Introducción
Búsqueda lineal
811
812
19.3 Notación Big O 814
19.3.1 Algoritmos O(1) 814
19.3.2 Algoritmos O(n) 815
19.3.3 Algoritmos O(n2) 815
19.3.4 El Big O de la búsqueda lineal 816
19.4 Búsqueda binaria 816
19.4.1 Implementación de la búsqueda binaria 817
19.4.2 Eficiencia de la búsqueda binaria 820
19.5 Algoritmos de ordenamiento 820
19.6 Ordenamiento por selección 821
19.6.1 Implementación del ordenamiento por selección 821
19.6.2 Eficiencia del ordenamiento por selección 824
19.7 Ordenamiento por inserción 824
19.7.1 Implementación del ordenamiento por inserción 825
19.7.2 Eficiencia del ordenamiento por inserción 827
19.8 Ordenamiento por combinación 827
19.8.1 Implementación del ordenamiento por combinación 828
19.8.2 Eficiencia del ordenamiento por combinación 832
19.9 Resumen de Big O para los algoritmos de búsqueda y ordenamiento de este capítulo 833
19.10 Conclusión 834

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xvi 5/4/16 10:13 PM


Contenido xvii

Los capítulos 20 a 34 y los apéndices F a N se encuentran disponibles, en idioma inglés,


en el sitio web de este libro

20 Generic Classes and Methods 839


20.1 Introduction 840
20.2 Motivation for Generic Methods 840
20.3 Generic Methods: Implementation and Compile-Time Translation 842
20.4 Additional Compile-Time Translation Issues: Methods That Use a
Type Parameter as the Return Type 845
20.5 Overloading Generic Methods 848
20.6 Generic Classes 849
20.7 Raw Types 856
20.8 Wildcards in Methods That Accept Type Parameters 860
20.9 Wrap-Up 864

21 Custom Generic Data Structures 869


21.1 Introduction 870
21.2 Self-Referential Classes 871
21.3 Dynamic Memory Allocation 871
21.4 Linked Lists 872
21.4.1 Singly Linked Lists 872
www.fullengineeringbook.net
21.4.2 Implementing a Generic List Class
21.4.3 Generic Classes ListNode and List
21.4.4 Class ListTest
873
878
878
21.4.5 List Method insertAtFront 878
21.4.6 List Method insertAtBack 879
21.4.7 List Method removeFromFront 880
21.4.8 List Method removeFromBack 881
21.4.9 List Method print 882
21.4.10 Creating Your Own Packages 882
21.5 Stacks 886
21.6 Queues 890
21.7 Trees 893
21.8 Wrap-Up 900

22 GUI Components: Part 2 911


22.1 Introduction 912
22.2 JSlider 912
22.3 Understanding Windows in Java 916
22.4 Using Menus with Frames 917
22.5 JPopupMenu 925
22.6 Pluggable Look-and-Feel 928

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xvii 5/4/16 10:13 PM


xviii Contenido

22.7 JDesktopPane and JInternalFrame 933


22.8 JTabbedPane 936
22.9 BoxLayout Layout Manager 938
22.10 GridBagLayout Layout Manager 942
22.11 Wrap-Up 952

23 Concurrency 957
23.1 Introduction 958
23.2 Thread States and Life Cycle 960
23.2.1 New and Runnable States 961
23.2.2 Waiting State 961
23.2.3 Timed Waiting State 961
23.2.4 Blocked State 961
23.2.5 Terminated State 961
23.2.6 Operating-System View of the Runnable State 962
23.2.7 Thread Priorities and Thread Scheduling 962
23.2.8 Indefinite Postponement and Deadlock 963
23.3 Creating and Executing Threads with the Executor Framework 963
23.4 Thread Synchronization 967
23.4.1 Immutable Data 968
23.4.2 Monitors 968
23.4.3 Unsynchronized Mutable Data Sharing 969
23.4.4 Synchronized Mutable Data Sharing—Making Operations Atomic 974
www.fullengineeringbook.net
23.5
23.6
23.7
Producer/Consumer Relationship without Synchronization
Producer/Consumer Relationship: ArrayBlockingQueue
(Advanced) Producer/Consumer Relationship with synchronized,
976
984

wait, notify and notifyAll 987


23.8 (Advanced) Producer/Consumer Relationship: Bounded Buffers 994
23.9 (Advanced) Producer/Consumer Relationship: The Lock and Condition Interfaces 1002
23.10 Concurrent Collections 1009
23.11 Multithreading with GUI: SwingWorker 1011
23.11.1 Performing Computations in a Worker Thread: Fibonacci Numbers 1012
23.11.2 Processing Intermediate Results: Sieve of Eratosthenes 1018
23.12 sort and parallelSort Timings with the Java SE 8 Date/Time API 1025
23.13 Java SE 8: Sequential vs. Parallel Streams 1027
23.14 (Advanced) Interfaces Callable and Future 1030
23.15 (Advanced) Fork/Join Framework 1034
23.16 Wrap-Up 1034

24 Accessing Databases with JDBC 1045


24.1 Introduction 1046
24.2 Relational Databases 1047
24.3 A books Database 1048
24.4 SQL 1052
24.4.1 Basic SELECT Query 1052
24.4.2 WHERE Clause 1053
24.4.3 ORDER BY Clause 1055
24.4.4 Merging Data from Multiple Tables: INNER JOIN 1056
24.4.5 INSERT Statement 1058

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xviii 5/4/16 10:13 PM


Contenido xix

24.4.6 UPDATE Statement 1059


24.4.7 DELETE Statement 1060
24.5 Setting up a Java DB Database 1060
24.5.1 Creating the Chapter’s Databases on Windows 1061
24.5.2 Creating the Chapter’s Databases on Mac OS X 1062
24.5.3 Creating the Chapter’s Databases on Linux 1063
24.6 Manipulating Databases with JDBC 1063
24.6.1 Connecting to and Querying a Database 1063
24.6.2 Querying the books Database 1067
24.7 RowSet Interface 1080
24.8 PreparedStatements 1082
24.9 Stored Procedures 1098
24.10 Transaction Processing 1098
24.11 Wrap-Up 1099

25 JavaFX GUI: Part 1 1107


25.1 Introduction 1108
25.2 JavaFX Scene Builder and the NetBeans IDE 1109
25.3 JavaFX App Window Structure 1110
25.4 Welcome App—Displaying Text and an Image 1111
25.4.1 Creating the App’s Project 1111
25.4.2 NetBeans Projects Window—Viewing the Project Contents 1113
25.4.3 Adding an Image to the Project 1114
www.fullengineeringbook.net
25.4.4 Opening JavaFX Scene Builder from NetBeans
25.4.5 Changing to a VBox Layout Container
25.4.6 Configuring the VBox Layout Container
1114
1115
1116
25.4.7 Adding and Configuring a Label 1116
25.4.8 Adding and Configuring an ImageView 1116
25.4.9 Running the Welcome App 1117
25.5 Tip Calculatorr App—Introduction to Event Handling 1118
25.5.1 Test-Driving the Tip Calculatorr App 1119
25.5.2 Technologies Overview 1119
25.5.3 Building the App’s GUI 1122
25.5.4 TipCalculator Class 1126
25.5.5 TipCalculatorController Class 1128
25.6 Features Covered in the Online JavaFX Chapters 1133
25.7 Wrap-Up 1134

26 JavaFX GUI: Part 2


27 JavaFX Graphics and Multimedia
28 Networking
29 Java Persistence API (JPA)
30 JavaServer™ Faces Web Apps: Part 1
31 JavaServer™ Faces Web Apps: Part 2

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xix 5/4/16 10:13 PM


xx Contenido

32 REST-Based Web Services


33 (Optional) ATM Case Study, Part 1:
Object-Oriented Design with the UML
34 (Optional) ATM Case Study, Part 2:
Implementing an Object-Oriented Design
F Using the Java API Documentation
G Creating Documentation with javadoc
H Unicode®
I Formatted Output
J Number Systems
K Bit Manipulation
L Labeled break and continue Statements
www.fullengineeringbook.net
M UML 2: Additional Diagram Types
N Design Patterns

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xx 5/4/16 10:13 PM


Prólogo
He estado enamorado de Java incluso antes de que se publicara su versión 1.0 en 1995. Desde entonces
he sido desarrollador de Java, autor, ponente, maestro y embajador de tecnología Java (Oracle Java
Technology Ambassador). En esta aventura he tenido el privilegio de llamar colega a Paul Deitel, además
de aprovechar y recomendar con frecuencia su libro Cómo programar en Java. En sus muchas ediciones,
este libro ha demostrado ser un excelente texto para cursos universitarios y profesionales que otros y yo
hemos desarrollado para enseñar el lenguaje de programación Java.
Una de las cualidades que hacen de este libro un excelente recurso es su cobertura detallada y
perspicaz de los conceptos de Java, incluyendo los que se introdujeron recientemente en Java SE 8. Otra
cualidad útil es su tratamiento de los conceptos y las prácticas esenciales para un desarrollo de software
efectivo.
Como admirador incondicional de este libro, me gustaría señalar algunas de las características que
más me han impresionado de esta décima edición:
• Un nuevo y ambicioso capítulo sobre las expresiones lambda y los flujos en Java. Este capítulo

www.fullengineeringbook.net
comienza con una introducción básica sobre la programación funcional, donde presenta las
expresiones lambda de Java y cómo usar los flujos para realizar tareas de programación funcio-
nales en las colecciones.
• Aunque desde la primera edición de este libro se ha lidiado con la concurrencia, es cada vez
más importante debido a las arquitecturas multinúcleo. En el capítulo de concurrencia hay
ejemplos de sincronización (donde se usan las nuevas clases de la API de fecha/hora que se
introdujo en Java SE 8) que muestran las mejoras de rendimiento de la tecnología multinúcleo
en comparación con el uso de un solo núcleo.
• JavaFX es la tecnología de GUI/gráficos/multimedia de Java en progreso, por lo que es agrada-
ble ver un tratamiento de tres capítulos de JavaFX en el estilo pedagógico de código activo de
Deitel. Uno de estos capítulos es parte del libro impreso y los otros dos están en el sitio Web.
Les pido que se unan conmigo para felicitar a Paul y Harvey Deitel por su más reciente edición de un
maravilloso recurso, tanto para los estudiantes de ciencias computacionales como para los desarrolladores
de software.

James L. Weaver
Java Technology Ambassador
Oracle Corporation

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxi 5/11/16 6:59 PM


www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxii 5/4/16 10:13 PM


Prefacio
“El principal mérito del lenguaje es la claridad…”
—Galen
Bienvenido al lenguaje de programación Java y al libro Cómo programar en Java, décima edición. Este libro
presenta las tecnologías computacionales de vanguardia para estudiantes, instructores y desarrolladores
de software. Es apropiado para cursos académicos introductorios y para cursos profesionales basados en
las recomendaciones curriculares de ACM/IEEE, y sirve como preparación para el examen de Colocación
avanzada (AP) de Ciencias computacionales.
Nos enfocamos en las mejores prácticas de ingeniería de software. La base del libro es nuestro
reconocido “método de código activo”, en el cual los conceptos se presentan en el contexto de programas
funcionales completos que se ejecutan en las versiones recientes de Windows®, OS X® y Linux®, en
vez de hacerlo a través de fragmentos separados de código. Cada ejemplo de código completo viene
acompañado de ejemplos de ejecuciones reales.

www.fullengineeringbook.net
Cómo contactar a los autores
Si surge alguna duda o pregunta a medida que lea este libro, envíe un correo electrónico a
[email protected]

y le responderemos a la brevedad. Para obtener actualizaciones sobre este libro, visite


http://www.deitel.com/books/jhtp10

también puede suscribirse al boletín de correo electrónico Deitell® Buzz Online en


http://www.deitel.com/newsletter/subscribe.html

y puede unirse a las comunidades de redes sociales de Deitel en


• Facebook® (http://www.deitel.com/deitelfan)
• Twitter® (@deitel)
• Google+™ (http://google.com/+DeitelFan)
• YouTube® (http://youtube.com/DeitelTV)
• LinkedIn® (http://linkedin.com/company/deitel-&-associates)

Código fuente
Encontrará todo el código fuente utilizado en esta edición en español en:
www.pearsonenespañol.com/deitel

Notas de video (VideoNotes)


Encontrará los videos indicados en el libro (en inglés) en:
http://www.deitel.com/books/jhtp10

lo invitamos a que visite el sitio Web del libro en:


http://www.pearsonenespañol.com/deitel

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxiii 5/11/16 6:59 PM


xxiv
v Prefacio

Organización modular
Cómo programar en Java, 10 edición es apropiado para cursos de programación en diversos niveles, en
especial los de ciencias computacionales CS 1 y CS 2, además de aquellos introductorios en disciplinas
relacionadas. La estructura modular del libro ayuda a los instructores a organizar sus planes de estudios:

Introducción
• Capítulo 1, Introducción a las computadoras, Internet y Java
• Capítulo 2, Introducción a las aplicaciones en Java: entrada/salida y operadores
• Capítulo 3, Introducción a las clases, los objetos, los métodos y las cadenas

Fundamentos adicionales de programación


• Capítulo 4, Instrucciones de control: parte 1: operadores de asignación, ++ y –
• Capítulo 5, Instrucciones de control: parte 2: operadores lógicos
• Capítulo 6, Métodos: un análisis más detallado
• Capítulo 7, Arreglos y objetos ArrayList
• Capítulo 14 (en línea), Cadenas, caracteres y expresiones regulares
• Capítulo 15 (en línea), Archivos, flujos y serialización de objetos

Programación orientada a objetos y diseño orientado a objetos


• Capítulo 8, Clases y objetos: un análisis más detallado

www.fullengineeringbook.net



Capítulo 9, Programación orientada a objetos: herencia
Capítulo 10, Programación orientada a objetos: polimorfismo e interfaces
Capítulo 11, Manejo de excepciones: un análisis más detallado
• Capítulo 33 (en línea), Ejemplo práctico opcional del cajero automático (ATM),
parte 1: Diseño orientado a objetos con el UML (en inglés)
• Capítulo 34 (en línea), Ejemplo práctico opcional del cajero automático (ATM),
parte 2: Implementación de un diseño orientado a objetos (en inglés)

Interfaces gráficas de usuario de Swing y gráficos de Java 2D


• Capítulo 12 (en línea), Componentes de la GUI: parte 1
• Capítulo 13 (en línea), Gráficos y Java 2D
• Capítulo 22 (en línea), Componentes de GUI: parte 2 (en inglés)

Estructuras de datos, colecciones, lambdas y flujos


• Capítulo 16 (en línea), Colecciones de genéricos
• Capítulo 17 (en línea), Lambdas y flujos de Java SE 8
• Capítulo 18 (en línea), Recursividad
• Capítulo 19 (en línea), Búsqueda, ordenamiento y Big O
• Capítulo 20 (en línea), Clases y métodos genéricos (en inglés)
• Capítulo 21 (en línea), Estructuras de datos genéricas personalizadas (en inglés)

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxiv 5/4/16 10:13 PM


Prefacio xxv

Concurrencia: redes
• Capítulo 23 (en línea), Concurrencia (en inglés)
• Capítulo 28 (en línea), Redes (en inglés)

Interfaces gráficas de usuario, gráficos y multimedia de JavaFX


• Capítulo 25 (en línea), GUI JavaFX: parte 1
• Capítulo 26 (en línea), GUI JavaFX: parte 2
• Capítulo 27 (en línea), Gráficos y multimedia de JavaFX

Desarrollo Web y de escritorio orientado a bases de datos


• Capítulo 24 (en línea), Acceso a bases de datos con JDBC
• Capítulo 29 (en línea), API de persistencia de Java (JPA)
• Capítulo 30 (en línea), Aplicaciones Web de JavaServer™ Faces: parte 1
• Capítulo 31 (en línea), Aplicaciones Web de JavaServer™ Faces: parte 2
• Capítulo 32 (en línea), Servicios Web basados en REST

Características nuevas y mejoradas del libro


He aquí las actualizaciones que realizamos a Cómo programar en Java, décima edición:

Java Standard Edition: Java SE 7 y el nuevo Java SE 8


• Fácil de usar con Java SE 7 o Java SE 8. Para satisfacer las necesidades de nuestros usuarios, di-

www.fullengineeringbook.net
señamos el libro para cursos tanto universitarios como profesionales que tengan como base Java
SE 7, Java SE 8 o una mezcla de ambos. Las características de Java SE 8 se cubren en secciones
opcionales que pueden incluirse u omitirse con facilidad. Las nuevas herramientas de Java SE 8
pueden mejorar notablemente el proceso de programación. La figura 1 muestra algunas de las
nuevas características que cubrimos de Java SE 8.

Características de Java SE 8
Expresiones lambda
Mejoras en la inferencia de tipos
Anotación @FunctionalInterface
Ordenamiento de arreglos en paralelo
Operaciones de datos a granel para colecciones de Java: filter, map y reduce
Mejoras en la biblioteca para el soporte de lambdas (por ejemplo, java.util.stream, java.util.function)
API de fecha y hora (java.time)
Mejoras en la API de concurrencia de Java
Métodos static y default en interfaces
Interfaces funcionales: interfaces que definen sólo un método abstract y pueden incluir métodos static y default
Mejoras en JavaFX

Fig. 1 冷 Algunas características nuevas de Java SE 8.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxv 5/4/16 10:13 PM


xxvi Prefacio

• Lambdas, flujos e interfaces de Java SE 8 con métodos defaultt y staticc. Las características
nuevas más importantes en Java SE 8 son las lambdas y las tecnologías complementarias, que
cubrimos con detalle en el capítulo 17 opcional y en las secciones opcionales identificadas como
“Java SE 8” en capítulos posteriores. En el capítulo 17 (en línea) verá que la programación fun-
cional con lambdas y flujos puede ayudarle a escribir programas de manera más rápida, concisa y
simple, con menos errores y que sean más fáciles de paralelizar (para obtener mejoras de rendi-
miento en sistemas multinúcleo) que los programas escritos con las técnicas anteriores. Descubri-
rá que la programación funcional complementa a la programación orientada a objetos. Después
de que lea el capítulo 17, podrá reimplementar de manera inteligente muchos de los ejemplos de
Java SE 7 del libro (figura 2).

Temas anteriores a Java SE 8 Explicaciones y ejemplos correspondientes de Java SE 8


Capítulo 7, Arreglos y objetos ArrayList Las secciones 17.3 a 17.4 presentan herramientas básicas de
lambdas y flujos que procesan arreglos unidimensionales.
Capítulo 10, Programación orientada a La sección 10.10 presenta las nuevas características de
objetos: polimorfismo e interfaces interfaces de Java SE 8 (métodos default, métodos static
y el concepto de interfaces funcionales) que dan soporte a la
programación funcional con lambdas y flujos.
Capítulos 12 y 22, Componentes de GUI: La sección 17.9 muestra cómo usar una expresión lambda
parte 1 y parte 2, respectivamente para implementar una interfaz funcional de componente de
escucha de eventos de Swing.

www.fullengineeringbook.net
Capítulo 14, Cadenas, caracteres y expresiones La sección 17.5 muestra cómo usar lambdas y flujos para
regulares procesar colecciones de objetos String.
Capítulo 15, Archivos, flujos y serialización de La sección 17.7 muestra cómo usar lambdas y flujos para
objetos procesar líneas de texto de un archivo.
Capítulo 23, Concurrencia Muestra que los programas funcionales son más fáciles de
paralelizar para que puedan aprovechar las arquitecturas
multinúcleo y mejorar el rendimiento. Demuestra el
procesamiento de flujos en paralelo. Muestra que el método
parallelSort de Arrays mejora el rendimiento en arquitecturas
multinúcleo al ordenar arreglos de gran tamaño.
Capítulo 25, GUI JavaFX: parte 1 La sección 25.5.5 muestra cómo usar una expresión lambda
para implementar una interfaz funcional para un componente
de escucha de eventos de JavaFX.
Fig. 2 冷 Explicaciones y ejemplos de lambdas y flujos de Java SE 8.

• La instrucción tryy con recursos y la interfaz AutoClosablee de Java SE 7. Los objetos Auto-
Closable reducen la probabilidad de que haya fugas de recursos si los usa con la instrucción try
con recursos, la cual cierra de manera automática los objetos AutoClosable. En esta edición
usamos try con recursos y objetos AutoClosable según sea apropiado a partir del capítulo 15,
Archivos, flujos y serialización de objetos.
• Seguridad de Java. Auditamos nuestro libro conforme al estándar CERT de codificación segura
de Oracle para Java según lo apropiado para un libro de texto introductorio. Consulte la sección
Programación segura en Java de este prefacio para obtener más información sobre CERT.
• API NIO de Java. Actualizamos los ejemplos de procesamiento de archivos en el capítulo 15 para
usar las características de la API NIO (nueva IO) de Java.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxvi 5/4/16 10:13 PM


Prefacio xxvii

• Documentación de Java. A lo largo del libro le proporcionamos vínculos hacia la documenta-


ción de Java, donde aprenderá más sobre los diversos temas que presentamos. Para la documen-
tación de Java SE 7, los vínculos empiezan con
http://docs.oracle.com/javase/7/

y para la documentación de Java SE 8, los vínculos comienzan con


http://download.java.net/jdk8/

Estos vínculos pueden cambiar cuando Oracle libere Java SE 8; es posiblee que los vínculos comien-
cen con
http://docs.oracle.com/javase/8/

Si hay vínculos que cambien después de publicar el libro, las actualizaciones estarán disponibles
en

http://www.deitel.com/books/jhtp10

GUI Swing y JavaFX, gráficos y multimedia


• GUI Swing y gráficos de Java 2D. Hablaremos sobre la GUI Swing de Java en las secciones op-
cionales de GUI y gráficos de los capítulos 3 al 10, y en los capítulos 12 y 22. Ahora Swing se
encuentra en modo de mantenimiento: Oracle detuvo el desarrollo y proporcionará sólo correc-

www.fullengineeringbook.net
ción de errores de aquí en adelante, pero seguirá siendo parte de Java y aún se utiliza ampliamente.
El capítulo 13 habla de los gráficos de Java 2D.
• GUI JavaFX, gráficos y multimedia. La API de GUI, gráficos y multimedia de Java que conti-
nuará progresando es JavaFX. En el capítulo 25 usamos JavaFX 2.2 (que se liberó en 2012) con
Java SE 7. Nuestros capítulos 26 y 27 en línea, que se encuentran en el sitio Web complementario
del libro (vea la portada interior del libro), presentan características adicionales de la GUI JavaFX
e introducen los gráficos y multimedia de JavaFX en el contexto de Java FX 8 y Java SE 8. En los
capítulos 25 a 27 usamos Scene Builder, una herramienta de arrastrar y soltar para crear interfaces
GUI de JavaFX en forma rápida y conveniente. Es una herramienta independiente que puede usar
por separado o con cualquiera de los IDE de Java.
• Presentación escalable de GUI y gráficos. Los profesores que dictan cursos introductorios tienen
una gran variedad de opciones en cuanto a la cantidad por cubrir de GUI, gráficos y multimedia:
desde nada en lo absoluto, pasando por las secciones de introducción opcionales en los primeros
capítulos, hasta un análisis detallado de la GUI Swing y los gráficos de Java 2D en los capítulos
12, 13 y 22, o incluso un análisis detallado de la GUI Java FX, gráficos y multimedia en el capí-
tulo 25 y los capítulos en línea 26 y 27.

Concurrencia
• Concurrencia para un óptimo rendimiento con multinúcleo. En esta edición tenemos el pri-
vilegio de tener como revisor a Brian Goetz, coautor de Java Concurrency in Practice (Addison-
Wesley). Actualizamos el capítulo 23 (en línea) con la tecnología y el idioma de Java SE 8. Agre-
gamos un ejemplo de comparación entre parallelSort y sort que usa la API de hora/fecha de
Java SE 8 para sincronizar cada operación y demostrar que parallelSort tiene un mejor rendi-
miento en un sistema multinúcleo. Incluimos un ejemplo de procesamiento de comparación
entre flujos paralelos y secuenciales de Java SE 8, usando de nuevo la API de hora/fecha para
mostrar las mejoras de rendimiento. Por último, agregamos un ejemplo de CompletableFuture
de Java SE 8 que demuestra la ejecución secuencial y paralela de cálculos extensos.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxvii 5/4/16 10:13 PM


xxviii Prefacio

• Clase SwingWorkerr. Usamos la clase SwingWorker para crear interfaces de usuario multihilo. En
el capítulo 26 (en línea), mostramos cómo es que JavaFX maneja la concurrencia.
• La concurrencia es desafiante. La programación de aplicaciones concurrentes es difícil y pro-
pensa a errores. Hay una gran variedad de características de concurrencia. Señalamos las que de-
berían usarse más y mencionamos las que deben dejarse a los expertos.

Cómo calcular bien las cantidades monetarias


• Cantidades monetarias. En los primeros capítulos usamos por conveniencia el tipo double para
representar cantidades monetarias. Debido a la posibilidad de realizar cálculos monetarios inco-
rrectos con el tipo double, hay que usar la clase BigDecimal (que es un poco más compleja) para
representar las cantidades monetarias. Demostramos el uso de BigDecimal en los capítulos 8 y 25.

Tecnología de objetos
• Programación y diseño orientados a objetos. Usamos la metodología de tratar los objetos en los
primeros capítulos, donde presentamos la terminología y los conceptos básicos de la tecnología de
objetos en el capítulo 1. Los estudiantes desarrollan sus primeras clases y objetos personalizados
en el capítulo 3. Al presentar los objetos y las clases en los primeros capítulos, hacemos que los
estudiantes “piensen en objetos” de inmediato y que dominen estos conceptos con más profundi-
dad [para los cursos que requieren una metodología en la que se presenten los objetos en capítulos
posteriores, le recomendamos el libro Java How to Program, Late Objects Version, 10ª edición].
• Ejemplos prácticos reales sobre el uso de objetos en los primeros capítulos. La presentación de
clases y objetos en los primeros capítulos incluye ejemplos prácticos con las clases Cuenta, Estu-
diante, AutoPolicy, Tiempo, Empleado, LibroCalificaciones y un ejemplo práctico sobre

www.fullengineeringbook.net
barajar y repartir cartas con la clase Carta, introduciendo de manera gradual los conceptos de OO
más complejos.
• Herencia, interfaces, polimorfismo y composición. Usamos una serie de ejemplos prácticos
reales para ilustrar cada uno de estos conceptos de OO y explicamos situaciones en las que sea
conveniente usar cada uno de ellos para crear aplicaciones industriales.
• Manejo de excepciones. Integramos el manejo básico de excepciones en los primeros capítulos
del libro y luego presentamos un análisis más detallado en el capítulo 11. El manejo de excep-
ciones es importante para crear aplicaciones de “misión crítica” e “imprescindibles para los
negocios”. Los programadores necesitan lidiar con las siguientes dudas: “¿Qué ocurre cuando
el componente que invoco para realizar un trabajo experimenta dificultades? ¿Cómo indicará
ese componente que tuvo un problema?”. Para usar un componente de Java no sólo hay que
saber cómo se comporta ese componente cuando “las cosas salen bien”, sino también las excep-
ciones que ese componente “lanza” cuando “las cosas salen mal”.
• Las clases Arrayss y ArrayList. El capítulo 7 cubre la clase Arrays (que contiene métodos para
realizar manipulaciones comunes de arreglos) y la clase ArrayList (que implementa una estruc-
tura de datos tipo arreglo, cuyo tamaño se puede ajustar en forma dinámica). Esto va de acuerdo
con nuestra filosofía de obtener mucha práctica al utilizar las clases existentes, al tiempo que el
estudiante aprende a definir sus propias clases. La extensa selección de ejercicios del capítulo in-
cluye un proyecto importante sobre cómo crear su propia computadora mediante la técnica de
simulación por software. El capítulo 21 (en línea) incluye un proyecto de seguimiento sobre la
creación de su propio compilador que puede compilar programas en lenguaje de alto nivel a có-
digo de lenguaje máquina, y que se ejecutará en su simulador de computadora.
• Ejemplo práctico opcional: desarrollo de un diseño orientado a objetos y una implementación
en Java de un cajero automático (ATM). Los capítulos 33 y 34 (en línea) incluyen un ejemplo
práctico opcionall sobre el diseño orientado a objetos mediante el uso del UML (Lenguaje Unifi-
cado de Modelado™): el lenguaje gráfico estándar en la industria para modelar sistemas orientados
a objetos. Diseñamos e implementamos el software para un cajero automático (ATM) simple.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxviii 5/4/16 10:13 PM


Prefacio xxix

Analizamos un documento de requerimientos típico, el cual especifica el sistema que se va a cons-


truir. Determinamos las clases necesarias para implementar ese sistema, los atributos que deben
tener esas clases, los comportamientos que necesitan exhibir y especificamos cómo deben interac-
tuar las clases entre sí para cumplir con los requerimientos del sistema. A partir del diseño, pro-
ducimos una implementación completa en Java. A menudo los estudiantes informan que pasan
por un «momento de revelación»: el ejemplo práctico les ayuda a «atar cabos» y comprender en
verdad la orientación a objetos.

Estructuras de datos y colecciones genéricas


• Presentación de estructuras de datos. Empezamos con la clase genérica ArrayList en el capítulo 7.
Nuestros análisis posteriores sobre las estructuras de datos (capítulos 16 al 21) ofrecen un trata-
miento más detallado de las colecciones de genéricos, ya que enseñan a utilizar las colecciones
integradas de la API de Java. Hablamos sobre la recursividad, que es importante para implemen-
tar las clases de estructuras de datos tipo árbol. Hablamos sobre los algoritmos populares de bús-
queda y ordenamiento para manipular el contenido de las colecciones y proporcionamos una
introducción amigable a Big O: un medio para describir qué tan duro tendría que trabajar un
algoritmo para resolver un problema. Luego mostramos cómo implementar los métodos y las
clases genéricas, además de las estructuras de datos genéricas personalizadass (esto es un tema para
las materias de especialidad en ciencias computacionales; la mayoría de los programadores deben
usar las colecciones de genéricos prefabricadas). Las lambdas y los flujos (que se presentan en el
capítulo 17) son especialmente útiles para trabajar con colecciones de genéricos.

Base de datos
• JDBC. El capítulo 24 (en línea) trata sobre JDBC y usa el sistema de administración de bases de
www.fullengineeringbook.net
datos Java DB. El capítulo presenta el Lenguaje estructurado de consulta (SQL) y un ejemplo
práctico de OO sobre cómo desarrollar una libreta de direcciones controlada por una base de
datos en donde se demuestran las instrucciones preparadas.
• API de persistencia de Java. El nuevo capítulo 29 (en línea) cubre la API de persistencia de Java
(JPA): un estándar para el mapeo objeto-relacional (ORM) que usa JDBC “tras bambalinas”. Las
herramientas de ORM pueden analizar el esquema de una base de datos y generar un conjunto de
clases que nos permitan interactuar con esta base de datos sin tener que usar JDBC y SQL
de manera directa. Esto agiliza el desarrollo de las aplicaciones de bases de datos, reduce los errores
y produce código más portable.

Desarrollo de aplicaciones Web


• Java Server Faces (JSF). Los capítulos 30 y 31 (en línea) se actualizaron para introducir la tecno-
logía JavaServer Faces (JSF) más reciente, que simplifica en gran medida la creación de aplicacio-
nes Web con JSF. El capítulo 30 incluye ejemplos sobre la creación de interfaces GUI para aplica-
ciones Web, la validación de formularios y el rastreo de sesiones. El capítulo 31 habla sobre las
aplicaciones JSF controladas por datos y habilitadas para Ajax. El capítulo incluye una libreta de
direcciones Web multinivel controlada por una base de datos, la cual permite a los usuarios agre-
gar y buscar contactos.
• Servicios Web. El capítulo 32 (en línea) se concentra ahora en la creación y el consumo de servi-
cios Web basados en REST. Ahora la gran mayoría de los servicios Web de la actualidad usan
REST.

Programación segura en Java


Es difícil crear sistemas industriales que resistan a los ataques de virus, gusanos y otras formas de “malware”.
En la actualidad, debido al uso de Internet, esos ataques pueden ser instantáneos y de un alcance global.
Al integrar la seguridad en el software desde el principio del ciclo del desarrollo es posible reducir, en gran

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxix 5/4/16 10:13 PM


xxx Prefacio

medida, las vulnerabilidades. En nuestros análisis y ejemplos de código incorporamos varias prácticas de
codificación seguras en Java (en la medida apropiada para un libro de texto introductorio).
El Centro de coordinación del CERT® (www.cert.org) se creó para analizar y responder de
manera oportuna a los ataques. El CERT (Equipo de respuesta ante emergencias informáticas) es una
organización financiada por el gobierno de los Estados Unidos dentro de Carnegie Mellon University
Software Engineering Institute™. CERT publica y promueve estándares de codificación segura para
diversos lenguajes de programación populares con el fin de ayudar a los desarrolladores de software
a implementar sistemas industriales que eviten las prácticas de programación que dejan los sistemas
abiertos a los ataques.
Nos gustaría agradecer a Robert C. Seacord, gerente de codificación segura en CERT y profesor
adjunto en Carnegie Mellon University School of Computer Science. El Sr. Seacord fue revisor técnico de
nuestro libro Cómo programar en C, séptima edición, en donde escudriñó nuestros programas en C desde el
punto de vista de la seguridad y nos recomendó adherirnos al estándar de codificación segura en C del CERT.
T
Esta experiencia también influyó en nuestras prácticas de codificación en Cómo programar en C++, novena
edición, y en Cómo programar en Java, décima edición.

Ejemplo práctico opcional de GUI y gráficos


A los estudiantes les gusta crear aplicaciones de GUI y gráficos. Para los cursos en los que se presentan los
temas de GUI y gráficos en las primeras clases, integramos una introducción opcional de 10 segmentos
para crear gráficos e interfaces gráficas de usuario (GUI) basadas en Swing. El objetivo de este ejemplo
práctico es crear una aplicación polimórfica simple de dibujo en la que el usuario pueda elegir una forma
para dibujar, seleccionar las características de esa forma (como su color) y usar el ratón para dibujarla. El
ejemplo práctico se desarrolla en forma gradual para llegar a ese objetivo, en donde el lector implementa

www.fullengineeringbook.net
el dibujo polimórfico en el capítulo 10, agrega una GUI orientada a eventos en el capítulo 12 y mejora
las capacidades de dibujo en el capítulo 13 con Java 2D.
• Sección 3.6: Uso de cuadros de diálogo
• Sección 4.15: Creación de dibujos simples
• Sección 5.11: Dibujo de rectángulos y óvalos
• Sección 6.13: Colores y figuras rellenas
• Sección 7.17: Cómo dibujar arcos
• Sección 8.16: Uso de objetos con gráficos
• Sección 9.7: Mostrar texto e imágenes usando etiquetas
• Sección 10.11: Realización de dibujos mediante el polimorfismo
• Ejercicio 12.17: Expansión de la interfaz
• Ejercicio 13.31: Incorporación de Java2D

Métodos de enseñanza
Cómo programar en Java, 10ª edición contiene cientos de ejemplos funcionales completos. Hacemos
hincapié en la claridad de los programas y nos concentramos en crear software bien diseñado.
Notas de video (VideoNotes) s . El sitio Web complementario incluye muchas notas en inglés de video en
las que el coautor Paul Deitel explica con detalle la mayoría de los programas de los capítulos básicos del
libro. A los estudiantes les gusta ver las notas de video para reforzar los conceptos básicos y para obtener
información adicional.
Resaltado de código. Colocamos rectángulos de color gris alrededor de los segmentos de código clave.
Uso de fuentes para dar énfasis. Para facilitar su identificación, ponemos en negritas los términos clave
y la referencia de la página del índice para cada definición. Enfatizamos los componentes en pantalla en la

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxx 5/4/16 10:13 PM


Prefacio xxxi

fuente Helvetica en negritas (por ejemplo, el menú Archivo) y enfatizamos el texto del programa en la fuen-
te Lucida (por ejemplo, int x = 5;).
Acceso Web. Todos los ejemplos de código fuente se pueden descargar de:
http://www.deitel.com/books/jhtp10
http://www.pearsonenespañol.com/deitel

Objetivos. Las citas de apertura van seguidas de una lista de objetivos del capítulo.
Ilustraciones y figuras. Incluimos una gran cantidad de tablas, dibujos lineales, diagramas de UML,
programas y salidas de programa.

Tips de programación. Incluimos tips de programación para ayudarle a enfocarse en los aspectos
importantes del desarrollo de programas. Estos tips y prácticas representan lo mejor que hemos podido
recabar a lo largo de siete décadas combinadas de experiencia en la programación y la enseñanza.

Buena práctica de programación


Lass buenas prácticas de programación llaman la atención hacia técnicas que le ayudarán a producir
programas más claros, comprensibles y fáciles de mantener.

Error común de programación


Al poner atención en estos Errores comunes de programación se reduce la probabilidad de que usted pueda
cometer los mismos errores.

www.fullengineeringbook.net
Tip para prevenir errores
Estos cuadros contienen sugerencias para exponer los errores y eliminarlos de sus programas; muchos de ellos
describen aspectos de Java que evitan que los errores entren siquiera a los programas.

Tip de rendimiento
Estos cuadros resaltan las oportunidades para hacer que sus programas se ejecuten más rápido, o para
minimizar la cantidad de memoria que ocupan.

Tip de portabilidad
Los tips de portabilidad le ayudan a escribir código que pueda ejecutarse en una variedad de plataformas.

Observación de ingeniería de software


Las observaciones de ingeniería de software resaltan los aspectos de arquitectura y diseño, lo cual afecta la
construcción de los sistemas de software, especialmente los de gran escala.

Observación de apariencia visual


Las observaciones de apariencia visual resaltan las convenciones de la interfaz gráfica de usuario. Estas
observaciones le ayudan a diseñar interfaces gráficas de usuario atractivas y amigables para el usuario, en
conformidad con las normas de la industria.

Viñetas de resumen. Presentamos un resumen detallado de cada sección del capítulo en un estilo de lista
con viñetas. Para facilitar la referencia, incluimos el número de página de cada definición de los términos
clave del libro.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxi 5/4/16 10:13 PM


xxxii Prefacio

Ejercicios de autoevaluación y respuestas. Se incluyen diversos ejercicios de autoevaluación y sus


respuestas, para que los estudiantes practiquen por su cuenta. Todos los ejercicios en el ejemplo práctico
opcional sobre el ATM están totalmente resueltos.

Ejercicios. Los ejercicios de los capítulos incluyen:


• recordatorio simple de la terminología y los conceptos importantes
• ¿cuál es el error en este código?
• ¿qué hace este código?
• escritura de instrucciones individuales y pequeñas porciones de métodos y clases
• escritura de métodos, clases y programas completos
• proyectos importantes
• en muchos capítulos, hay ejercicios “Marcando la diferencia” que animan al lector a usar las compu-
tadoras e Internet para investigar y resolver problemas sociales importantes.

Los ejercicios que son únicamente para la versión SE 8 de Java se identifican como tales. Consulte nuestro
Centro de recursos de proyectos de programación, donde encontrará muchos ejercicios adicionales y
posibilidades de proyectos (www.deitel.com/ProgrammingProjects/).
Índice. Incluimos un índice extenso. Las entradas que corresponden a las definiciones de los términos
clave están resaltadas en negritas junto con su número de página. El índice del libro incluye todos los tér-
minos del libro impreso y de los capítulos en español disponibles en el sitio web; es decir, incluye los términos
de los capítulos 1 a 19.

www.fullengineeringbook.net
Software utilizado en Cómo programar en Java 10ª edición
Podrá descargar a través de Internet, y sin costo, todo el software necesario para este libro . En la sección
Antes de empezar que se encuentra después de este Prefacio, encontrará los vínculos para cada descarga.
Para escribir la mayoría de los ejemplos de este libro utilizamos el kit de desarrollo gratuito Java
Standard Edition Development Kit (JDK) 7. Para los módulos opcionales de Java SE 8, utilizamos
la versión JDK 8 de prueba de OpenJDK. En el capítulo 25 (en línea) y en varios capítulos también
utilizamos el IDE Netbeans. Encontrará recursos y descargas de software adicionales en nuestros Centros
de recursos de Java, ubicados en:
www.deitel.com/ResourceCenters.html

Suplementos para el profesor (en inglés)


Los siguientes suplementos están disponibles sólo para profesores registrados en el Centro de recursos para el
profesor de Pearson (www.pearsonenespañol.com/deitel):
• Diapositivas de PowerPoint ® que contienen todo el código y las figuras del texto, además de
elementos en viñetas que sintetizan los puntos clave.
• Banco de exámenes con preguntas de opción múltiple (aproximadamente dos por cada sección
del libro).
• Manual de soluciones con soluciones para la gran mayoría de los ejercicios que aparecen al final
de capítulo. Antes de asignar un ejercicio de tarea, los profesores deberán consultar el IRC
para asegurarse de que incluya la solución.

Por favor, no escriba a los autores para solicitar acceso al Centro de recursos para el profesor de
Pearson. El acceso está limitado estrictamente a profesores que utilicen este libro como texto en sus
cursos y estén registrados en nuestro sistema. Los profesores sólo pueden obtener acceso a través de
los representantes de Pearson. No se proveen soluciones para los ejercicios de «proyectos».

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxii 5/4/16 10:13 PM


Prefacio xxxiii

Si no es un profesor registrado, póngase en contacto con su representante de Pearson o visite


www.pearsonhighered.com/educator/replocator/.

Contenido de este libro


Este libro contiene los primeros 11 capítulos mencionados (impresos); adicionalmente, dentro de la
página Web www.pearsonenespañol.com/deitel, encontrará, en español, los capítulos 12 a 19; y en inglés
los capítulos 20 a 34, así como los apéndices F a N.

Reconocimientos
Queremos agradecer a Abbey Deitel y a Barbara Deitel por las largas horas que dedicaron a este proyecto.
Somos afortunados al haber trabajado en este proyecto con un dedicado equipo de editores profesionales
de Pearson. Apreciamos la orientación, inteligencia y energía de Tracy Johnson, editora en jefe de ciencias
computacionales. Tracy y su equipo se encargan de todos nuestros libros de texto académicos. Carole
Snyder reclutó a los revisores técnicos del libro y se hizo cargo del proceso de revisión. Bob Engelhardt
se hizo cargo de la publicación del libro. Nosotros seleccionamos la imagen de portada y Laura Gardner
diseñó la portada.

Revisores
Queremos agradecer los esfuerzos de nuestros revisores más recientes: un grupo distinguido de profesores,
miembros del equipo de Oracle Java, Oracle Java Champions y otros profesionales de la industria. Ellos
examinaron minuciosamente el texto y los programas, proporcionando innumerables sugerencias para
mejorar la presentación.
Apreciamos la asesoría tanto de Jim Weaver y de Johan Vos (coautores de Pro JavaFX 2), 2 así como

www.fullengineeringbook.net
de Simon Ritter en los tres capítulos sobre JavaFX.
Revisores de la décima edición: Lance Andersen (Oracle Corporation), Dr. Danny Coward (Oracle
Corporation), Brian Goetz (Oracle Corporation), Evan Golub (University of Maryland), Dr. Huiwei
Guan (profesor del departamento de ciencias computacionales y de la información en North Shore
Community College), Manfred Riem (Java Champion), Simon Ritter (Oracle Corporation), Robert C.
Seacord (CERT, Software Engineering Institute, Carnegie Mellon University), Khallai Taylor (profesora
asistente, Triton College y profesora adjunta, Lonestar College: Kinwood), Jorge Vargas (Yumbling y
Java Champion), Johan Vos (LodgON y Oracle Java Champion) y James L. Weaver (Oracle Corporation
y autor de Pro JavaFX 22).
Revisores de ediciones anteriores: Soundararajan Angusamy (Sun Microsystems), Joseph Bowbeer
(Consultor), William E. Duncan (Louisiana State University), Diana Franklin (University of California,
Santa Barbara), Edward F. Gehringer (North Carolina State University), Ric Heishman (George Mason
University), Dr. Heinz Kabutz (JavaSpecialists.eu), Patty Kraft (San Diego State University), Lawrence
Premkumar (Sun Microsystems), Tim Margush (University of Akron), Sue McFarland Metzger (Villanova
University), Shyamal Mitra (The University of Texas en Austin), Peter Pilgrim (Consultor), Manjeet
Rege, Ph.D. (Rochester Institute of Technology), Susan Rodger (Duke University), Amr Sabry (Indiana
University), José Antonio González Seco (Parlamento de Andalucía), Sang Shin (Sun Microsystems),
S. Sivakumar (Astra Infotech Private Limited), Raghavan “Rags” Srinivas (Intuit), Monica Sweat
(Georgia Tech), Vinod Varma (Astra Infotech Private Limited) y Alexander Zuev (Sun Microsystems).

Un agradecimiento especial a Brian Goetz


Tuvimos el privilegio de que Brian Goetz (arquitecto del lenguaje Java de Oracle, líder de especificaciones
para el proyecto Lambda de Java SE 8 y coautor de Java Concurrency in Practice) e realizara una revisión
detallada de todo el libro. Examinó minuciosamente cada capítulo y proporcionó muchas ideas y
comentarios constructivos bastante útiles. Cualquier otra falla en el libro es culpa nuestra.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxiii 5/4/16 10:13 PM


xxxiv
v Prefacio

Bueno, ¡ahí lo tiene! A medida que lea el libro, apreciaremos con sinceridad sus comentarios, críticas,
correcciones y sugerencias para mejorar el texto. Dirija toda su correspondencia a:
[email protected]

Le responderemos oportunamente. Esperamos que disfrute trabajando con este libro tanto como
nosotros al escribirlo.

Paul y Harvey Deitel

Acerca de los autores


Paul J. Deitel, CEO y Director Técnico de Deitel &
Associates, Inc., es egresado del MIT, donde estudió
Tecnologías de la Información. Posee las designaciones
Java Certified Programmer y Java Certified Developer,
además de ser Oracle Java Champion. A través de Deitel
& Associates, Inc., ha impartido cientos de cursos de
programación para clientes de todo el mundo, incluyen-
do Cisco, IBM, Siemens, Sun Microsystems, Dell, Fide-
lity, NASA en el Centro Espacial Kennedy, el National Severe Storm Laboratory, White Sands Missile
Range, Rogue Wave Software, Boeing, SunGard Higher Education, Nortel Networks, Puma, iRobot, In-
vensys y muchos más. Él y su coautor, el Dr. Harvey M. Deitel, son autores de los libros de texto, libros
profesionales y videos sobre lenguajes de programación más vendidos en el mundo.
Dr. Harvey M. Deitel, Presidente y Consejero de Estrategia de Deitel & Associates, Inc., tiene más de 50
www.fullengineeringbook.net
años de experiencia en el campo de la computación. El Dr. Deitel obtuvo una licenciatura y una maestría
en ingeniería eléctrica del MIT y un doctorado en Matemáticas de la Universidad de Boston. Tiene muchos
años de experiencia como profesor universitario, lo cual incluye un puesto vitalicio y haber sido presidente
del departamento de Ciencias de la computación en Boston College antes de fundar, Deitel & Associates,
Inc. en 1991 junto con su hijo Paul. Los libros de los Deitel se han ganado el reconocimiento internacional
y han sido traducidos al japonés, alemán, ruso, español, coreano, francés, polaco, italiano, chino simplifi-
cado, chino tradicional, coreano, portugués, griego, urdú y turco. El Dr. Deitel ha impartido cientos de
seminarios profesionales para grandes empresas, instituciones académicas, organizaciones gubernamenta-
les y diversos sectores del ejército.

Acerca de Deitel & Associates, Inc.


Deitel & Associates, Inc., fundada por Paul Deitel y Harvey Deitel, es una empresa reconocida a nivel
mundial dedicada a la capacitación corporativa y la creación de contenidos que se especializa en lenguajes
de programación computacionales, tecnología de objetos, desarrollo de aplicaciones móviles y tecnología
de software de Internet y Web. Sus clientes de capacitación incluyen muchas de las empresas más grandes
del mundo, agencias gubernamentales, sectores del ejército e instituciones académicas. La empresa
proporciona cursos presenciales en todo el mundo, sobre la mayoría de los lenguajes y plataformas

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxiv 5/4/16 10:13 PM


Prefacio xxxv

de programación, como Java™, desarrollo de aplicaciones para Android™, desarrollo de aplicaciones de


Objective-C e iOS, C++, C, Visual C#®, Visual Basic®, Visual C++®, Python®, tecnología de objetos,
programación en Internet y Web, y una lista cada vez mayor de cursos adicionales de programación y
desarrollo de software.
A lo largo de su sociedad editorial de más de 39 años con Pearson/Prentice Hall, Deitel & Associates,
Inc. ha publicado libros de texto de vanguardia sobre programación y libros profesionales tanto impresos
como en un amplio rango de formatos de libros electrónicos, además de cursos de video LiveLessons.
Puede contactarse con Deitel & Associates, Inc. y con los autores por medio de correo electrónico:
[email protected]

Para conocer más acerca de la oferta de la Serie de Capacitación Corporativa Dive Into® de Deitel, visite:
http://www.deitel.com/training/

Para solicitar una cotización de capacitación presencial en su organización, envíe un correo a deitel@
deitel.com.
Las personas que deseen comprar libros de Deitel y cursos de capacitación LiveLessonss pueden hacerlo
a través de www.deitel.com. Las empresas, gobiernos, instituciones militares y académicas que deseen
realizar pedidos al mayoreo deben hacerlo directamente con Pearson. Para obtener más información,
visite
http://www.informit.com/store/sales.aspx

www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxv 5/4/16 10:13 PM


www.fullengineeringbook.net

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxvi 5/4/16 10:13 PM


Antes de
empezar
Esta sección contiene información que debe revisar antes de usar este libro. Cualquier actualización a la
información que se presenta aquí, será publicada en:
http://www.deitel.com/books/jhtp10

Convenciones de tipos de letra y nomenclatura


Utilizamos tipos de letra distintos para diferenciar entre los componentes de la pantalla (como los nombres
de menús y los elementos de los mismos) y el código o los comandos en Java. Nuestra convención
es hacer hincapié en los componentes en pantalla en una fuente Helvetica sans-serif en negritas (por
ejemplo, el menú Archivo) y enfatizar el código y los comandos de Java en una fuente Lucida sans-serif
(por ejemplo, System.out.println()). Hemos omitido intencionalmente el uso de acentos y caracteres
especiales en los segmentos de código donde estos caracteres podrían presentar alguna dificultad para la
correcta ejecución del programa.

www.fullengineeringbook.net
Software a utilizar en el libro
Podrá descargar sin costo todo el software necesario para este libro a través de la Web. Con excepción
de los ejemplos específicos para Java SE 8, todos los ejemplos se probaron con los kits de desarrollo Java
Standard Edition Development Kits (JDK) de las ediciones Java SE 7 y Java SE 8.

Kit de desarrollo de software Java Standard Edition 7 (JDK 7)


Las plataformas de JDK 7 para Windows, OS X y Linux están disponibles en:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Kit de desarrollo de software Java Standard Edition 8 (JDK 8)


Al momento de publicar este libro, la versión más reciente de JDK 8 para las plataformas Windows, OS X
y Linux estaba disponible en:
http://jdk8.java.net/download.html

Una vez que se libere la versión final de JDK 8, estará disponible en:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Instrucciones de instalación del JDK


Después de descargar el instalador del JDK, asegúrese de seguir con cuidado las instrucciones de
instalación para su plataforma, las cuales están disponibles en:
http://docs.oracle.com/javase/7/docs/webnotes/install/index.html

Aunque estas instrucciones son para el JDK 7, también se aplican al JDK 8; sólo tendrá que actualizar el
número de versión del JDK en las instrucciones específicas de cualquier otra versión.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxvii 5/11/16 6:59 PM


xxxviii Antes de empezar

Cómo establecer la variable de entorno PATH


La variable de entorno PATH en su computadora determina los directorios en los que la computadora
debe buscar aplicaciones, como las que le permiten compilar y ejecutar sus aplicaciones de Java (llamadas
javac y java, respectivamente). Para lograr establecer correctamente la variable de entorno PATH H, siga con
cuidado las instrucciones de instalación de Java en su plataforma. Los pasos para establecer las variables de
entorno difieren según el sistema operativo, y algunas veces dependen también de la versión del mismo
(por ejemplo, Windows 7 o Windows 8). Las instrucciones para diversas plataformas se encuentran en:
http://www.java.com/en/download/help/path.xml

Si no establece la variable PATH de manera correcta en Windows, y en algunas instalaciones de Linux,


recibirá un mensaje como éste cuando utilice las herramientas del JDK:
‘java’ no se reconoce como un comando interno o externo, un programa ejecutable
ni un archivo por lotes.

En este caso, regrese a las instrucciones de instalación para establecer la variable PATH y vuelva a
comprobar sus pasos. Si descargó una versión más reciente del JDK, tal vez tenga que cambiar el nombre
del directorio de instalación del JDK en la variable PATH.

Directorio de instalación del JDK y el subdirectorio bin


El directorio de instalación del JDK varía según la plataforma que se utilice. Los directorios que se listan
a continuación son para el JDK 7 actualización 51 de Oracle:

• JDK de 32 bits en Windows:

www.fullengineeringbook.net

C:\Program Files (x86)\Java\jdk1.7.0_51

JDK de 64 bits en Windows:


C:\Program Files\Java\jdk1.7.0_51

• Mac OS X:
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

• Linux Ubuntu:
/usr/lib/jvm/java-7-oracle

Dependiendo de la plataforma que utilice y del idioma que tenga configurado, el nombre de la carpeta
de instalación del JDK podría diferir si usa una actualización distinta del JDK 7 o si usa el JDK 8. En el
caso de Linux, la ubicación de instalación depende del instalador que utilice y posiblemente de su versión
de Linux. Nosotros usamos Linux Ubuntu. La variable de entorno PATH debe apuntar al subdirectorio
bin
n del directorio de instalación JDK.
Al establecer PATH, asegúrese de usar el nombre del directorio de instalación del JDK correcto para la
versión específica del JDK que instaló; a medida que haya versiones disponibles de JDK más recientes, el
nombre del directorio de instalación del JDK cambia para incluir un número de versión de actualización.
Por ejemplo, al momento de escribir este libro la versión del JDK 7 más reciente era la actualización 51.
Para esta versión, el nombre del directorio de instalación del JDK termina con “_51”.

Cómo establecer la variable de entorno CLASSPATH


Si intenta ejecutar un programa de Java y recibe un mensaje como éste:
Exception in thread “main” java.lang.NoClassDefFoundError: SuClase

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxviii 5/4/16 10:13 PM


Antes de empezarr xxxix

entonces su sistema tiene una variable de entorno CLASSPATH que debe modificarse. Para corregir el
error anterior, siga los pasos para establecer la variable de entorno PATH, localice la variable CLASSPATH
y modifique su valor para que incluya el directorio local, que por lo general se representa como un
punto (.). En Windows agregue
.;

al principio del valor de CLASSPATH (sin espacios antes o después de esos caracteres). En otras plataformas,
sustituya el punto y coma con los caracteres separadores de ruta apropiados; por lo general, el signo de
dos puntos (:).

Cómo establecer la variable de entorno JAVA_HOME


El software de bases de datos Java DB que usará en el capítulo 24 y en varios de los capítulos en línea,
requiere que establezca la variable de entorno JAVA_HOME en su directorio de instalación del JDK. Puede usar
los mismos pasos que utilizó al establecer la variable PATH para establecer las demás variables de entorno,
como JAVA_HOME.

Entornos integrados de desarrollo (IDE) de Java


Hay muchos entornos integrados de desarrollo de Java que usted puede usar para programar en este
lenguaje. Por esta razón, para la mayoría de los ejemplos del libro usaremos sólo las herramientas de línea
de comandos del JDK. Proporcionamos videos Dive-Into® que muestran cómo descargar, instalar y usar
tres IDE populares: NetBeans, Eclipse e IntelliJ IDEA. Usaremos NetBeans en el capítulo 25 y en varios
de los capítulos en línea del libro.

www.fullengineeringbook.net
Descargas de NetBeans
Puede descargar el paquete JDK/NetBeans en:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

La versión de NetBeans incluida con el JDK es para el desarrollo con Java SE. Los capítulos en línea
de JavaServer Faces (JSF) y de los servicios Web, usan la versión Java Enterprise Edition (Java EE) de
NetBeans, que puede descargar en:
https://netbeans.org/downloads/

Esta versión soporta el desarrollo con Java SE y Java EE.

Descargas de Eclipse
Puede descargar el IDE Eclipse en:
https://www.eclipse.org/downloads/

Para el desarrollo con Java SE, seleccione el IDE Eclipse para desarrolladores de Java. Para el desarrollo
con Java Enterprise Edition (Java EE) (como JSF y los servicios Web), seleccione el IDE Eclipse para
desarrolladores de Java EE; esta versión soporta el desarrollo con Java SE y Java EE.

Descargas de IntelliJ IDEA Community Edition


Puede descargar el entorno IntelliJ IDEA Community Edition gratuito en:
http://www.jetbrains.com/idea/

La versión gratuita soporta solamente el desarrollo con Java SE.

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xxxix 5/4/16 10:13 PM


xl Antes de empezar

Cómo obtener los ejemplos de código


Los ejemplos de este libro están disponibles para descargarlos sin costo en
http://www.deitel.com/books/jhtp10/

bajo el encabezado Download Code Examples and Other Premium Content (Descargar ejemplos de códi-
go y contenido especial adicional). Los ejemplos también están disponibles en
http://www.pearsonhighered.com/deitel

Cuando descargue el archivo ZIP en su computadora, anote la ubicación en donde eligió guardarlo.
Extraiga el contenido del archivo examples.zip; utilice una herramienta como 7-Sip (www.7-zip-org),
WinZip (www.winzip.com) o las herramientas integradas de su sistema operativo. Las instrucciones en el
libro asumen que los ejemplos se encuentran en:
• C:\ejemplos en Windows

• la subcarpeta ejemplos de la carpeta de inicio de su cuenta de usuario en Linux


• la subcarpeta ejemplos de la carpeta Documentos en Mac OS X

Apariencia visual Nimbus de Java


Java incluye una apariencia visual multiplataforma conocida como Nimbus. En los programas con
interfaces gráficas de usuario Swing (como en los capítulos 12 y 22), hemos configurado nuestros equipos
de prueba para usar Nimbus como la apariencia visual predeterminada.
Para establecer Nimbus como la opción predeterminada para todas las aplicaciones de Java, debe
crear un archivo de texto llamado swing.properties en la carpeta lib de las carpetas de instalación del

www.fullengineeringbook.net
JDK y del JRE. Coloque la siguiente línea de código en el archivo:
swing defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel

Para obtener más información sobre cómo localizar estas carpetas, visite http://docs.oracle.com/
javase/7/docs/webnotes/install/index.html [nota: además del JRE individual, hay un JRE anidado
en su carpeta de instalación del JDK. Si utiliza un IDE que depende del JDK (como NetBeans), tal vez
también tenga que colocar el archivo swing.properties en la carpeta lib de la carpeta jre anidada].
Ahora está listo para empezar sus estudios de Java con el libro Cómo programar en Java, 10ª edición.
¡Esperamos que disfrute el libro!

A01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_PRELIMINARES_i-xl_3802-1.indd xl 5/4/16 10:13 PM


Introducción a las computadoras,
Internet y Java
1
El hombre sigue siendo
la computadora más
extraordinaria de todas.
—John F. Kennedy

Un buen diseño es un buen


negocio.
—Thomas J. Watson, fundador de IBM

Objetivos
En este capítulo aprenderá sobre:
■ Los excitantes y recientes
desarrollos en el campo de
las computadoras.

www.fullengineeringbook.net ■ Los conceptos básicos de


hardware, software y redes.
■ La jerarquía de datos.
■ Los distintos tipos de lenguajes
de programación.
■ La importancia de Java
y los otros lenguajes de
programación líderes.
■ Los fundamentos de la
programación orientada
a objetos.
■ La importancia de Internet
y Web.
■ Un entorno de desarrollo típico
de programas en Java.
■ Cómo probar una aplicación
en Java.
■ Algunas de las recientes
tecnologías de software clave.
■ Cómo mantenerse actualizado
con las tecnologías de la
información.

M01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_C1_001-033_3802-1.indd 1 5/11/16 7:01 PM


2 Capítulo 1 Introducción a las computadoras, Internet y Java

1.1 Introducción 1.6 Sistemas operativos

1.2 Hardware y software 1.6.1 Windows: un sistema operativo


propietario
1.2.1 Ley de Moore 1.6.2 Linux: un sistema operativo de código
1.2.2 Organización de la computadora fuente abierto
1.6.3 Android
1.3 Jerarquía de datos
1.7 Lenguajes de programación
1.4 Lenguajes máquina, lenguajes
ensambladores y lenguajes de alto nivel 1.8 Java
1.5 Introducción a la tecnología de los objetos 1.9 Un típico entorno de desarrollo en Java
1.5.1 El automóvil como un objeto 1.10 Prueba de una aplicación en Java
1.5.2 Métodos y clases
1.5.3 Instanciación 1.11 Internet y World Wide Web
1.5.4 Reutilización 1.11.1 Internet: una red de redes
1.5.5 Mensajes y llamadas a métodos 1.11.2 World Wide Web: cómo facilitar el uso
1.5.6 Atributos y variables de instancia de Internet
1.5.7 Encapsulamiento y ocultamiento 1.11.3 Servicios Web y mashups
de información 1.11.4 Ajax
1.5.8 Herencia 1.11.5 Internet de las cosas
1.5.9 Interfaces
1.12 Tecnologías de software
1.5.10 Análisis y diseño orientado a objetos
(A/DOO) 1.13 Cómo estar al día con las tecnologías
1.5.11 El UML (Lenguaje unificado de modelado) de información
www.fullengineeringbook.net
Ejercicios de autoevaluación | Respuestas a los ejercicios de autoevaluación | Ejercicios | Marcando la diferencia

1.1 Introducción
Bienvenido a Java, uno de los lenguajes de programación de computadoras más utilizados en el mundo.
Usted ya está familiarizado con las poderosas tareas que realizan las computadoras. Mediante este libro de
texto, podrá escribir instrucciones que ordenen a las computadoras que realicen esos tipos de tareas. El
software (es decir, las instrucciones que usted escribe) controla el hardware (es decir, las computadoras).
Usted aprenderá sobre la programación orientada a objetos: la principal metodología de programación
en la actualidad. En este texto creará y trabajará con muchos objetos de software.
Java es el lenguaje preferido para satisfacer las necesidades de programación empresariales de muchas
organizaciones. También se ha convertido en el lenguaje de elección para implementar aplicaciones basadas
en Internet y software para dispositivos que se comunican a través de una red.
Forrester Research pronostica que habrá más de dos mil millones de computadoras personales en uso
para 2015.1 De acuerdo con Oracle, el 97% de los equipos de escritorio empresariales, el 89% de las PC de
escritorio, tres mil millones de dispositivos (figura 1.1) y el 100% de todos los reproductores Blu-Ray Disc™
ejecutan Java, y hay más de 9 millones de desarrolladores de este lenguaje.2
De acuerdo con un estudio realizado por Gartner, los dispositivos móviles seguirán superando a las PC
como los dispositivos primarios de los usuarios: se estima que se entregarán alrededor de 2 mil millones de
teléfonos inteligentes y 388 millones de tabletas en 2015; 8.7 veces el número de equipos PC.3 Para 2018,

1 http://www.worldometers.info/computers.
2 http://www.oracle.com/technetwork/articles/java/javaone12review-1863742.html.
3 http://www.gartner.com/newsroom/id/2645115.

M01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_C1_001-033_3802-1.indd 2 5/4/16 11:26 AM


1.1 Introducción 3

Dispositivos

Sistemas de aeroplanos Cajeros automáticos (ATM) Sistemas de infoentretenimiento


de automóviles
Reproductores Blu-Ray Disc™ Decodificadores de TV por cable Copiadoras
Tarjetas de crédito Escáneres para TC Computadoras de escritorio
Lectores de libros electrónicos Consolas de juegos Sistemas de navegación GPS
Electrodomésticos Sistemas de seguridad para el hogar Interruptores de luz
Terminales de lotería Dispositivos médicos Teléfonos móviles
MRI Estaciones de pago de estacionamiento Impresoras
Pases de transporte Robots Enrutadores
Tarjetas inteligentes Medidores inteligentes Plumas inteligentes
Teléfonos inteligentes Tabletas Televisiones
Decodificadores para televisores Termostatos Sistemas de diagnóstico vehicular

Fig. 1.1 冷 Algunos dispositivos que utilizan Java.

se espera que el mercado de las aplicaciones móviles (apps) llegue a $92 mil millones.4 Esto genera oportu-
nidades profesionales importantes para las personas que programan aplicaciones móviles, muchas de las
www.fullengineeringbook.net
cuales se programan en Java (vea la sección 1.6.3).

Java Standard Edition


Java ha evolucionado con tanta rapidez que esta décima edición de Cómo programar en Javaa —basada
en Java Standard Edition 7 (Java SE 7) y Java Standard Edition 8 (Java SE 8)— se publicó tan sólo
17 años después de la primera edición. Java Standard Edition contiene las herramientas necesarias para
desarrollar aplicaciones de escritorio y de servidor. El libro puede usarse ya seaa con Java SE 7 o Java SE 8.
Todas las características de Java SE 8 se analizan en secciones modulares que son fáciles de incluir u omi-
tir a lo largo del libro.
Antes de Java SE 8, Java soportaba tres paradigmas de programación: programación por procedimientos,
programación orientada a objetoss y programación genérica. Java SE 8 agrega la programación funcional.l En el
capítulo 17 le mostraremos cómo usar la programación funcional para escribir programas en forma más
rápida y concisa, con menos errores y que sean fáciles de paralelizarr (es decir, que puedan realizar varios
cálculos al mismo tiempo) para aprovechar las arquitecturas de hardware multinúcleo actuales que mejoran
el rendimiento de una aplicación.

Java Enterprise Edition


Java se utiliza en un espectro tan amplio de aplicaciones que tiene otras dos ediciones. Java Enterprise
Edition (Java EE) está orientada hacia el desarrollo de aplicaciones de red distribuidas, de gran escala, y
aplicaciones basadas en Web. En el pasado, la mayoría de las aplicaciones de computadora se ejecutaban en
computadoras “independientes” (que no estaban conectadas en red). En la actualidad se pueden escribir
aplicaciones que se comuniquen con computadoras en todo el mundo por medio de Internet y Web. Más
adelante hablaremos sobre cómo crear dichas aplicaciones basadas en Web con Java.

4 https://www.abiresearch.com/press/tablets-will-generate-35-of-this-years-25-billion-.

M01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_C1_001-033_3802-1.indd 3 5/4/16 11:26 AM


4 Capítulo 1 Introducción a las computadoras, Internet y Java

Java Micro Edition


Java Micro Edition (Java ME) (un subconjunto de Java SE) está orientada hacia el desarrollo de aplica-
ciones para pequeños dispositivos incrustados con una capacidad limitada de memoria, como los relojes
inteligentes, los reproductores MP3, los decodificadores para televisión, los medidores inteligentes (para
monitorear el uso de la energía eléctrica) y más.

1.2 Hardware y software


Las computadoras pueden realizar cálculos y tomar decisiones lógicas con una rapidez increíblemente
mayor que los humanos. Muchas de las computadoras personales actuales pueden realizar miles de millones
de cálculos en un segundo; más de lo que un humano podría realizar en toda su vida. ¡Las supercomputado-
rass ya pueden realizar miles de milloness de instrucciones por segundo! ¡La supercomputadora Tianhe-2 de
la National University of Defense Technology de China puede realizar más de 33 mil billones de cálculos
por segundo (33.86 petaflops)!s 5 Para ilustrar este ejemplo, ¡la supercomputadora Tianhe-2 puede ejecutar en
un segundo el equivalente a cerca de 3 millones de cálculos por cada habitante del planeta!! Y estos “límites
máximos” están aumentando con rapidez.
Las computadoras procesan datos bajo el control de secuencias de instrucciones conocidas como pro-
gramas de computadora. Estos programas guían a la computadora a través de acciones ordenadas especi-
ficadas por gente conocida como programadores de computadoras. En este libro aprenderá una metodo-
logía de programación clave que está mejorando la productividad del programador, con lo cual se reducen
los costos de desarrollo del software: la programación orientada a objetos.
Una computadora consiste en varios dispositivos conocidos como hardware (teclado, pantalla, ratón,
discos duros, memoria, unidades de DVD y unidades de procesamiento). Los costos de las computadoras
han disminuido en forma espectacular, debido a los rápidos desarrollos en las tecnologías de hardware y

www.fullengineeringbook.net
software. Las computadoras que ocupaban grandes espacios y que costaban millones de dólares hace algu-
nas décadas, ahora pueden grabarse en superficies de chips de silicio más pequeños que una uña, y con un
costo de quizá unos cuantos dólares cada uno. Aunque suene irónico, el silicio es uno de los materiales más
abundantes en el planeta (es un ingrediente de la arena común). La tecnología de los chips de silicio se ha
vuelto tan económica que las computadoras se han convertido en un producto básico.

1.2.1 Ley de Moore


Es probable que cada año espere pagar al menos un poco más por la mayoría de los productos y servicios
que utiliza. En los campos de las computadoras y las comunicaciones se ha dado lo opuesto, en especial con
relación a los costos del hardware que da soporte a estas tecnologías. Los costos del hardware han disminui-
do con rapidez durante varias décadas.
Cada uno o dos años, las capacidades de las computadoras se duplican aproximadamente sin que el
precio se incremente. Esta notable observación se conoce en el ámbito común como la Ley de Moore, y
debe su nombre a la persona que identificó esta tendencia en 1960: Gordon Moore, cofundador de Intel
(uno de los principales fabricantes de procesadores para las computadoras y los sistemas incrustados (em-
bebidos) de la actualidad). La Ley de Moore y las observaciones relacionadas son especialmente ciertas para
la cantidad de memoria que tienen destinada las computadoras para programas, para la cantidad de alma-
cenamiento secundario (como el almacenamiento en disco) que tienen para guardar los programas y datos
durante periodos extendidos de tiempo, y para las velocidades de sus procesadores (las velocidades con que
las computadoras ejecutan sus programas y realizan su trabajo).
Se ha producido un crecimiento similar en el campo de las comunicaciones, en donde los costos se han
desplomado a medida que la enorme demanda por el ancho de bandaa de las comunicaciones (es decir, la

5 http://www.top500.org/.

M01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_C1_001-033_3802-1.indd 4 5/4/16 11:26 AM


1.2 Hardware y software 5

capacidad de transmisión de información) atrae una competencia intensa. No conocemos otros campos en
los que la tecnología mejore con tanta rapidez y los costos disminuyan de una manera tan drástica. Dicha
mejora fenomenal está fomentando sin duda la Revolución de la información.

1.2.2 Organización de la computadora


Sin importar las diferencias en la apariencia física, es posible percibir una segmentación de las computadoras
en varias unidades lógicas o secciones (figura 1.2).

Unidad lógica Descripción

Unidad Esta sección de “recepción” obtiene información (datos y programas de cómputo) de los
de entrada dispositivos de entrada y la pone a disposición de las otras unidades para que pueda
procesarse. La mayor parte de la información se introduce a través de los teclados, las
pantallas táctiles y los ratones. La información también puede introducirse de muchas
otras formas, como a través de comandos de voz, la digitalización de imágenes y códigos
de barras, por medio de dispositivos de almacenamiento secundario (como discos duros,

unidades de DVD, Blu-ray Disc y memorias Flash USB —también conocidas como
“thumb drives” o “memory sticks”), mediante la recepción de video de una cámara Web y
al recibir información en su computadora a través de Internet (como cuando descarga
videos de YouTube™ o libros electrónicos de Amazon). Las formas más recientes de
entrada son: la lectura de datos de geolocalización a través de un dispositivo GPS,
y la información sobre el movimiento y la orientación mediante un acelerómetro

www.fullengineeringbook.net
® ® ® ™ ® ®
(un dispositivo que responde a la aceleración hacia arriba o abajo, a la derecha o
izquierda y hacia delante o atrás) en un teléfono inteligente o un controlador de juegos
(Como Microsoft Kinect y Xbox , Wii Remote y Sony PlayStation Move).

Unidad Esta sección de “embarque” toma información que ya ha sido procesada por la compu-
de salida tadora y la coloca en los diferentes dispositivos de salida, para que esté disponible fuera
de la computadora. En la actualidad, la mayor parte de la información de salida de las
computadoras se muestra en pantallas (incluyendo pantallas táctiles), se imprime en
papel (lo cual no es muy bueno para el medio ambiente), se reproduce como audio o
video en equipos PC y reproductores de medios (como los iPod de Apple) y pantallas
gigantes en estadios deportivos, se transmite a través de Internet, o se utiliza para
controlar otros dispositivos, como robots y aparatos “inteligentes”. La información
también se envía por lo general a dispositivos de almacenamiento secundarios, como
discos duros, unidades DVD y unidades Flash USB. Una forma popular reciente de
salida es la vibración de los teléfonos inteligentes.

Unidad de Esta sección de “almacén” de acceso rápido, pero con relativa baja capacidad, retiene la
memoria información que se introduce a través de la unidad de entrada para que pueda estar
disponible de manera inmediata y procesarla cuando sea necesario. La unidad de
memoria también retiene la información procesada hasta que la unidad de salida pueda
colocarla en los dispositivos de salida. La información en la unidad de memoria es
volátil,l ya que por lo general se pierde cuando se apaga la computadora. Con frecuencia,
a la unidad de memoria se le conoce como memoria, memoria principal o RAM
(memoria de acceso aleatorio). Las típicas memorias principales en las computadoras de
escritorio y portátiles pueden contener hasta 128 GB de RAM. GB se refiere a gigabytes;
un gigabyte equivale aproximadamente a mil millones de bytes. Un byte equivale a ocho
bits. Un bit puede ser un 0 o un 1.

Fig. 1.2 冷 Unidades lógicas de una computadora (parte 1 de 2).

M01_DEITEL_COMO-PROGRAMAR-EN-JAVA_SE_10ED_C1_001-033_3802-1.indd 5 5/4/16 11:26 AM

También podría gustarte