Java Como Programar Deitel 10 Edicion
Java Como Programar Deitel 10 Edicion
Décima edición
www.fullengineeringbook.net
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
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.
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:
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.
www.pearsonenespañol.com
www.fullengineeringbook.net
Prólogo xxi
Prefacio xxiii
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
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
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
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
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
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
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
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
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
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
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
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]
Código fuente
Encontrará todo el código fuente utilizado en esta edición en español en:
www.pearsonenespañol.com/deitel
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
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)
Concurrencia: redes
• Capítulo 23 (en línea), Concurrencia (en inglés)
• Capítulo 28 (en línea), Redes (en inglés)
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
• 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).
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.
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
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.
• 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.
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.
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.
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.
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
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.
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.
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.
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
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».
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).
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.
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
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.
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
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.
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.
www.fullengineeringbook.net
•
C:\Program Files (x86)\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”.
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 (:).
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/
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.
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
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!
Objetivos
En este capítulo aprenderá sobre:
■ Los excitantes y recientes
desarrollos en el campo de
las computadoras.
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.
Dispositivos
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).
4 https://www.abiresearch.com/press/tablets-will-generate-35-of-this-years-25-billion-.
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.
5 http://www.top500.org/.
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.
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.