Logo Studenta

introduccion a la programacion con java

¡Este material tiene más páginas!

Vista previa del material en texto

00FrontMatter(i-xxxiv).indd ii00FrontMatter(i-xxxiv).indd ii 5/3/09 10:15:405/3/09 10:15:40
JAVA
CON
Introducción a la programación
00FrontMatter(i-xxxiv).indd i00FrontMatter(i-xxxiv).indd i 5/3/09 10:15:375/3/09 10:15:37
00FrontMatter(i-xxxiv).indd ii00FrontMatter(i-xxxiv).indd ii 5/3/09 10:15:405/3/09 10:15:40
John S. Dean 
Park University
Raymond H. Dean
University of Kansas
Revisión técnica:
Carlos Villegas Quezada
Universidad Iberoamericana,
Ciudad de México
JAVA
CON
Introducción a la programación
MÉXICO • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • MADRID
NUEVA YORK • SAN JUAN • SANTIAGO • SÃO PAULO • AUCKLAND • LONDRES • MILÁN
MONTREAL • NUEVA DELHI • SAN FRANCISCO • SINGAPUR • SAN LUIS • SIDNEY • TORONTO
00FrontMatter(i-xxxiv).indd iii00FrontMatter(i-xxxiv).indd iii 5/3/09 10:15:405/3/09 10:15:40
Director Higher Education: Miguel Ángel Toledo Castellanos
Director editorial: Ricardo Alejandro del Bosque Alayón
Editor sponsor: Pablo Eduardo Roig Vázquez
Coordinadora editorial: Marcela Rocha Martínez
Editor de desarrollo: Edmundo Carlos Zúñiga Gutiérrez
Supervisor de producción: Zeferino García García
Traductor: Hugo Villagómez Velázquez
INTRODUCCIÓN A LA PROGRAMACIÓN CON JAVA
Primera edición
 Prohibida la reproducción total o parcial de esta obra,
 por cualquier medio, sin la autorización escrita del editor.
DERECHOS RESERVADOS © 2009 respecto a la primera edición en español por
McGRAW-HILL/INTERAMERICANA EDITORES, S.A. DE C.V.
A Subsidiary of The McGraw-Hill Companies, Inc.
 Prolongación Paseo de la Reforma 1015, Torre A
 Pisos 16 y 17, Colonia Desarrollo Santa Fe,
 Delegación Álvaro Obregón
 C.P. 01376, México, D. F.
 Miembro de la Cámara Nacional de la Industria Editorial Mexicana, Reg. Núm. 736
ISBN: 978-970-10-7278-3
Traducido de la primera edición de: INTRODUCTION PROGRAMMING WITH JAVA:
A PROBLEM SOLVING APPROACH
Copyright © MMVIII, by The McGraw-Hill Companies, Inc. All rights reserved.
0-07-3047023
Impreso en México Printed in Mexico
0123456789 098765432109
Educación
00FrontMatter(i-xxxiv).indd iv00FrontMatter(i-xxxiv).indd iv 5/3/09 10:15:415/3/09 10:15:41
Dedicatoria
—A Stacy y Sarah
00FrontMatter(i-xxxiv).indd v00FrontMatter(i-xxxiv).indd v 5/3/09 10:15:425/3/09 10:15:42
Acerca de los autores
vi
John Dean es catedrático del Departamento de Información y Ciencias de la Computación en la Uni-
versidad Park. Obtuvo un grado de maestro en ciencias de la computación en la Universidad de Kan-
sas. Está certificado por Java Sun y ha trabajado en la industria como ingeniero de software y director 
de proyectos, con especialidad en Java y varias tecnologías en la Web: JavaScript, JavaServer Pages y 
servlets. Ha impartido un sinnúmero de cursos de ciencias de la computación, incluyendo programa-
ción con Java y programación con Java basada en la Web.
Raymond Dean es profesor emérito en ingeniería y ciencias de la computación en la Universidad de 
Kansas. Obtuvo su grado de maestro en ciencias en el MIT y un doctorado en la Universidad de Prin-
ceton, y es miembro decano de la IEEE. Ha publicado numerosos artículos científicos y posee 21 
patentes estadounidenses. Actualmente es investigador del programa Climate and Energy del Land 
Institute, que reivindica la conservación detallada de la energía y el reemplazo del consumo de com-
bustibles de origen fósil y nuclear por energía eólica y almacenamiento de energía eléctrica.
00FrontMatter(i-xxxiv).indd vi00FrontMatter(i-xxxiv).indd vi 5/3/09 10:15:425/3/09 10:15:42
 vii
Contenido
Prólogo xi
Resumen del proyecto xxi
CA PÍ T U LO 1
Introducción a las computadoras
y la programación 1
 1.1. Introducción 1
 1.2. Terminología de hardware 2
 1.3. Desarrollo del programa 8
 1.4. Código fuente 10
 1.5. Compilación de código fuente
en código objeto 11
 1.6. Portabilidad 11
 1.7. Surgimiento de Java 13
 1.8. Primer programa: Hola mundo 14
 1.9. Apartado GUI: Hola mundo
(opcional) 18
CA PÍ T U LO 2
Algoritmos y diseño 23
 2.1. Introducción 23
 2.2. Salida 24
 2.3. Variables 25
 2.4. Operadores y sentencias
de asignación 26
 2.5. Entrada 26
 2.6. Flujo de control y diagrama de fl ujo 27
 2.7. Sentencias if 28
 2.8. Bucles 32
 2.9. Técnicas de terminación de un ciclo 34
 2.10. Bucles anidados 37
 2.11. Trazado 39
 2.12. Otros formatos de seudocódigo
y aplicaciones 42
 2.13. Resolución de problema: administración
de activos (opcional) 44
CA PÍ T U LO 3
Fundamentos de Java 51
 3.1. Introducción 52
 3.2. Programa “Tengo un sueño” 52
 3.3. Comentarios y legibilidad 52
 3.4. El encabezado de la clase 54
 3.5. El encabezado del método main 55
 3.6. Paréntesis de llave 56
 3.7. System.out.println 56
 3.8. Compilación y ejecución 58
 3.9. Identifi cadores 58
 3.10. Variables 59
 3.11. Sentencias de asignación 60
 3.12. Sentencias de inicialización 61
 3.13. Tipos de datos numéricos: int, long,
float, double 62
 3.14. Constantes 64
 3.15. Operadores aritméticos 67
 3.16. Evaluación de expresiones y precedencia
de operadores 69
 3.17. Más operadores: incremento, decremento
y asignación compuesta 71
 3.18. Rastreo 73
 3.19. Conversión de tipos 73
 3.20. Tipo char y secuencias de escape 75
 3.21. Variables primitivas versus variables
de referencia 78
 3.22. Cadenas de caracteres 79
 3.23. Entrada: la clase Scanner 83
 3.24. Apartado GUI: entrada y salida con el objeto 
JOptionPane (opcional) 87
CA PÍ T U LO 4
Sentencias de control 97
 4.1. Introducción 97
 4.2. Condiciones y valores boolean 98
 4.3. Sentencias if 99
 4.4. Operador lógico && 102
 4.5. Operador lógico || 105
 4.6. Operador lógico ! 107
 4.7. Sentencia switch 108
 4.8. Ciclo while 112
 4.9. Ciclo do 115
 4.10. Ciclo for 116
 4.11. Resolución del problema de qué
ciclo utilizar 120
 4.12. Ciclos anidados 121
 4.13. Variables boolean 123
 4.14. Validación de entradas 125
 4.15. Resolución de problemas con lógica
boolean (opcional) 127
00FrontMatter(i-xxxiv).indd vii00FrontMatter(i-xxxiv).indd vii 5/3/09 10:15:435/3/09 10:15:43
CA PÍ T U LO 5
Utilización de métodos preconstruidos 137
 5.1. Introducción 137
 5.2. La biblioteca API 138
 5.3. Clase Math 141
 5.4. Clases envoltorio (wrapper) para tipos primitivos 146
 5.5. Clase Character 149
 5.6. Métodos de String 150
 5.7. Salida formateada con el método printf 156
 5.8. Resolución de problemas con números aleatorios 
(opcional) 159
 5.9. Apartado GUI: diseño de imágenes, líneas, rectángulos
y óvalos en applets de Java (opcional) 164
CA PÍ T U LO 6
Programación orientada a objetos 176
 6.1. Introducción 176
 6.2. Introducción a la programación orientada 
a objetos 177
 6.3. Primera clase con POO 180
 6.4. Clase controladora 183
 6.5. Objeto llamado, referencia this 186
 6.6. Variables de instancia 188
 6.7. Rastreo de un programa con POO 190
 6.8. Diagramas UML de clase 194
 6.9. Variables locales 195
 6.10. La sentencia return 198
 6.11. Paso de argumentos 200
 6.12. Métodos especializados: de acceso, de mutación
y boolean 202
 6.13. Resolución de problemas con simulación 
(opcional) 205
CA PÍ T U LO 7
Programación orientada a objetos:
detalles adicionales 220
 7.1. Introducción 220
 7.2. Creación de objetos: un análisis detallado 221
 7.3. Asignando una referencia 222
 7.4. Objetos de prueba para igualdad 226
 7.5. Paso de referencias como argumentos 230
 7.6. Encadenamiento de llamadas a métodos 233
 7.7. Métodos sobrecargados 235
 7.8. Constructores 238
 7.9. Constructores sobrecargados 244
 7.10. Resolución de problemas con diversas clases 247
CA PÍ T U LO 8
Ingeniería de software 263
 8.1. Introducción 263
 8.2. Convenciones de estilo para codifi car 264
 8.3. Métodos de ayuda 272
 8.4. Encapsulamiento (con variables de instancia
y variables locales) 274
 8.5. Filosofía de diseño 277
 8.6. Diseño arriba-abajo 278
 8.7. Diseño ascendente 287
 8.8. Diseño basado en casos 288
 8.9. Mejoramiento iterativo 289
 8.10. Método controladorde fusión en una clase 
controlada 291
 8.11. Acceso de variables de instancia sin la utilización
del this 292
 8.12. Resolución de problemas con el API de la clase 
Calendar (opcional) 294
 8.13. Apartado GUI: resolución de problemas mediante
tarjetas CRC (opcional) 296
CA PÍ T U LO 9
Clases con miembros de clase 308
 9.1. Introducción 308
 9.2. Variables de clase 309
 9.3. Métodos de clase 311
 9.4. Constantes nombradas 314
 9.5. Escritura de su propia clase Utility 316
 9.6. Utilización de miembros de clase en conjunción
con miembros de instancia 317
 9.7. Resolución de problemas con miembros de clase
y miembros de instancia en una clase
de listas ligadas (opcional) 320
CA PÍ T U LO 10
Arreglos y listas de arreglos 331
 10.1. Introducción 331
 10.2. Fundamentos de arreglos 332
 10.3. Declaración y creación de arreglos 335
 10.4. Propiedad length en un arreglo y arreglos 
parcialmente llenos 337
 10.5. Copia de un arreglo 339
 10.6. Resolución de problemas mediante casos con 
arreglos 341
 10.7. Búsqueda de un arreglo 347
 10.8. Ordenamiento de un arreglo 351
 10.9. Arreglos de dos dimensiones 354
 10.10. Arreglos de objetos 360
 10.11. La clase ArrayList 364
viii Contenido
00FrontMatter(i-xxxiv).indd viii00FrontMatter(i-xxxiv).indd viii 5/3/09 10:15:455/3/09 10:15:45
 10.12. Almacenamiento de primitivos en una
lista de arreglos 370
 10.13. Ejemplo de lista de arreglo utilizando objetos 
anónimos y el ciclo for-each 372
 10.14. Lista de arreglo versus arreglos estándar 378
CA PÍ T U LO 11
Detalles de tipo y mecanismos
de codificación alternativa 388
 11.1. Introducción 388
 11.2. Tipos entero y de punto fl otante 389
 11.3. Tipo char y el conjunto de caracteres ASCII 392
 11.4. Conversiones de tipo 395
 11.5. Modos prefi jo/sufi jo para operadores de incremento/
decremento 397
 11.6. Asignaciones insertadas 400
 11.7. Expresiones del operador condicional 401
 11.8. Revisión de evaluación de expresiones 403
 11.9. Evaluación de cortocircuito 405
 11.10. Declaración vacía 407
 11.11. Declaración break dentro de un ciclo 408
 11.12. Detalles para el encabezado del ciclo for 410
 11.13. Apartado GUI: Unicode (opcional) 411
CA PÍ T U LO 12
Agregación, composición y herencia 422
 12.1. Introducción 422
 12.2. Composición y agregación 423
 12.3. Revisión de herencia 428
 12.4. Implementación de jerarquía Persona/Empleado/
TiempoCompleto 433
 12.5. Constructores en una subclase 435
 12.6. Sobreposición de métodos 436
 12.7. Utilización de jerarquía Persona/Empleado/
TiempoCompleto 438
 12.8. El modifi cador de acceso final 439
 12.9. Utilización de herencia con agregación y 
composición 439
 12.10. Práctica de diseño con un ejemplo de juego
de cartas 440
 12.11. Resolución de problema con clases de asociación 
(opcional) 447
CA PÍ T U LO 13
Herencia y polimorfismo 455
 13.1. Introducción 455
 13.2. La clase Objeto y promoción automática
de tipos 456
 13.3. El método equals 456
 13.4. El método toString 460
 13.5. Polimorfi smo y vinculación dinámica 464
 13.6. Asignaciones entre clases en una jerarquía
de clases 468
 13.7. Polimorfi smo con arreglos 469
 13.8. Métodos y clases abstractas 474
 13.9. Interfaces 477
 13.10. El modifi cador de acceso protected 483
 13.11. Apartado GUI: gráfi cas en tres dimensiones 
(opcional) 485
CA PÍ T U LO 14
Manejo de excepciones 497
 14.1. Introducción 497
 14.2. Revisión de excepciones y mensajes de excepción 498
 14.3. Utilización de los bloques try y catch para manejo 
de llamadas “peligrosas” a métodos 498
 14.4. Ejemplo de trazado lineal 501
 14.5. Detalles de los bloques try 503
 14.6. Dos categorías de excepciones: comprobadas
y no comprobadas 505
 14.7. Excepciones no comprobadas 507
 14.8. Excepciones comprobadas 509
 14.9. La clase Exception y su método getMessage 512
 14.10. Bloques catch múltiples 513
 14.11. Comprensión de los mensajes de excepción 516
 14.12. Utilización de throws <tipo-excepción> para 
posponer el catch 519
 14.13. Apartado GUI y solución de problemas: ejemplo 
revisitado de trazado de líneas (opcional) 521
CA PÍ T U LO 15
Archivos 537
 15.1. Introducción 537
 15.2. Clases API de Java que se precisa importar 538
 15.3. Salida a archivos de texto 540
 15.4. Lectura de archivos de texto 543
 15.5. Generador de archivos HTML 547
 15.6. Formato de archivo de texto versus formato
de archivo binario 549
 15.7. Archivo binario 553
 15.8. Archivo objeto 556
 15.9. La clase File 560
 15.10. Apartado GUI: la clase JFileChooser 
(opcional) 561
CA PÍ T U LO 16
Fundamentos de programación GUI 576
 16.1. Introducción 577
 16.2. Fundamentos de programación de manejo
de eventos 577
 16.3. Un sencillo programa de ventanas 579
 16.4. Clase JFrame 581
 16.5. Componentes en Java 582
 Contenido ix
00FrontMatter(i-xxxiv).indd ix00FrontMatter(i-xxxiv).indd ix 5/3/09 10:15:465/3/09 10:15:46
 16.6. Componente JLabel 583
 16.7. Componente JTextField 584
 16.8. Programa Saludo 585
 16.9. Componente oyentes 585
 16.10. Clases internas 588
 16.11. Clases internas anónimas 589
 16.12. Componente JButton 592
 16.13. Ventanas de diálogo y clase JOptionPane 597
 16.14. Distinción entre múltiples eventos 600
 16.15. Utilización de getActionCommand para distinción 
entre múltiples eventos 602
 16.16. Color 602
 16.17. ¿Cómo se agrupan las clases GUI? 606
 16.18. Oyentes de ratón y de imágenes (opcional) 609
CA PÍ T U LO 17
Programación GUI: distribución de componentes, 
componentes GUI adicionales 620
 17.1. Introducción 621
 17.2. Diseño GUI y gestores de distribución 621
 17.3. Gestor FlowLayout 623
 17.4. Gestor BorderLayout 625
 17.5. Gestor GridLayout 630
 17.6. Ejemplo de juego de gato 633
 17.7. Resolución de problema: triunfo en el juego
de gato (opcional) 634
 17.8. Gestores de distribución insertados 638
 17.9. Clase JPanel 639
 17.10. Programa calculadoraMatematica 640
 17.11. Componente JtextArea 641
 17.12. Componente JcheckBox 646
 17.13. Componente JradioButton 648
 17.14. Componente JcomboBox 650
 17.15. Ejemplo aplicación de tarea 652
 17.16. Más componentes de Swing 658
Apéndices
Apéndice 1 Conjunto de caracteres Unicode/ASCII
con códigos hexadecimales 667
Apéndice 2 Precedencia de operadores 670
Apéndice 3 Palabras reservadas en Java 672
Apéndice 4 Paquetes 676
Apéndice 5 Convenciones de estilo de codifi cación
en Java 680
Apéndice 6 Javadoc 691
Apéndice 7 Diagramas UML 697
Apéndice 8 Recursión 702
Apéndice 9 Multithreads 711
Índice 720
x Contenido
00FrontMatter(i-xxxiv).indd x00FrontMatter(i-xxxiv).indd x 5/3/09 10:15:475/3/09 10:15:47
En este libro haremos un viaje al interior del divertido y excitante mundo de la programación de compu-
tadoras. Durante este viaje, proporcionaremos diversas prácticas para la solución de problemas. Después 
de todo, los buenos programadores necesitan ser buenos resolviendo problemas. Mostraremos cómo im-
plementar la solución de problemas con programas Java. Proporcionaremos una amplia gama de ejem-
plos, algunos cortos y enfocados a un simple concepto, algunos largos y más orientados al “mundo real”. 
Presentamos el material en un formato convencional y fácil de seguir, con el objetivo de que nuestro viaje 
sea placentero. Cuando usted termine de leer este libro, será un eficiente programador en Java.
El libro se dirige a diversos tipos de lectores. En primer lugar, a los estudiantes de nivel universitario 
que realizan un curso de “Introducción a la programación” o un curso secuencia, en el que no se requiere 
experiencia previa en programación.
Además, también se dirige a personas con experiencia en la industria de la programación, a estu-
diantes de nivel universitario con algún tipo de experiencia en programación, y a todo aquel que necesite 
y desee aprender Java. Estos segundos lectores pueden omitir la lectura de los primeros capítulos concer-
nientes a conceptos generales de programación, y dirigir su atención a lascaracterísticas de Java que di-
fieren de otros lenguajes que conocen. En particular, debido a que C++ y Java son lenguajes de 
programación muy similares, los lectores con algo de conocimiento en C++ deben ser capaces de cubrir 
el libro con un simple curso de tres horas semanales; pero para aquellos sin experiencia previa en el 
campo de la programación, el texto, reiteramos, es adecuado, pues en él no se requiere de algún tipo de 
conocimiento previo.
Finalmente, el texto se dirige a estudiantes de nivel bachillerato y lectores fuera del ámbito acadé-
mico sin experiencia en programación. A este tercer grupo de lectores recomendamos la lectura del libro 
completo, a su propio ritmo y en un nivel de caso por caso.
Objetivo general núm. 1: Resolución de problemas
La resolución de problemas es una habilidad básica que todo programador debe poseer. Se enseña la re-
solución de problemas haciendo énfasis en dos elementos: el desarrollo de algoritmos y el diseño de pro-
gramas.
Énfasis en el desarrollo de algoritmos
En el capítulo 2, se introduce al lector en el desarrollo de algoritmos mediante el uso del seudocódigo, en 
lugar de usar la sintaxis del lenguaje Java. Con el uso del seudocódigo, el estudiante será capaz de traba-
jar con problemas no triviales aun sin conocer la sintaxis de Java (no tendrá que preocuparse de los enca-
bezados de las clases, de los puntos y comas, de los corchetes, etc.).1 Al trabajar en la resolución de pro-
blemas no triviales el estudiante obtiene una primera apreciación de la creatividad, la lógica y la 
organización. Sin esta apreciación, el estudiante tiende a aprender la sintaxis de Java mediante memori-
zación por repetición; pero, si cuenta con ella, el estudiante aprenderá la sintaxis de Java de una manera 
más rápida, pues se sentirá motivado para hacerlo. Además, podrá cumplir con los ejercicios asignados 
de una manera bastante sencilla debido a que cuenta con experiencia previa en resolución de problemas 
mediante el uso del seudocódigo.
Prólogo
 xi
1 Inevitablemente para el seudocódigo se usa un estilo particular, aunque de manera repetida se recalca que otros estilos de seu-
docódigo también son válidos en la medida en que contengan el significado idóneo. El estilo de seudocódigo que se utiliza aquí 
es una combinación de descripción libre para tareas de alto nivel y de comandos más específicos para tareas de bajo nivel. Para 
los comandos específicos, se usan palabras en inglés natural más que símbolos crípticos. Se ha escogido un estilo de seudocódigo 
intuitivo a fin de dar la bienvenida a nuevos programadores, y estructurado para permitir la lógica del programa.
00FrontMatter(i-xxxiv).indd xi00FrontMatter(i-xxxiv).indd xi 5/3/09 10:15:485/3/09 10:15:48
xii Prólogo
A partir del capítulo 3, se hará uso de Java para la resolución de ejemplos de desarrollo de algorit-
mos; sin embargo, para la mayoría de los problemas involucrados, se hará uso de cuando en cuando del 
seudocódigo de alto nivel para describir soluciones de primera mano. La utilización del seudocódigo 
permite a los lectores olvidarse de los detalles de la sintaxis y enfocar su atención en la parte de la solu-
ción del algoritmo.
Énfasis en el diseño del programa
La solución del problema va más allá del simple desarrollo del algoritmo, implica también encontrar la 
mejor implementación del algoritmo. Esto es el diseño del programa. El diseño del programa es extrema-
damente importante, ésa es la razón de que se ocupe mucho tiempo en ello. En este libro no sólo se da 
una solución, también se explica el proceso para llegar a la misma. Por ejemplo, se explica cómo elegir 
entre las diferentes estructuras de control, cómo se divide un método en más de uno, cómo elegir la clase 
más apropiada, cómo elegir entre miembros de instancia y miembros de clase, y cómo determinar las re-
laciones haciendo uso de la herencia y la composición. Se reta al estudiante a que encuentre las imple-
mentaciones más elegantes de una tarea en particular.
Se dedica un capítulo completo al diseño de un programa (capítulo 8, Ingeniería de software). En 
este capítulo, se proporciona una amplia visión de las convenciones en el estilo de programación, modu-
larización y encapsulamiento. También, se describen las diferentes estrategias alternativas de diseño 
(arriba-abajo, ascendente, basado en casos y mejora iterativa).
Secciones de resolución de problemas
A menudo se trata el tema de la resolución de problemas (desarrollo del algoritmo y diseño del programa) 
en el flujo natural de los conceptos explicados, pero también se explicará en secciones dedicadas especí-
ficamente a ello. En cada sección de resolución de problemas se presenta una situación que contiene un 
problema sin resolver, y en seguida la solución de éste, que intenta simular la resolución de problemas, tal 
como se haría en la vida real, mediante una estrategia de diseño iterativo. Se presenta una solución inme-
diata, se analiza ésta, y después se plantean posibles mejoras a la misma, para lo cual se utiliza el for-
mato conversacional de prueba y error. Por ejemplo, “¿qué tipo de gestor de contenido deberíamos 
utilizar? Primero intentamos con el GridLayout manager; trabaja bien, pero no es el mejor. Intentemos 
con el BorderLayout manager”. Este tono casual da confianza al estudiante al transmitirle el mensaje de 
una forma normal, como se esperaría en un caso en que un programador requiriera trabajar en la resolu-
ción de un problema, en diversas ocasiones, antes de encontrar la mejor solución.
Mecanismos adicionales en la resolución de problemas
Se incluyen ejemplos de resolución de problemas y consejos para la solución de los mismos en el texto 
(no únicamente en los capítulos 2 y 8 o en las secciones de solución de problemas). Es necesario destacar 
que se incluye un cuadro de resolución de problemas, con un icono y un breve tip al lado del mismo, un 
texto que contiene el ejemplo con la solución del problema y/o un consejo.
El libro contiene una multitud de ejemplos de programas pues se cree firmemente en la eficacia del 
aprendizaje mediante ejemplos. Se recomienda al lector utilizar los programas a manera de receta para 
resolver programas similares que se le pudieran presentar.
Objetivo general núm. 2: Fundamentos iniciales
Conceptos pospuestos que requieren sintaxis compleja
Muchos libros de texto introductorios no tratan la sintaxis compleja con la profundidad que requiere. Al 
utilizar una sintaxis compleja desde el principio, el estudiante adquiere el hábito de introducir el código 
sin entenderlo de manera adecuada o, peor aún, el de copiar y pegar el ejemplo sin entenderlo correcta-
mente. Esto puede resultar en programas menos que ideales y en un estudiante que limita su habilidad de 
resolver una variedad de problemas. Por lo tanto, es preferible posponer el estudio de conceptos que re-
quieran sintaxis compleja. Es mejor introducirlos más adelante o cuando el estudiante esté capacitado 
para comprenderlos en su totalidad.
00FrontMatter(i-xxxiv).indd xii00FrontMatter(i-xxxiv).indd xii 5/3/09 10:15:495/3/09 10:15:49
 Prólogo xiii
Como primer ejemplo de esta filosofía, se cubren las formas simples de programación GUI (siglas en 
inglés de Graphical User Interface, interfaz gráfica del usuario) en los primeros capítulos, en una sección 
aparte, y en seguida se cubren formas de programación gráfica más complejas en capítulos más avanza-
dos (específicamente, hasta el final del libro). Esto difiere de otros libros de texto de Java, que inician 
tratando ampliamente el tema de manejo de eventos con la programación GUI. En opinión de los autores, 
esa estrategia es un error, pues el manejo de eventos mediante programación gráfica requiere de madurez 
en el manejo de la programación. Como se incluye hasta el final del libro, los lectores tienen mayor capa-
cidad para entenderla.
Ejemplos con trazado de resultado
Para escribir un códigode manera eficaz, es imperativo entenderlo de manera adecuada. Se ha visto que 
la presentación paso a paso de los resultados de ejecución del código de un programa es una forma eficaz 
de asegurar su entendimiento. Así pues, en las primeras partes del libro, al introducir una nueva estruc-
tura de programación, a menudo se presenta una simulación de los resultados del mismo, de una manera 
meticulosa. La técnica de trazado que se utiliza en el libro, ilustra el proceso completo que los programa-
dores emplean al llevar a cabo la depuración. Es una alternativa a la secuencia de pantallas que serían 
generadas por los depuradores en un software IDE (siglas en inglés de Integrated Development Environ-
ment, ambiente de desarrollo integrado).
Entrada y salida
En las secciones opcionales de tips en GUI y en los capítulos sobre el mismo tema al final del libro, se 
utilizan comandos GUI para entrada y salida (E/S), pero debido al énfasis en los fundamentos, se utilizan 
comandos de consola, para E/S en el resto del libro.2 Para entrada por consola, se utiliza la clase Scanner. 
Para salida por consola, se utilizan los métodos estándar System.out.print y System.out.printf.
Objetivo general núm. 3: Mundo real
Muy a menudo los estudiantes en los salones de clase de hoy en día y los practicantes de la industria pre-
fieren aprender mediante la práctica, enfocando su atención al mundo real. Para satisfacer esta necesidad, 
este libro incluye:
Herramientas de compilación.
Ejemplos de programas completos.
Guía práctica en diseño de programa.
Guía de estilo de codificación con base en los estándares de la industria.
Notación UML para diagramas de relación de clases.
Asignaciones de tareas de proyectos prácticos.
Herramientas de compilación
No es necesaria una herramienta de compilación específica, el lector puede escoger la herramienta de 
compilación que prefiera. Si no tiene preferencia por algún compilador en específico, podría utilizar al-
guno de éstos:
Kit Java2 SDK de Sun.
TextPad de Helios.
Eclipse, de Eclipse Foundation.
NetBeans, respaldado por Sun.
BlueJ, de las Universidades de Kent y Decaen.
•
•
•
•
•
•
•
•
•
•
•
2 El material relacionado con GUI de E/S se cubre pronto con la clase JOptionPane. De este modo se abre una puerta opcional 
para los aficionados a GUI. Si los lectores así lo desean, pueden usar JOptionPane para implementar todos sus programas con 
GUI de E/S en vez de hacerlo con la consola de E/S. Para llevar a cabo lo anterior, es necesario sustituir todas las llamadas por 
medio de la consola al método E/S con llamadas al método JOptionPane.
00FrontMatter(i-xxxiv).indd xiii00FrontMatter(i-xxxiv).indd xiii 5/3/09 10:15:505/3/09 10:15:50
xiv Prólogo
Para obtener los compiladores completos, el lector puede visitar el sitio Web del libro:i http://www.
mhhe.com/dean, buscar los vínculos apropiados de compilador(es) y bajarlos gratuitamente.
Ejemplos de programas completos
Además de proporcionar fragmentos de código para ilustrar conceptos específicos, el libro contiene va-
rios ejemplos de programas completos. Con programas completos, el estudiante será capaz: 1) de ver 
cómo el código analizado se enlaza con el resto del programa y 2) probar el código, corriéndolo.
Convenciones de estilo de codificación
En el libro también se incluyen tips de codificación. El estilo de los tips se basa en las convenciones de 
codificación de Sun (http://java.sun.com/docs/codeconv/) y en prácticas de la industria. En el apéndice 5, 
se proporciona una referencia completa a las convenciones de estilo de codificación del código y un 
ejemplo asociado de un programa que ilustra dichas convenciones.
Notación UML
El lenguaje de modelado universal (UML, por sus siglas en inglés) se ha convertido en el estándar para des-
cribir las entidades en grandes proyectos de software. En lugar de abrumar a los programadores principian-
tes con la sintaxis completa del UML completo (el cual es demasiado extenso), se presenta un subconjunto 
del UML. En el libro, se incluye notación UML para representar gráficamente clases y relaciones entre 
clases. Para aquellos interesados en más detalles, en el apéndice 7 se proporciona notación UML adicional.
Problemas de tarea
Se proporcionan problemas de tarea que son ilustrativos y prácticos, y se explican de manera muy clara. 
Los problemas tienen un rango de dificultad que va de sencillos a retadores, y están agrupados en tres 
categorías: preguntas de revisión, ejercicios, y proyectos. Se incluyen preguntas de revisión y ejercicios al 
final de cada capítulo, y se proporcionan proyectos en el sitio Web del libro.
Las preguntas de revisión por lo regular tienen respuestas cortas y respuestas que están en el libro. 
Los formatos de las preguntas son: de respuesta corta, opción múltiple, cierto/falso, llenar los espacios en 
blanco, transcripción de programa, depuración, escribir un fragmento de código. Cada pregunta de revi-
sión se basa en una pequeña parte del capítulo.
Los ejercicios por lo regular tienen respuestas cortas a moderadamente largas, estas respuestas no se 
encuentran en el libro. En los ejercicios se utilizan estos formatos: respuesta corta, transcripción, depura-
ción, y escritura de un fragmento de código. Los ejercicios son la clave del prerrequisito más importante 
de la sección numerada del capítulo, pero a menudo integran conceptos de varias partes del capítulo.
Los proyectos consisten en descripciones del problema cuyas soluciones son programas completos. 
Las soluciones a los proyectos no se incluyen en el libro. En estos proyectos se requiere que el estudiante 
emplee su creatividad y sus habilidades en la solución de problemas y aplique lo que ha aprendido en el 
capítulo. Estos proyectos a menudo incluyen partes opcionales, que significan retos para los estudiantes 
más talentosos. Los proyectos son la clave del prerrequisito más importante del número de sección en el 
capítulo, pero, por lo regular, integran conceptos provenientes de diversas partes del capítulo.
Una característica relevante y especial de esta obra es la forma en que se especifican los problemas 
del proyecto. Las “sesiones ejemplo” muestran la salida generada para un conjunto de valores de entrada. 
Estas sesiones de ejemplo incluyen entradas que representan situaciones típicas y a menudo también ex-
tremas en situaciones límite.
Proyectos del área académica
Para hacer más atractivos los proyectos y mostrar cómo las técnicas de programación del capítulo en curso 
se pudieran aplicar a áreas de interés diferente, se toman contenidos de diferentes áreas académicas:
i Es importante mencionar que el sitio Web del libro se encuentra totalmente en inglés: tutoriales, proyectos propuestos y tareas, 
presentaciones y otros temas, por lo cual en este libro, al hablar de alguna sección en el sitio Web, se presenta el título en inglés, 
tal y como lo encontrará el lector.
00FrontMatter(i-xxxiv).indd xiv00FrontMatter(i-xxxiv).indd xiv 5/3/09 10:15:505/3/09 10:15:50
 Prólogo xv
Ciencias de la computación y métodos numéricos.
Administración y contabilidad.
Ciencias sociales y Estadística.
Matemáticas y Física.
Ingeniería y Arquitectura.
Biología y Ecología.
Los proyectos de área académica no requieren un conocimiento previo del área en particular. Así, el 
instructor puede asignar libremente cualquiera de los proyectos a cualquiera de sus estudiantes. Para 
ofrecer al lector general un conocimiento suficientemente especializado con el que pueda trabajar en un 
problema de un área académica en particular, en ocasiones se amplía el planteamiento del problema para 
explicar algunos conceptos especiales en esa área académica.
En la mayoría de los proyectos de área académica no se requiere que los estudiantes hayan comple-
tado los proyectos de los capítulos previos; esto es, los proyectos no se construyen uno al otro. Así pues, 
el instructor puede asignar libremente los proyectos sin preocuparsepor los prerrequisitos de los proyec-
tos. En algunos casos, un proyecto repite un proyecto del capítulo previo con un enfoque diferente. El 
profesor puede usar esta repetición para ejemplificar la variedad de alternativas, pero no es necesario.
Las asignaciones de proyecto se pueden adaptar a las necesidades del lector. Por ejemplo:
Para los lectores fuera de la academia
(aquellos cuyos proyectos concuerdan con sus intereses).
Cuando un curso tiene estudiantes de un área académica específica
(el instructor puede asignar proyectos del área académica relevante).
Cuando un curso tiene estudiantes con diferentes perfiles
(el instructor puede solicitar a los estudiantes que elijan proyectos de su propia área académica, o 
bien puede ignorar los límites del área académica y simplemente asignar los proyectos que llamen 
más su atención).
Para ayudar al lector a decidir en qué proyectos trabajar, se incluye en este libro una sección de “Re-
sumen de proyectos” después del prólogo; en éste se enlistan todos los proyectos por capítulo, y para cada 
uno se especifica:
La sección asociada dentro del capítulo.
El área académica.
Su longitud y dificultad.
Una breve descripción.
Después de utilizar la sección del “Resumen de proyectos” para obtener una idea acerca de en qué pro-
yectos podría gustarle al lector trabajar, es conveniente consultar el sitio Web del libro para obtener des-
cripciones completas del mismo.
Organización
En este libro, los autores guían a los lectores en tres importantes metodologías de programación: progra-
mación estructurada, programación orientada a objetos (POO), y programación orientada a eventos. Para 
cubrir la parte de programación estructurada, se introducen conceptos básicos tales como variables y 
operadores, sentencias condicionales, y sentencias de control. Para cubrir el tema de POO, primero se 
muestra a los lectores cómo llamar a los métodos precompilados de las API (siglas en inglés de Applica-
tion Program Interface, bibliotecas de interfaces de programación aplicada) de Sun. Después, se introdu-
cen conceptos de POO, tales como clase, objeto, variable de instancia y métodos de instancia. Los 
capítulos sobre manejo de excepciones y archivos son una transición a la programación de la interfaz 
gráfica del usuario (GUI). Se cubre de manera importante el manejo de eventos en programación GUI en 
los dos últimos capítulos.
El contenido y secuencia que aquí se promueven hacen capaz al estudiante de desarrollar sus habili-
dades desde una base de programación fundamental. Para lograr este primer enfoque fundamental, el li-
bro inicia con un mínimo de conceptos y detalles. Después, desarrolla los conceptos de manera gradual y 
•
•
•
•
•
•
•
•
•
•
•
•
•
00FrontMatter(i-xxxiv).indd xv00FrontMatter(i-xxxiv).indd xv 5/3/09 10:15:515/3/09 10:15:51
xvi Prólogo
añade detalles posteriores. Se ha evitado sobrecargar los primeros capítulos difiriendo ciertos detalles 
menos importantes hasta los últimos capítulos.
Apartado GUI
Muchos programadores encuentran divertida la programación GUI. Como tal, la programación GUI 
puede ser una herramienta motivacional para mantener el interés y compromiso del lector. Ésa es la ra-
zón de que se incluyan secciones gráficas a lo largo de la obra, desde el primer capítulo. A estas seccio-
nes se les llama “Apartado GUI”. Los lectores que no tengan tiempo para introducirse en el apartado 
GUI, no tienen ningún problema; cualquier sección del apartado GUI puede omitirse, ya que dichos te-
mas son independientes del material que se trata más adelante.
Capítulo 1
El capítulo 1 inicia con una explicación de los términos básicos de computación: cuáles son los compo-
nentes del hardware, qué es el código fuente, qué es el código objeto, etc. También en este capítulo se 
describe el lenguaje de programación que se utilizará en el resto del libro: Java. Finalmente, se propor-
ciona al estudiante una rápida visión del clásico programa “Hola mundo”, fundamental en el inicio de un 
aprendizaje de cualquier lenguaje de programación. Se explica cómo crear y correr un programa utili-
zando software minimalista: el bloc de notas de Microsoft y las herramientas del kit de desarrollo de lí-
nea de comandos de Sun (SDK, por sus siglas en inglés).
Capítulo 2
En el capítulo 2 se presentan técnicas de desarrollo en la resolución de problemas con énfasis en el diseño 
de algoritmos. En la implementación de soluciones algorítmicas se utilizan herramientas genéricas 
(diagramas de flujo y seudocódigo), dando mayor peso al seudocódigo. Como parte de la explicación del 
diseño de algoritmos, se describen técnicas de programación estructurada. A fin de que el estudiante 
aprecie los detalles de la semántica, se muestra cómo trazar los algoritmos.
Capítulos 3-5
Se presentan técnicas de programación estructurada mediante el uso de Java. En el capítulo 3 se descri-
ben las bases de la programación secuencial: variables, entradas/salidas, sentencias de asignación y lla-
madas a métodos sencillos. En el capítulo 4 se describe el flujo de programación no secuencial: sentencia 
if, sentencia switch, y sentencias de control. En el capítulo 5 se explican los métodos con más detalle y se 
explica al lector cómo utilizar métodos preconstruidos en la biblioteca de API de Java. En los tres capítu-
los, se enseña diseño de algoritmos mediante la resolución de problemas y la escritura de programas con 
la nueva sintaxis de Java introducida.
Capítulos 6-8
En el capítulo 6 se introducen los elementos básicos de la POO en Java. Esto incluye la implementación 
de clases, y la implementación de métodos y variables dentro de estas clases. Se utilizan diagramas de 
clase de UML y técnicas de control de flujos en programación orientada a objetos para ilustrar dichos 
conceptos.
En el capítulo 7 se proporcionan detalles adicionales de la programación orientada a objetos. Se ex-
plica cómo las variables referenciadas son asignadas, cómo se comprueba su igualdad y cómo pasar ar-
gumentos a un método. Se cubre la sobrecarga de métodos y constructores.
Mientras que el arte del diseño de programas y la resolución de problemas de ciencias de la compu-
tación se desarrollan a lo largo del libro, en el capítulo 8 se enfocan estos aspectos en el contexto de la 
POO. El capítulo inicia con un tratamiento organizado al estilo de programación. Se describe la mayoría 
de los paradigmas de programación: diseño arriba-abajo, diseño ascendente, utilización de software pre-
construido para módulos de bajo nivel, y uso de prototipos.
Capítulo 9
Algunos libros de Java enseñan cómo implementar miembros de clase antes de enseñar cómo implemen-
tar miembros de instancia. Con ese método, el estudiante aprende a escribir miembros de clase de ma-
00FrontMatter(i-xxxiv).indd xvi00FrontMatter(i-xxxiv).indd xvi 5/3/09 10:15:515/3/09 10:15:51
 Prólogo xvii
nera inapropiada, y esa práctica es difícil de romper después, cuando finalmente el tema de los métodos 
de instancia se ha cubierto. La práctica de programación propiamente dicha, señala que los practicantes 
(incluidos los programadores novatos) deberían implementar miembros de instancia en mayor cantidad 
que miembros de clase. Así pues, se enseña cómo implementar miembros de instancia desde un principio 
y se pospone la implementación de miembros de clases hasta el capítulo 9.
Capítulo 10
En el capítulo 10 se describen las diferentes formas de almacenar datos relacionados. Se presentan los 
fundamentos de arreglos y muchas aplicaciones de importancia hechas con arreglos: búsqueda, ordena-
miento, y construcción de histogramas. Se presentan conceptos más avanzados de arreglos, como la uti-
lización de arreglos de dos dimensiones y arreglos de objetos. Finalmente, se habla de una forma más 
poderosa de arreglos: la lista de arreglos (ArrayList).
Capítulo 11
Desde un principio, el estudiante debe involucrarse en actividades relacionadas con la resoluciónde pro-
blemas. Cubrir con minuciosidad los detalles de la sintaxis puede distraernos de este objetivo. Por lo 
tanto, se pasarán por alto algunos detalles de importancia menor sobre la sintaxis y se regresará a ellos 
en el capítulo 11. En el capítulo 11 se proporcionan más detalles de temas tales como:
Los tipos primitivos byte y short.
El conjunto de caracteres Unicode.
Conversión de tipos.
Modo posfijo vs. prefijo para los operadores de incremento y decremento.
El operador condicional.
Evaluación en corto circuito.
Capítulo 12-13
En los capítulos 12 y 13 se describen las relaciones entre clases. Se dedican dos capítulos completos a las 
relaciones de clases, ya que este subtema es de gran importancia. Se toma el tiempo para explicar los de-
talles de la relación de clases a profundidad y se proporcionan numerosos ejemplos. En el capítulo 12 se 
habla de los temas de agregación, composición y herencia. En el capítulo 13 se tratan con más detalle 
aspectos de la herencia, como la clase de objeto, el polimorfismo, clases abstractas, e interfaces.
Capítulos 14-15
Se cubre el manejo de excepciones en el capítulo 14 y el de archivos en el 15. Se habla del manejo de excep-
ciones antes que del de archivos debido a que el código de manejo de archivos hace uso del de manejo de 
excepciones; por ejemplo, el abrir un archivo requiere que se realice la verificación de alguna excepción.
Capítulos 16-17
Se trata el tema del manejo de eventos con programación GUI al final del libro en los capítulos 16 y 17. 
Al aprender sobre el manejo de eventos mediante la programación GUI en una etapa posterior, el estu-
diante es capaz de aprovechar mejor sus complejidades inherentes.
Apéndices
La mayoría de los apéndices cubren material de referencia, tales como la tabla de caracteres ASCII y la 
tabla de precedencia de operadores; sin embargo, en los últimos dos apéndices se cubre material avan-
zado de Java: recursión y multitareas.
Tema de dependencia y oportunidades de cambio en la secuencia
El material se ha dispuesto en un orden natural para alguien que desee introducirse en los fundamentos 
primero y que también quiera una pronta introducción a la POO. Se considera que el orden es el más ade-
•
•
•
•
•
•
00FrontMatter(i-xxxiv).indd xvii00FrontMatter(i-xxxiv).indd xvii 5/3/09 10:15:525/3/09 10:15:52
xviii Prólogo
cuado y eficaz para aprender cómo llegar a ser un eficiente programador en la POO. Sin embargo, se ha 
observado que los lectores tienen diferentes preferencias en cuanto al orden del contenido. Para ajustarse 
a estas diferencias, se proporciona algo de flexibilidad en la construcción. La figura 0.1 ilustra dicha flexi-
bilidad al mostrar la dependencia entre capítulos y, aún más importante, la no dependencia de capítulos. 
Por ejemplo, la flecha entre los capítulos 3 y 4 significa que el capítulo 3 debe ser leído antes del capítulo 
4. Y la ausencia de flecha entre los capítulos 1 y 2 significa que la lectura del capítulo 1 se puede omitir.
A continuación se presentan algunas oportunidades de cambio en la secuencia mostradas en la fi-
gura 0.1:
El lector puede omitir el capítulo 1 (Introducción a las computadoras y programación).
Para una pronta introducción a la POO, el lector puede leer la sección de introducción a la POO en el 
capítulo 6 después de haber leído el capítulo 1. Y puede aprender sobre sintaxis y semántica en la 
POO en el capítulo 7 después de haber finalizado con los fundamentos de Java en el capítulo 3.
Para una práctica adicional de las secuencias de control, el lector puede aprender sobre arreglos en el 
capítulo 10 después de haber finalizado la lectura de las secuencias de control en el capítulo 4.
El lector puede omitir el capítulo 15 (archivos).
Nota. En la figura 0.1, la flecha discontinua conecta el capítulo 3 con el 15. Se utiliza una flecha con lí-
neas discontinuas para indicar que la conexión es parcial. Algunos lectores quizá quieran utilizar archi-
vos desde una etapa temprana para entrada y salida (E/S). A estos lectores se les recomienda leer el 
capítulo 3 sobre los fundamentos de Java e inmediatamente pasar al capítulo 15, sección 15.3 y 15.4 para 
E/S en archivos de texto. Con un poco de esfuerzo, serán capaces de utilizar archivos para sus necesida-
des de E/S en el resto del libro. Se dice “con un poco de esfuerzo” debido que las secciones de E/S contie-
nen algo de código que no será completamente entendible para alguien que viene del capítulo 3. Para 
utilizar el código de E/S de archivos de texto, deberán tratarlo como a una plantilla. En otras palabras, 
utilizarán el código a pesar de que sean incapaces de entenderlo.
Para apoyar la flexibilidad del orden de contenido, el libro contiene “hipervínculos”. Un hipervíncu-
lo es un salto adelantado de un lugar del libro a otro distinto. Los saltos son válidos en términos de cono-
cimiento de prerrequisito, lo que significa que el salto adelantado de material no es necesario para enten-
der el material posterior. Se proporcionan los hipervínculos para cada una de las flechas no secuenciales 
en la figura 0.1. Por ejemplo, se proporcionan hipervínculos que van del capítulo 1 al capítulo 6 y del ca-
pítulo 3 al 11. Para cada hipervínculo hacia el final (en los primeros capítulos), se le indica al lector hacia 
dónde podría saltar. Para cada hipervínculo hacia el final (en los últimos capítulos), se proporciona un 
icono del lado del texto meta que ayuda al lector a encontrar el lugar donde comenzó a leer.
Pedagogía
Iconos
 Elegancia de programa.
Indica que el texto asociado se relaciona con estilo de codificación del programa, legibili-
dad, mantenimiento, robustez y escalabilidad. La elegancia en un programa comprende estas 
cualidades.
 Resolución de problema.
Indica que el texto asociado tiene que ver con temas de resolución de problemas. Los comenta-
rios asociados con el icono intentan generalizar el material realzado en el texto adyacente.
 Errores comunes.
Indica que el texto asociado se relaciona con errores comunes.
 Hipervínculo meta.
Indica la meta final del hipervínculo.
 Eficiencia de programa.
Indica que el texto asociado se refiere a problemas de eficiencia en el programa.
•
•
•
•
00FrontMatter(i-xxxiv).indd xviii00FrontMatter(i-xxxiv).indd xviii 5/3/09 10:15:525/3/09 10:15:52
 Prólogo xix
Materiales de apoyo
Esta obra cuenta con valiosos complementos para fortalecer el proceso enseñanza-aprendizaje. Para ma-
yor información y políticas al respecto, contacte a su representante McGraw-Hill.
Agradecimientos
Cualquiera que haya escrito un libro puede atestiguar el esfuerzo largo y bien orquestado que se requiere 
para hacerlo. Dicho libro nunca puede ser el trabajo de una sola persona o de unas pocas. Los autores es-
§6.1-§6.8: Fundamentos
de POO
§6.2: Introdución a la POO
Capítulo 14: Manejo de excepciones
Capítulo 15: Archivos
Apéndice 8, Multithreads
§15.3-§15.4: Archivos
de texto E/S
Capítulo 4: Sentencias de control
Capítulo 5: Uso de métodos
preconstruidos
Capítulo 6: Programación orientada
a objetos
Capítulo 7: POO- Detalles adicionales
Capítulo 8: Ingeniería de software
Capítulo 9: Clases y miembros de clases
Capítulo 3: Fundamentos de Java
Capítulo 2: Algoritmos
y diseño
Capítulo 1: Introducción
Capítulo 11: Detalles de tipo y mecanismos
de código alterno
Capítulo 12: Agregación, composición
y herencia
Capítulo 13: Herencia y polimorfismo
Capítulo 16: Fundamentos de programación
GUI
Capítulo 10: Arreglos y lista de arreglos Apéndice 8, Recursión
§11.6-§11.12: Mecanismos
de código alterno
§11.1-§11.5:
 Detalles de tipos 
§10.1-§10.6:
 Arreglos
Capítulo 17: Programación GUI:
Distribución de componentes.
Componentes GUI adicionales
Figura 0.1 Dependencia de capítulos
00FrontMatter(i-xxxiv).indd xix00FrontMatter(i-xxxiv).indd xix 5/3/09 10:15:535/3/09 10:15:53
xx Prólogo
tamos en deuda con los integrantes del equipo de McGraw- Hill Higher Education,quienes siempre se 
mostraron confiados en su escritura, e invirtieron generosidad en ello.
Fue un placer haber trabajado con Alan Apt durante el periodo de revisión de dos años, quien pro-
porcionó una guía excelente en el diseño en varios largos problemas de diseño. También estamos agrade-
cidos por el esfuerzo incansable de Rebecca Olson. Rebecca realizó un tremendo trabajo de organización 
y de análisis del libro y de muchas revisiones del mismo. El auxilio durante las varias etapas de produc-
ción estuvo a cargo del administrador de proyectos Kay Brimeyer, y del diseñador Laurie Cansen. Tam-
bién deseamos expresar nuestro agradecimiento al resto del equipo editorial y de mercadotecnia, quienes 
ayudaron en las etapas finales: Raghu Srinivasan, publicista global; Kristine Tibbetts, director de desa-
rrollo; Heidi Newsom, asistente editorial; y Michael Weitz, director ejecutivo de mercadotecnia.
Todos los profesionales hemos encontrado, de manera absoluta, que la organización McGraw-Hill ha 
sido maravillosa para trabajar y apreciamos sus esfuerzos.
Queremos reconocer con aprecio los numerosos y valiosos comentarios, sugerencias y críticas cons-
tructivas y los elogios de muchos instructores que han revisado el libro. En particular:
William Allen, Instituto de Tecnología de Florida.
Robert Burton, Universidad Brigham Young.
Priscila Dodds, Colegio Georgia Perimeter.
Jeanne M. Douglas, Universidad de Vermont.
Dr. H.E. Dunsmore, Universidad Purdue.
Deena Engel, Universidad de Nueva York.
Michael N. Huhns, Universidad de Carolina del Sur.
Ibrahim Imam, Universidad de Louisville.
Andree Jacobson, Universidad de Nuevo México.
Lawrence King, Universidad de Texas, Dallas.
Mark Llewellyn, Universidad Central de Florida.
Blayne E. Mayfield, Universidad estatal de Oklahoma.
Mary McCollam, Universidad de Queens.
Hugh McGuire, Universidad estatal de Grand Valley.
Jeanne Milostan, Universidad Vanderbilt.
Shyamal Mitra, Universidad de Texas, Austin.
Benjamin B. Nystuen, Universidad de Colorado, Colorado Springs.
Richard E. Pattis, Universidad Carnegie Mellon.
Tom Stokke, Universidad de Dakota del Norte.
Ronald Taylor, Universidad estatal de Wright.
Timothy A. Terrill, Universidad de Buffalo, Universidad del estado de Nueva York.
Ping Wu, Dell Inc.
También deseamos agradecer a nuestros colegas Wen Hsin, Kevin Burger, John Cigas, Bob Cotter, 
Alice Capson, y Mark Adams por su ayuda en los cuestionarios informales, y a Barbara Kushan, Ed Tan-
kins, Mark Reith y Benny Phillips por sus pruebas en las clases. Y un agradecimiento muy especial al 
gramático sin igual Jeff Glauner, quien auxilió en los matices sutiles de la sintaxis en el idioma inglés.
Finalmente, agradecemos a los estudiantes, a aquellos que motivaron la escritura del libro, y a aque-
llos que nos brindaron retroalimentación y una búsqueda diligente de errores que impidieron a otros es-
tudiantes ganar puntos buenos en las tareas. En particular, a ustedes Aris Czamaske, Malalai Zalmai, 
Paul John, Joby John, Matt Thebo, Josh McKinzie, Carol Liberty, Adeeb Jarrah, y Virginia Maikweki.
Sinceramente,
John y Ray
00FrontMatter(i-xxxiv).indd xx00FrontMatter(i-xxxiv).indd xx 5/3/09 10:15:535/3/09 10:15:53
Una de las características de este libro son sus proyectos. Los temas de los proyectos abarcan seis am-
plias áreas académicas, como se resume a continuación:
Abreviatura Descripción Fácil Moderado Difícil Total
CC Ciencias de la computación y métodos numéricos 14 12 6 32
Administración Administración y contabilidad 10 10 3 23
Sociología Ciencias Sociales y Estadística 7 7 5 19
Mat. & Fís. Matemáticas y Física 9 5 3 17
Ingeniería Ingeniería y Arquitectura 3 7 5 15
Biol. & Ecol. Biología y Ecología 0 2 4 6
Total 43 43 26 112
La abreviatura en la primera columna será la que se utilice en una larga tabla que se presenta más 
adelante a manera de una breve identificación de un área académica en particular. Las cuatro columnas 
de la derecha en la tabla superior indican el número de proyectos en diversas categorías. Por supuesto, el 
número más alto de proyectos (32) ocurre en el área de Ciencias de la computación y métodos numéricos. 
Los 26 proyectos catalogados como fáciles y moderados en el área de CC son problemas de introducción 
a la programación. Los seis proyectos catalogados como difíciles proporcionan una discreta introduc-
ción a algunos temas avanzados, como operaciones con listas ligadas, operaciones con bases de datos y 
un templado simulado.
Además, existen 23 proyectos en el área de administración y contabilidad que incluyen cálculos fi-
nancieros mezclados, sencillos problemas de contabilidad y aplicaciones de contabilidad de costos. Exis-
ten 19 proyectos en las áreas de Ciencias sociales, que incluyen aplicaciones en Sociología y Ciencias 
políticas, así como experiencia general. Hay 17 proyectos de Física y Matemáticas, que incluyen aplica-
ciones tanto en mecánica clásica como en caótica. 15 proyectos en Ingeniería y Arquitectura, que inclu-
yen aplicaciones en calefacción y aire acondicionado (HVAC, por sus siglas en inglés), circuitos eléctricos 
y estructuras. Finalmente, seis proyectos en Biología y Ecología, que incluyen simulaciones realistas de 
crecimiento y presa-predador; aunque se ha asociado cada proyecto con un área académica, muchos 
de estos proyectos pueden pertenecer a otra distinta.
Debido a que muchos proyectos pertenecen a disciplinas fuera del área de Ciencias de la computa-
ción, no se espera que el lector promedio tenga conocimiento de estos “otros” temas. Por lo tanto, el 
planteamiento de los problemas se extenderá para dar explicación adicional sobre el tema y el problema; 
y a menudo se explicará cómo ir resolviendo el problema (en términos tutoriales). Por consiguiente, tra-
bajar en muchos de estos proyectos será como implementar soluciones computacionales para los clientes 
que no son en sí programadores, pero que entienden su problema y saben lo que quieren que el programa-
dor haga por ellos. Se le explicará el problema y cómo debe resolverse, pero se esperará que sea el pro-
gramador quien codifique el programa que lo resuelva.
Debido a que las explicaciones de los problemas frecuentemente toman mucho espacio de impresión, 
en lugar de presentarlos en el libro mismo, se pusieron en un sitio Web:
http://www.mhhe.com/dean
La siguiente tabla proporciona un resumen de lo que se tiene en el sitio Web. Esta tabla enlista todos los 
proyectos en una secuencia que concuerda con la secuencia del libro. La primera columna identifica el 
primer punto en el libro en el que el lector debe ser capaz de realizar el proyecto por capítulo y sección, 
en el formato: NúmerodeCapítulo.NúmerodeSección. La segunda columna es un número de proyecto 
único para el capítulo en cuestión. La tercera columna identifica el área académica primaria del proyec-
to con una abreviatura que se explica en la tabla que se presenta más arriba. La cuarta columna indica el 
número aproximado de páginas de código que contiene la solución del libro. La quinta columna indica la 
Resumen del proyecto
 xxi
00FrontMatter(i-xxxiv).indd xxi00FrontMatter(i-xxxiv).indd xxi 5/3/09 10:15:545/3/09 10:15:54
dificultad con relación al nivel de estudio en el cual se encuentra el estudiante. Por ejemplo, se puede ver 
que lo que se denomina “fácil” implica más páginas de código mientras se avanza en la lectura del libro. 
Las últimas dos columnas proporcionan un título y una breve descripción del proyecto.ii
Resumen del proyecto
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
2.7 1 Administración 0.6 Fácil Bono anual
(diagrama de flujo) 
Dibujar un diagrama de flujo 
que calcule un bono anual.
2.7 2 Administración 0.3 Fácil Bono anual (seudo-
código)
Escribir en seudocódigo un al-
goritmo que calcule un bono 
anual.
2.7 3 Administración 0.6 Fácil Número de timbres 
(diagrama de flujo)
Dibujarun diagrama de flujo 
para un algoritmo que calcule el 
número de timbres necesarios 
para un sobre. Utilizar un tim-
bre por cada 5 hojas de papel.
2.7 4 Administración 0.4 Fácil Número de timbres 
(seudocódigo)
Escribir en seudocódigo un al-
goritmo que calcule el número 
de timbres necesarios para un 
sobre. Utilizar un timbre por 
cada cinco hojas de papel.
2.7 5 Biol. & Ecol. 0.4 Fácil Cinco reinos (seudo-
código)
Escribir en seudocódigo un al-
goritmo que identifique un reino 
biológico a partir de una serie 
de características.
2.7 6 Mat. & Fís. 0.4 Fácil Velocidad del so-
nido (diagrama de 
flujo)
Dibujar un diagrama de flujo 
para un algoritmo que calcule la 
velocidad del sonido en un me-
dio particular.
2.7 7 Mat. & Fís. 0.4 Fácil Velocidad del so-
nido (seudocódigo)
Escribir en seudocódigo un al-
goritmo que calcule la velocidad 
del sonido en un medio particu-
lar.
2.7 8 Administración 0.6 Moderado Rendimiento del 
mercado de valores 
(diagrama de flujo)
Dibujar un diagrama de flujo 
para un algoritmo que imprima 
el tipo de mercado y su probabi-
lidad, dada una tasa de rendi-
miento en particular.
2.7 9 Administración 0.4 Moderado Rendimiento del 
mercado de valores 
(seudocódigo)
Escribir en seudocódigo un al-
goritmo que imprima el tipo de 
mercado y su probabilidad dada 
una tasa de rendimiento en par-
ticular.
2.7 10 Administración 0.3 Moderado Estado de cuenta 
bancario (seudocó-
digo)
Escribir en seudocódigo un al-
goritmo que determine el nú-
mero de años que transcurren 
hasta que el balance en un es-
tado de cuenta alcanza el millón 
de dólares.
2.7 11 Ingeniería 0.3 Moderado Terminación de ci-
clo por petición del 
usuario (diagrama 
de flujo) 
Escribir en seudocódigo un al-
goritmo que calcule el número 
de millas por galón para una se-
rie de entradas de millas y galo-
nes por parte del usuario.
xxii Resumen del proyecto
ii En la presente tabla se presentan las generalidades de los proyectos: título, descripción, etcétera. Sin embargo, al consultar el 
sitio Web, el lector encontrará los textos de dichos proyectos en idioma inglés.
00FrontMatter(i-xxxiv).indd xxii00FrontMatter(i-xxxiv).indd xxii 5/3/09 10:15:555/3/09 10:15:55
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
2.9 12 Ingeniería 0.5 Fácil Terminación de ci-
clo por petición del 
usuario (seudocó-
digo)
Escribir en seudocódigo un al-
goritmo que calcule el número 
de millas por galón para una se-
rie de entradas de millas y galo-
nes por parte del usuario.
2.9 13 Ingeniería 0.4 Moderado Terminación de ci-
clo por valor de un 
Sentinal (seudocó-
digo)
Escribir en seudocódigo un al-
goritmo que calcule la cantidad 
de millas por galón para una se-
rie de entradas de millas y galo-
nes por parte del usuario.
2.9 14 Ingeniería 0.3 Fácil Terminación de ci-
clo por conteo (seu-
docódigo)
Escribir en seudocódigo un al-
goritmo que calcule la cantidad 
de millas y galones introducidas 
por parte del usuario.
2.10 15 CC 0.4 Moderado Peso promedio (seu-
docódigo)
Escribir en seudocódigo un al-
goritmo que determine el peso 
promedio de un conjunto de ob-
jetos.
3.2 1 CC N.A. Fácil Experimentación 
Hola Mundo
Experimentar con el programa 
Hola Mundo para entender los 
significados de los típicos men-
sajes de error de compilación y 
de ejecución.
3.3 2 CC N.A. Fácil Investigación Estudiar las convenciones de 
código de Java.
3.3 3 CC N.A. Moderado Investigación Estudiar el apéndice 5 “Conven-
ciones de estilo de Java”.
3.16
3.23
4 Ingeniería 2.5 Difícil Análisis de arma-
dura
Dada la carga en el centro de un 
puente y el peso de todos los 
miembros, calcular la fuerza de 
compresión o tensión en cada 
miembro.
3.17 5 CC 1.0 Fácil Secuencia de co-
mandos 
Establecer la secuencia de co-
mandos y escribir un programa 
que ejecute dichos comandos.
3.17
3.23
6 CC 1.7 Moderado Cálculo de la veloci-
dad
Dado un conjunto de caracterís-
ticas de hardware y software, 
escribir un programa que deter-
mine el número de veces que 
corre un programa de cómputo.
3.17
3.23
7 Ingeniería 2.7 Moderado Carga HVAC Calcular las cargas de calefac-
ción y aire acondicionado para 
una residencia tradicional.
3.17
3.23
8 Sociología 3.25 Difícil Planeación de cam-
paña
Escribir un programa que ayude 
a organizar los estimados de vo-
tos, dinero y trabajo.
3.17
3.23
9 Ingeniería 2.7 Fácil Procesamiento de 
cadena de texto
Trazar un conjunto de operacio-
nes de procesamiento de cade-
nas de texto y escribir un pro-
grama que las implemente.
3.23 10 CC 1.2 Fácil Traspaso Desarrollar un algoritmo que 
traspase el valor en dos varia-
bles y escribir un programa que 
implemente dicho algoritmo.
 Resumen del proyecto xxiii
00FrontMatter(i-xxxiv).indd xxiii00FrontMatter(i-xxxiv).indd xxiii 5/3/09 10:15:565/3/09 10:15:56
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
3.23 11 Mat. & Fís. 1.0 Fácil Parámetros de un 
círculo
Escribir un programa que ge-
nere e imprima los valores rela-
cionados con un círculo.
3.23 12 Sociología 0.4 Fácil Cumpleaños número 
cien
Escribir un programa que soli-
cite al usuario introducir el día, 
mes y año de su nacimiento e 
imprima la fecha de su cum-
pleaños número 100.
4.3 1 Mat. & Fís. 1.7 Fácil Distancia de dete-
nido
Escribir un programa que deter-
mine si la distancia que lleva un 
vehículo es segura, dada la ve-
locidad del mismo y una fór-
mula que proporcione la distan-
cia requerida para que éste 
frene.
4.3
4.9
2 Ingeniería 1.9 Fácil Seguridad de colum-
nas.
Escribir un programa que deter-
mine si una columna estructural 
es suficientemente ancha para 
soportar la carga total esperada 
de la columna.
4.3 3 Administración 1.1 Fácil Política económica Escribir un programa que lea 
los valores de tasa de creci-
miento e inflación y despliegue 
la política económica recomen-
dada.
4.8 4 Administración 2.0 Moderado Estado de cuenta 
bancario
Escribir un programa que deter-
mine el número de años que tie-
nen que pasar hasta que el saldo 
en una cuenta bancaria alcance 
el millón de dólares.
4.9
4.12
5 CC 2.6 Difícil Juego de NIM Implementar el juego NIM. Ini-
ciar el juego con un número de 
piedras en una pila especificado 
por el usuario. El usuario y la 
computadora tendrán su turno 
para quitar una o dos piedras de 
la pila. El jugador que tome la 
última piedra pierde.
4.12 6 Mat. & Fís. 1.0 Fácil Triángulo Escribir un programa que ge-
nere un triángulo isósceles he-
cho con asteriscos, dado el ta-
maño del triángulo introducido 
por el usuario.
4.12 7 Sociología 0.8 Fácil Calendario maya Implementar un algoritmo que 
determine el número de Tzol-
kins y de Haabs en un calenda-
rio redondo.
4.12 8 CC 0.9 Fácil Validación de entra-
das
Implementar un algoritmo que 
repetidamente solicite valores 
que caigan dentro de un rango y 
calcule el promedio de entradas.
xxiv Resumen del proyecto
00FrontMatter(i-xxxiv).indd xxiv00FrontMatter(i-xxxiv).indd xxiv 5/3/09 10:15:575/3/09 10:15:57
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
4.14 9 Administración 2.6 Moderado Preparación de im-
puestos
Escribir un programa que
calcule los impuestos sobre el 
ingreso, haciendo uso de las si-
guientes reglas:
La cantidad de impuestos debi-
dos iguala el ingreso gravable las 
veces de la tasa de impuestos.
El ingreso gravable iguala al in-
greso bruto menos $1 000 para 
cada exención.
El impuesto sobre ingreso no 
puede ser menor a 0.
4.14 10 CC 1.7 Moderado Análisis de texto Escribir un programa que con-
vierta palabras a Pig Latin.1
5.3 1 Mat. & Fís. 1.2 Fácil Funciones trigono-
métricas
Escribir un programa de demos-
tración que solicite al usuario 
seleccionar una de las tres fun-
ciones inversas posibles: arcsen, 
arccos, oarccan y que intro-
duzca el radio trigonométrico. 
Debe generarse un resultado 
apropiado, con su diagnóstico.
5.3 2 Mat. & Fís. 0.7 Fácil Decibeles combina-
dos
Determinar el nivel de potencia 
acústica producido por la com-
binación de dos fuentes de so-
nido.
5.5 3 CC 1.5 Moderado Verificador de nom-
bre de variable
Escribir un programa que veri-
fique que el nombre de variable 
introducido por el usuario sea 
correcto; por ejemplo, si se 
tiene: 1) ilegal, 2) legal, pero es-
tilo pobre, o 3) buen estilo. Asu-
mir que los nombres de varia-
bles de “buen estilo” utilizan 
letras y dígitos únicamente y 
que utilizan una letra minúscula 
como primer carácter.
5.6 4 CC 1.0 Moderado Disección de nú-
mero telefónico
Implementar un programa que 
lea números telefónicos, y que 
para cada número, despliegue los 
componentes derivados del nú-
mero telefónico: código de país, 
código de área y número local.
5.6 5 CC 1.1 Difícil Disección de nú-
mero telefónico 
(versión robusta)
Implementar una versión más 
robusta del programa de número 
telefónico. Permitir números te-
lefónicos acortados, es decir, 
aquellos que tengan un solo 
grupo de dígitos y nada más, y 
números telefónicos que tengan 
sólo grupos de dígitos locales, 
un código de área y nada más.
 Resumen del proyecto xxv
1 Pig Latin es un juego de idioma usado principalmente en inglés. El Pig Latin lo usan los niños para divertirse o para conversar 
secretamente.
00FrontMatter(i-xxxiv).indd xxv00FrontMatter(i-xxxiv).indd xxv 5/3/09 10:15:575/3/09 10:15:57
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
5.8 6 Administración 1.0 Moderado Cálculo de valor 
presente neto
Escribir un programa que
calcule el valor presente neto de 
una inversión propuesta, dada 
una tasa de descuento y un con-
junto arbitrario de flujos de caja 
futuros.
6.4 1 Biol. & Ecol. 1.5 Moderado Observación de la 
germinación de una 
planta.
Escribir un programa que: 1) 
cree un objeto llamado árbol a 
partir de una clase MappleTree; 
2) llame a un método planta que 
grabe la plantación de la semi-
lla; 3) llame al método germinar 
que grabe la primera observa-
ción de una semilla en creci-
miento y el registro de su altura; 
4) llame a un método depósito-
Datos que despliegue los valo-
res actuales de todas las varia-
bles de instancia.
6.4 2 Administración 0.5 Fácil Cuenta bancaria Dado el código de una clase 
CuentaBancaria, generar un 
controlador que verifique dicha 
clase instanciando un objeto y 
llamando a sus métodos: set-
Cliente, setCuenta e ImprimeIn-
foCuenta.
6.8 3 Mat. & Fís. 1.5 Moderada Ecuación logística Ejercitar la ecuación logística: 
netX= PresentX + r x presentX 
x preentX x (1 – present x) / 
(máximo x), y r es un factor de 
crecimiento.
6.9 4 Mat. & Fís. 0.9 Fácil Círculo Dado el código para la clase 
DriverCírculo, escribir una 
clase Círculo que defina una va-
riable de instancia radio, un mé-
todo setRadio y un método im-
primeYCalculaDatosCírculo 
que utilice el radio del círculo 
para calcular e imprimir el diá-
metro del círculo, circunferen-
cia y área.
6.10 5 Ingeniería 2.0 Moderado Filtro digital Dada la fórmula para filtros 
“pasabajos Chebyshev” o “pasa-
bajos Butterworth”, con valores 
de parámetros apropiados, es-
cribir un programa que pida al 
usuario proporcionar una se-
cuencia de valores sin procesar 
y genere la salida filtrada co-
rrespondiente.
xxvi Resumen del proyecto
00FrontMatter(i-xxxiv).indd xxvi00FrontMatter(i-xxxiv).indd xxvi 5/3/09 10:15:585/3/09 10:15:58
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
6.10 6 Sociología 3.1 Difícil Máquina vendedora Escribir un programa que si-
mule la operación de una má-
quina vendedora. El programa 
debe leer la cantidad de dinero 
insertada en ésta, debe solicitar 
al usuario elegir un artículo, y 
después imprimir el cambio de-
vuelto al comprador.
6.12 7 Mat. & Fís. 1.1 Fácil Rectángulo Implementar una clase Rectán-
gulo que defina un rectángulo 
con variables de instancia longi-
tud y anchura, métodos de ac-
ceso y modificación, y un mé-
todo tipo booleano es cuadrado. 
6.13 8 Biol. & Ecol. 4.0 Difícil Dinámica Presa-de-
predador
Escribir un programa que mo-
dele una especie que pudiera ser 
ya sea un depredador o una 
presa o ambos. Correr una si-
mulación que incluya presa, de-
predador, y sustento renovable 
para la presa.
6.13 9 Mat. & Fís. 2.1 Moderado Guitarra mecánica Escribir un programa que si-
mule el movimiento de las cuer-
das de la guitarra.
7.5
7.9
1 CC 3.5 Difícil Lista ligada Dado el código para un contro-
lador, implementar una clase 
Receta que cree y mantenga una 
lista ligada de recetas. La asig-
nación de problema especifica 
todas las variables de instancia 
y métodos en diagramas de 
clase UML.
7.7 2 CC 2.5 Fácil Descripción de auto-
móvil
Utilizar una cadena de llamadas 
a métodos que despliegue las 
propiedades de automóviles.
7.7
7.9
3 Biol. & Ecol. 4.6 Difícil Ciclo de carbón Dado el código de un controla-
dor, escribir un par de clases 
para un programa que modele el 
ciclo de carbón en un ecosis-
tema. Utilizar dos clases genéri-
cas. Una clase, Entidad, define 
dos cosas. La otra clase, Rela-
ción, define interacciones.
7.8 4 CC 1.4 Fácil Dirección IP Implementar una clase Direc-
ciones IP con una cadena que 
contenga puntos decimales y un 
arreglo de cuatro octetos tipo 
int.
 Resumen del proyecto xxvii
00FrontMatter(i-xxxiv).indd xxvii00FrontMatter(i-xxxiv).indd xxvii 5/3/09 10:15:585/3/09 10:15:58
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
7.9 5 Mat. & Fís. 4.5 Moderado Manejador de frac-
ciones
Dado el método main de una 
clase driver, escribir una clase 
Fracción. Incluir los siguientes 
métodos de instancia: sumar, 
multiplicar, imprimir, impri-
mirComoDoble, y un método de 
asignación de valores para cada 
variable de instancia.
7.10 6 Ingeniería 2.8 Moderado Circuito eléctrico Escribir las clases ramal y nodo 
como elementos de un circuito 
eléctrico. Un ramal transmite 
energía a través de un resistor 
en serie con un inductor. Un 
nodo mantiene voltaje en un 
condensador conectado a tierra. 
El código del controlador se 
proporciona en la parte de asig-
nación del problema.
7.10 7 Administración 5.1 Difícil Contabilidad de cos-
tos
Escribir un programa orientado 
a objetos que realice la contabi-
lidad de costos en una planta 
manufacturera.
7.10 8 Sociología 6.4 Difícil Campaña política Escribir un programa que orga-
nice el estimado de votos, di-
nero y esfuerzo. Es una versión 
orientada a objetos del proyecto 
8 en el capítulo 3.
8.4 1 CC 1.6 Fácil Validación de en-
trada
Implementar un algoritmo que 
de forma repetida solicite al 
usuario que introduzca valores 
hasta que se caiga en un rango 
aceptable y calcule el promedio 
de entradas válidas. Ésta es una 
versión orientada a objetos del 
proyecto 8 en el capítulo 4.
8.4 2 Ingeniería 4.0 Difícil Carga HVAC Calcular las cargas de calefac-
ción y aire acondicionado para 
una residencia tradicional. Ésta 
es una versión orientada a obje-
tos de la versión del proyecto 7 
en el capítulo 3.
8.6 3 Sociología 2.6 Moderada Control de elevador Escribir un programa que si-
mule la operación de un eleva-
dor. Este programa debe simu-
lar lo que sucede cuando el 
usuario elige ir a un piso parti-
cular y cuando presiona el botón 
de alarma.
8.9 4 CC 2.0 Fácil Reestructuración de 
prototipo
Tomando como prototipo al 
programa CicloAnidadoRectán-
gulo de la figura 4.17 en la sec-
ción 4.12 y haciendo uso de la 
metodología arriba-abajo, rees-
tructurarlo en un formato de 
POO.
xxviii Resumen del proyecto
00FrontMatter(i-xxxiv).indd xxviii00FrontMatter(i-xxxiv).indd xxviii 5/3/09 10:15:595/3/09 10:15:59Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
9.3 1 Sociología 2.7 Fácil Clase Persona Definir una clase que simule la 
creación y el despliegue de ob-
jetos tipo Persona.
9.4 2 Sociología 2.7 Moderado Calificación de tarea Escribir un programa que ma-
neje las calificaciones escolares. 
Utilizar variables de instancia 
para los puntos máximos y mí-
nimos en una tarea en particu-
lar, y utilizar variables de clase 
para los puntos totales actuales 
y máximos de todas las tareas 
combinadas.
9.3 3 Sociología 3.9 Difícil Grado de aprobación 
política
Escribir un programa que deter-
mine la media y la desviación 
estándar de estadísticas senci-
llas.
9.4 4 Ingeniería 5.7 Difícil Entrada solar para 
colector solar y 
HVAC
Escribir un programa que man-
tenga el registro de la posición 
del Sol y que determine cuánta 
energía solar penetra en una 
ventana de vidrio en cualquier 
orientación, lugar y momento.
9.6 5 Administración 2.7 Moderado Cálculo del valor 
presente neto
Escribir un programa que
calcule el valor presente neto de 
una inversión propuesta, dada 
una tasa de descuento y un con-
junto arbitrario de flujos de caja 
futuros. Ésta es una versión 
orientada a objetos de la versión 
del proyecto 6 en el capítulo 5.
9.7 6 Mat. & Fís. 7.0 Difícil Problema de los tres 
cuerpos
Escribir un programa que mo-
dele el problema de los tres 
cuerpos en los cuales dos igua-
lan el tamaño del círculo lunar 
sobre la Tierra en diferentes ór-
bitas. Esto ejemplifica un movi-
miento dinámico caótico.
10.4 1 Biol. & Ecol. 5.0 Difícil Proyecciones demo-
gráficas
Escribir un programa que pro-
yecte la población mundial fu-
tura y la riqueza individual en 
función de las tasas de fertili-
dad y tasas de extracción, y que 
incluya los efectos de impuestos 
y gasto gubernamentales.
10.6 2 CC 3.3 Moderado Simulador de lanza-
miento de dados
Escribir un programa que si-
mule el lanzamiento de un par 
de dados y que imprima un his-
tograma mostrando las frecuen-
cias de los posibles resultados.
 Resumen del proyecto xxix
00FrontMatter(i-xxxiv).indd xxix00FrontMatter(i-xxxiv).indd xxix 5/3/09 10:15:595/3/09 10:15:59
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
10.6 3 CC 5.1 Difícil Escalamiento simu-
lado (el problema 
del vendedor via-
jero)
Escribir un programa que uti-
lice escalamiento simulado para 
resolver el muy complicado pro-
blema de encontrar el itinerario 
más corto para visitar todas las 
principales ciudades del mundo 
exactamente una vez.
10.7 4 Sociología 2.1 Fácil Lista de invitados a 
una fiesta
Escribir un programa que cree 
un objeto Fiesta, agregue invita-
dos a la fiesta, y que imprima 
información de la misma.
10.9 5 Sociología 2.7 Fácil Contador de vocales Escribir un programa que 
cuente el número de vocales 
mayúsculas y minúsculas en lí-
neas de texto completas intro-
ducidas por el usuario y que im-
prima un resumen del número 
de vocales contadas.
10.9 6 Mat. & Fís. 7.6 Difícil Solución de ecuacio-
nes algebraicas si-
multáneas
Escribir un programa que car-
gue un conjunto de ecuaciones 
algebraicas simultáneas en arre-
glos de dos dimensiones y que 
resuelva las mismas por el mé-
todo de descomposición de 
abajo a arriba.
10.9 7 Mat. & Fís. 2.5 Moderado Regresión lineal Escribir un programa que
calcule la regresión linear, tra-
zando una línea recta en una se-
rie de datos aleatorios.
10.10 8 Administración 3.4 Moderado Recibos de compra Escribir un programa que regis-
tre los recibos de compra del 
negocio, despliegue informa-
ción del recibo actual y registre 
los pagos a dichas compras.
10.11 9 Sociología 1.1 Fácil Baraja Escribir una clase que utilice 
una lista de arreglos para repar-
tir barajas.
10.13 10 Administración 1.9 Fácil Tienda de libros Escribir un programa que mo-
dele el almacenamiento y recu-
peración de libros con base en 
el título.
11.3 1 Biol. & Ecol. 5.5 Difícil Juego de la vida Modelar un “juego” que simule 
la reproducción y crecimiento 
en una malla de celdas rectan-
gulares. Una X indica vida. Una 
celda muerta vuelve a vivir 
cuando tiene exactamente tres 
celdas vecinas vivas. Una celda 
viva permanece viva sólo 
cuando quedan dos o tres celdas 
vecinas vivas.
xxx Resumen del proyecto
00FrontMatter(i-xxxiv).indd xxx00FrontMatter(i-xxxiv).indd xxx 5/3/09 10:16:005/3/09 10:16:00
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
11.3 2 CC 0.7 Fácil Tabla ASCCI Escribir un programa que im-
prima una tabla con los 128 ca-
racteres del código ASCII. La 
tabla debe imprimirse en un 
formato de ocho columnas se-
paradas.
11.7 3 CC 0.8 Fácil Cola circular Un programa determinado im-
plementa una cola circular. 
Reescribir los métodos Está-
Lleno, borrar y mostrarCola, 
mediante el reemplazo de los 
operadores condicionales, asig-
naciones incrustadas y operado-
res incrementales incrustados 
con un código más simple y en-
tendible.
11.7 4 Mat. & Fís. 4.1 Moderado Interpolación poli-
nómica
Ajustar un polinomio a los pun-
tos en cualquier parte de un par 
de puntos en un arreglo de datos 
y utilizar esto para estimar el 
valor en una posición entre el 
par de puntos.
11.9 5 CC 1.4 Moderado Operaciones lógicas 
a nivel de bit
Utilizar el corrimiento aritmé-
tico y lógico para desplegar los 
valores binarios de ciertos nú-
meros.
11.11 6 CC 3.5 Moderado Ordenamiento de 
pila
Utilizar el algoritmo de ordena-
miento de pila para ordenar da-
tos. (Éste es un algoritmo ro-
busto y no de ordenamiento de 
lugares con una complejidad 
computacional de NLogN.)
12.2 1 Administración 1.7 Fácil Cuentas de ahorro Calcular y desplegar los balan-
ces de las cuentas de ahorro ha-
ciendo uso del interés com-
puesto.
12.4 2 Mat. & Fís. 13.4 Difícil Funciones estadísti-
cas
Escribir un programa que ge-
nere valores para las funciones 
Gama, Gama incompleta, Beta, 
Beta incompleta y estadística 
binomial.
12.5 3 Administración 3.3 Fácil Programa de carro Haciendo uso de herencia, es-
cribir un programa que man-
tenga un rastreo de los autos 
nuevos y usados.
12.10 4 Sociología 16.4 Difícil Juego de corazones Escribir un programa que si-
mule el juego de corazones bá-
sico con un número arbitrario 
de jugadores. Dar a todos los ju-
gadores un conjunto igual de es-
trategias que optimicen sus 
oportunidades de ganar.
 Resumen del proyecto xxxi
00FrontMatter(i-xxxiv).indd xxxi00FrontMatter(i-xxxiv).indd xxxi 5/3/09 10:16:005/3/09 10:16:00
Cap./
Secc.
Proyecto Área académica
Páginas
soluc.
Difi cultad Título Breve descripción
13.7 1 Administración 9.0 Difícil Inventario en una 
tienda de abarrotes
Escribir un programa de inven-
tarios que mantenga un registro 
de varios artículos comestibles. 
Utilizar diferentes métodos en 
la clase Inventario para procesar 
objetos heterogéneos y artículos 
alimenticios de marca. Almace-
nar todos los objetos juntos en 
una estructura ArrayList.
13.7 2 Ingeniería 8.7 Difícil Análisis de circuitos 
eléctricos
Escribir un programa que
calcule las corrientes en estado 
estacionario en un circuito eléc-
trico de dos mallas que tenga 
una combinación arbitraria de 
resistores discretos, condensa-
dores de capacidad y fuentes en 
las terminales del circuito. In-
cluir métodos que ejecuten 
suma, resta, multiplicación y di-
visión de números complejos 
(números con partes reales e 
imaginarias).
13.8 3 Administración 5.4 Moderado Nómina Utilizar polimorfismo para es-
cribir un programa de nómina 
que calcule e imprima la nó-
mina semanal de una compañía. 
Asumir tres tipos empleados: 
por hora, asalariados y asalaria-
dos con comisión. Asumir que 
cada tipo de empleado obtiene 
su pago utilizando una fórmula 
diferente. Utilizar una clase 
abstracta como base.
13. 8 4 Administración

Continuar navegando