Transcript of Introduccion a la programacion con JAVA 1 edicion dean
1. 00FrontMatter(i-xxxiv).indd ii00FrontMatter(i-xxxiv).indd ii
5/3/09 10:15:405/3/09 10:15:40
2. JAVA CON Introduccin a la programacin
00FrontMatter(i-xxxiv).indd i00FrontMatter(i-xxxiv).indd i 5/3/09
10:15:375/3/09 10:15:37
3. 00FrontMatter(i-xxxiv).indd ii00FrontMatter(i-xxxiv).indd ii
5/3/09 10:15:405/3/09 10:15:40
4. John S. Dean Park University Raymond H. Dean University of
Kansas Revisin tcnica: Carlos Villegas Quezada Universidad
Iberoamericana, Ciudad de Mxico JAVA CON Introduccin a la
programacin MXICO BOGOT BUENOS AIRES CARACAS GUATEMALA MADRID NUEVA
YORK SAN JUAN SANTIAGO SO PAULO AUCKLAND LONDRES MILN 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
5. Director Higher Education: Miguel ngel Toledo Castellanos
Director editorial: Ricardo Alejandro del Bosque Alayn Editor
sponsor: Pablo Eduardo Roig Vzquez Coordinadora editorial: Marcela
Rocha Martnez Editor de desarrollo: Edmundo Carlos Ziga Gutirrez
Supervisor de produccin: Zeferino Garca Garca Traductor: Hugo
Villagmez Velzquez INTRODUCCIN A LA PROGRAMACIN CON JAVA Primera
edicin Prohibida la reproduccin total o parcial de esta obra, por
cualquier medio, sin la autorizacin escrita del editor. DERECHOS
RESERVADOS 2009 respecto a la primera edicin en espaol por
McGRAW-HILL/INTERAMERICANA EDITORES, S.A. DE C.V. A Subsidiary of
The McGraw-Hill Companies, Inc. Prolongacin Paseo de la Reforma
1015, Torre A Pisos 16 y 17, Colonia Desarrollo Santa Fe, Delegacin
lvaro Obregn C.P. 01376, Mxico, D. F. Miembro de la Cmara Nacional
de la Industria Editorial Mexicana, Reg. Nm. 736 ISBN:
978-970-10-7278-3 Traducido de la primera edicin 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 Mxico Printed in Mexico 0123456789
098765432109 Educacin 00FrontMatter(i-xxxiv).indd
iv00FrontMatter(i-xxxiv).indd iv 5/3/09 10:15:415/3/09
10:15:41
6. 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
7. Acerca de los autores vi John Dean es catedrtico del
Departamento de Informacin y Ciencias de la Computacin en la Uni-
versidad Park. Obtuvo un grado de maestro en ciencias de la
computacin 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 tecnologas
en la Web: JavaScript, JavaServer Pages y servlets. Ha impartido un
sinnmero de cursos de ciencias de la computacin, incluyendo
programa- cin con Java y programacin con Java basada en la Web.
Raymond Dean es profesor emrito en ingeniera y ciencias de la
computacin 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
artculos cientficos y posee 21 patentes estadounidenses.
Actualmente es investigador del programa Climate and Energy del
Land Institute, que reivindica la conservacin detallada de la
energa y el reemplazo del consumo de com- bustibles de origen fsil
y nuclear por energa elica y almacenamiento de energa elctrica.
00FrontMatter(i-xxxiv).indd vi00FrontMatter(i-xxxiv).indd vi 5/3/09
10:15:425/3/09 10:15:42
8. vii Contenido Prlogo xi Resumen del proyecto xxi CA P T U LO
1 Introduccin a las computadoras y la programacin 1 1.1.
Introduccin 1 1.2. Terminologa de hardware 2 1.3. Desarrollo del
programa 8 1.4. Cdigo fuente 10 1.5. Compilacin de cdigo fuente en
cdigo 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 diseo 23 2.1. Introduccin
23 2.2. Salida 24 2.3. Variables 25 2.4. Operadores y sentencias de
asignacin 26 2.5. Entrada 26 2.6. Flujo de control y diagrama de
ujo 27 2.7. Sentencias if 28 2.8. Bucles 32 2.9. Tcnicas de
terminacin de un ciclo 34 2.10. Bucles anidados 37 2.11. Trazado 39
2.12. Otros formatos de seudocdigo y aplicaciones 42 2.13.
Resolucin de problema: administracin de activos (opcional) 44 CA P
T U LO 3 Fundamentos de Java 51 3.1. Introduccin 52 3.2. Programa
Tengo un sueo 52 3.3. Comentarios y legibilidad 52 3.4. El
encabezado de la clase 54 3.5. El encabezado del mtodo main 55 3.6.
Parntesis de llave 56 3.7. System.out.println 56 3.8. Compilacin y
ejecucin 58 3.9. Identicadores 58 3.10. Variables 59 3.11.
Sentencias de asignacin 60 3.12. Sentencias de inicializacin 61
3.13. Tipos de datos numricos: int, long, float, double 62 3.14.
Constantes 64 3.15. Operadores aritmticos 67 3.16. Evaluacin de
expresiones y precedencia de operadores 69 3.17. Ms operadores:
incremento, decremento y asignacin compuesta 71 3.18. Rastreo 73
3.19. Conversin 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.
Introduccin 97 4.2. Condiciones y valores boolean 98 4.3.
Sentencias if 99 4.4. Operador lgico && 102 4.5. Operador
lgico || 105 4.6. Operador lgico ! 107 4.7. Sentencia switch 108
4.8. Ciclo while 112 4.9. Ciclo do 115 4.10. Ciclo for 116 4.11.
Resolucin del problema de qu ciclo utilizar 120 4.12. Ciclos
anidados 121 4.13. Variables boolean 123 4.14. Validacin de
entradas 125 4.15. Resolucin de problemas con lgica boolean
(opcional) 127 00FrontMatter(i-xxxiv).indd
vii00FrontMatter(i-xxxiv).indd vii 5/3/09 10:15:435/3/09
10:15:43
9. CA P T U LO 5 Utilizacin de mtodos preconstruidos 137 5.1.
Introduccin 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. Mtodos de String 150 5.7. Salida formateada con
el mtodo printf 156 5.8. Resolucin de problemas con nmeros
aleatorios (opcional) 159 5.9. Apartado GUI: diseo de imgenes,
lneas, rectngulos y valos en applets de Java (opcional) 164 CA P T
U LO 6 Programacin orientada a objetos 176 6.1. Introduccin 176
6.2. Introduccin a la programacin 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. Mtodos especializados: de acceso, de
mutacin y boolean 202 6.13. Resolucin de problemas con simulacin
(opcional) 205 CA P T U LO 7 Programacin orientada a objetos:
detalles adicionales 220 7.1. Introduccin 220 7.2. Creacin de
objetos: un anlisis 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 mtodos 233
7.7. Mtodos sobrecargados 235 7.8. Constructores 238 7.9.
Constructores sobrecargados 244 7.10. Resolucin de problemas con
diversas clases 247 CA P T U LO 8 Ingeniera de software 263 8.1.
Introduccin 263 8.2. Convenciones de estilo para codicar 264 8.3.
Mtodos de ayuda 272 8.4. Encapsulamiento (con variables de
instancia y variables locales) 274 8.5. Filosofa de diseo 277 8.6.
Diseo arriba-abajo 278 8.7. Diseo ascendente 287 8.8. Diseo basado
en casos 288 8.9. Mejoramiento iterativo 289 8.10. Mtodo
controlador de fusin en una clase controlada 291 8.11. Acceso de
variables de instancia sin la utilizacin del this 292 8.12.
Resolucin de problemas con el API de la clase Calendar (opcional)
294 8.13. Apartado GUI: resolucin de problemas mediante tarjetas
CRC (opcional) 296 CA P T U LO 9 Clases con miembros de clase 308
9.1. Introduccin 308 9.2. Variables de clase 309 9.3. Mtodos de
clase 311 9.4. Constantes nombradas 314 9.5. Escritura de su propia
clase Utility 316 9.6. Utilizacin de miembros de clase en conjuncin
con miembros de instancia 317 9.7. Resolucin de problemas con
miembros de clase y miembros de instancia en una clase de listas
ligadas (opcional) 320 CA P T U LO10 Arreglos y listas de arreglos
331 10.1. Introduccin 331 10.2. Fundamentos de arreglos 332 10.3.
Declaracin y creacin de arreglos 335 10.4. Propiedad length en un
arreglo y arreglos parcialmente llenos 337 10.5. Copia de un
arreglo 339 10.6. Resolucin de problemas mediante casos con
arreglos 341 10.7. Bsqueda 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. 10.12. Almacenamiento de primitivos en una lista de
arreglos 370 10.13. Ejemplo de lista de arreglo utilizando objetos
annimos y el ciclo for-each 372 10.14. Lista de arreglo versus
arreglos estndar 378 CA P T U LO 11 Detalles de tipo y mecanismos
de codificacin alternativa 388 11.1. Introduccin 388 11.2. Tipos
entero y de punto otante 389 11.3. Tipo char y el conjunto de
caracteres ASCII 392 11.4. Conversiones de tipo 395 11.5. Modos
prejo/sujo para operadores de incremento/ decremento 397 11.6.
Asignaciones insertadas 400 11.7. Expresiones del operador
condicional 401 11.8. Revisin de evaluacin de expresiones 403 11.9.
Evaluacin de cortocircuito 405 11.10. Declaracin vaca 407 11.11.
Declaracin 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 LO12 Agregacin, composicin y herencia 422
12.1. Introduccin 422 12.2. Composicin y agregacin 423 12.3.
Revisin de herencia 428 12.4. Implementacin de jerarqua
Persona/Empleado/ TiempoCompleto 433 12.5. Constructores en una
subclase 435 12.6. Sobreposicin de mtodos 436 12.7. Utilizacin de
jerarqua Persona/Empleado/ TiempoCompleto 438 12.8. El modicador de
acceso final 439 12.9. Utilizacin de herencia con agregacin y
composicin 439 12.10. Prctica de diseo con un ejemplo de juego de
cartas 440 12.11. Resolucin de problema con clases de asociacin
(opcional) 447 CA P T U LO13 Herencia y polimorfismo 455 13.1.
Introduccin 455 13.2. La clase Objeto y promocin automtica de tipos
456 13.3. El mtodo equals 456 13.4. El mtodo toString 460 13.5.
Polimorsmo y vinculacin dinmica 464 13.6. Asignaciones entre clases
en una jerarqua de clases 468 13.7. Polimorsmo con arreglos 469
13.8. Mtodos y clases abstractas 474 13.9. Interfaces 477 13.10. El
modicador de acceso protected 483 13.11. Apartado GUI: grcas en
tres dimensiones (opcional) 485 CA P T U LO14 Manejo de excepciones
497 14.1. Introduccin 497 14.2. Revisin de excepciones y mensajes
de excepcin 498 14.3. Utilizacin de los bloques try y catch para
manejo de llamadas peligrosas a mtodos 498 14.4. Ejemplo de trazado
lineal 501 14.5. Detalles de los bloques try 503 14.6. Dos
categoras 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 mtodo getMessage 512 14.10. Bloques
catch mltiples 513 14.11. Comprensin de los mensajes de excepcin
516 14.12. Utilizacin de throws para posponer el catch 519 14.13.
Apartado GUI y solucin de problemas: ejemplo revisitado de trazado
de lneas (opcional) 521 CA P T U LO15 Archivos 537 15.1.
Introduccin 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 LO16 Fundamentos de programacin GUI 576 16.1. Introduccin 577
16.2. Fundamentos de programacin 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
11. 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 annimas 589 16.12.
Componente JButton 592 16.13. Ventanas de dilogo y clase
JOptionPane 597 16.14. Distincin entre mltiples eventos 600 16.15.
Utilizacin de getActionCommand para distincin entre mltiples
eventos 602 16.16. Color 602 16.17. Cmo se agrupan las clases GUI?
606 16.18. Oyentes de ratn y de imgenes (opcional) 609 CA P T U
LO17 Programacin GUI: distribucin de componentes, componentes GUI
adicionales 620 17.1. Introduccin 621 17.2. Diseo GUI y gestores de
distribucin 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. Resolucin de problema: triunfo en el juego de
gato (opcional) 634 17.8. Gestores de distribucin 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 aplicacin de tarea 652 17.16. Ms componentes de
Swing 658 Apndices Apndice 1 Conjunto de caracteres Unicode/ASCII
con cdigos hexadecimales 667 Apndice 2 Precedencia de operadores
670 Apndice 3 Palabras reservadas en Java 672 Apndice 4 Paquetes
676 Apndice 5 Convenciones de estilo de codicacin en Java 680
Apndice 6 Javadoc 691 Apndice 7 Diagramas UML 697 Apndice 8
Recursin 702 Apndice 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
12. En este libro haremos un viaje al interior del divertido y
excitante mundo de la programacin de compu- tadoras. Durante este
viaje, proporcionaremos diversas prcticas para la solucin de
problemas. Despus de todo, los buenos programadores necesitan ser
buenos resolviendo problemas. Mostraremos cmo im- plementar la
solucin de problemas con programas Java. Proporcionaremos una
amplia gama de ejem- plos, algunos cortos y enfocados a un simple
concepto, algunos largos y ms orientados al mundo real. Presentamos
el material en un formato convencional y fcil 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
Introduccin a la programacin o un curso secuencia, en el que no se
requiere experiencia previa en programacin. Adems, tambin se dirige
a personas con experiencia en la industria de la programacin, a
estu- diantes de nivel universitario con algn tipo de experiencia
en programacin, y a todo aquel que necesite y desee aprender Java.
Estos segundos lectores pueden omitir la lectura de los primeros
captulos concer- nientes a conceptos generales de programacin, y
dirigir su atencin a las caractersticas de Java que di- fieren de
otros lenguajes que conocen. En particular, debido a que C++ y Java
son lenguajes de programacin 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 programacin, el texto,
reiteramos, es adecuado, pues en l no se requiere de algn tipo de
conocimiento previo. Finalmente, el texto se dirige a estudiantes
de nivel bachillerato y lectores fuera del mbito acad- mico sin
experiencia en programacin. 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 nm. 1: Resolucin de
problemas La resolucin de problemas es una habilidad bsica que todo
programador debe poseer. Se ensea la re- solucin de problemas
haciendo nfasis en dos elementos: el desarrollo de algoritmos y el
diseo de pro- gramas. nfasis en el desarrollo de algoritmos En el
captulo 2, se introduce al lector en el desarrollo de algoritmos
mediante el uso del seudocdigo, en lugar de usar la sintaxis del
lenguaje Java. Con el uso del seudocdigo, 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 resolucin de pro- blemas no triviales el estudiante
obtiene una primera apreciacin de la creatividad, la lgica y la
organizacin. Sin esta apreciacin, el estudiante tiende a aprender
la sintaxis de Java mediante memori- zacin por repeticin; pero, si
cuenta con ella, el estudiante aprender la sintaxis de Java de una
manera ms rpida, pues se sentir motivado para hacerlo. Adems, podr
cumplir con los ejercicios asignados de una manera bastante
sencilla debido a que cuenta con experiencia previa en resolucin de
problemas mediante el uso del seudocdigo. Prlogo xi 1
Inevitablemente para el seudocdigo se usa un estilo particular,
aunque de manera repetida se recalca que otros estilos de seu-
docdigo tambin son vlidos en la medida en que contengan el
significado idneo. El estilo de seudocdigo que se utiliza aqu es
una combinacin de descripcin libre para tareas de alto nivel y de
comandos ms especficos para tareas de bajo nivel. Para los comandos
especficos, se usan palabras en ingls natural ms que smbolos
crpticos. Se ha escogido un estilo de seudocdigo intuitivo a fin de
dar la bienvenida a nuevos programadores, y estructurado para
permitir la lgica del programa. 00FrontMatter(i-xxxiv).indd
xi00FrontMatter(i-xxxiv).indd xi 5/3/09 10:15:485/3/09
10:15:48
13. xii Prlogo A partir del captulo 3, se har uso de Java para
la resolucin de ejemplos de desarrollo de algorit- mos; sin
embargo, para la mayora de los problemas involucrados, se har uso
de cuando en cuando del seudocdigo de alto nivel para describir
soluciones de primera mano. La utilizacin del seudocdigo permite a
los lectores olvidarse de los detalles de la sintaxis y enfocar su
atencin en la parte de la solu- cin del algoritmo. nfasis en el
diseo del programa La solucin del problema va ms all del simple
desarrollo del algoritmo, implica tambin encontrar la mejor
implementacin del algoritmo. Esto es el diseo del programa. El
diseo del programa es extrema- damente importante, sa es la razn de
que se ocupe mucho tiempo en ello. En este libro no slo se da una
solucin, tambin se explica el proceso para llegar a la misma. Por
ejemplo, se explica cmo elegir entre las diferentes estructuras de
control, cmo se divide un mtodo en ms de uno, cmo elegir la clase
ms apropiada, cmo elegir entre miembros de instancia y miembros de
clase, y cmo determinar las re- laciones haciendo uso de la
herencia y la composicin. Se reta al estudiante a que encuentre las
imple- mentaciones ms elegantes de una tarea en particular. Se
dedica un captulo completo al diseo de un programa (captulo 8,
Ingeniera de software). En este captulo, se proporciona una amplia
visin de las convenciones en el estilo de programacin, modu-
larizacin y encapsulamiento. Tambin, se describen las diferentes
estrategias alternativas de diseo (arriba-abajo, ascendente, basado
en casos y mejora iterativa). Secciones de resolucin de problemas A
menudo se trata el tema de la resolucin de problemas (desarrollo
del algoritmo y diseo del programa) en el flujo natural de los
conceptos explicados, pero tambin se explicar en secciones
dedicadas espec- ficamente a ello. En cada seccin de resolucin de
problemas se presenta una situacin que contiene un problema sin
resolver, y en seguida la solucin de ste, que intenta simular la
resolucin de problemas, tal como se hara en la vida real, mediante
una estrategia de diseo iterativo. Se presenta una solucin inme-
diata, se analiza sta, y despus 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
deberamos 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 esperara en un
caso en que un programador requiriera trabajar en la resolu- cin de
un problema, en diversas ocasiones, antes de encontrar la mejor
solucin. Mecanismos adicionales en la resolucin de problemas Se
incluyen ejemplos de resolucin de problemas y consejos para la
solucin de los mismos en el texto (no nicamente en los captulos 2 y
8 o en las secciones de solucin de problemas). Es necesario
destacar que se incluye un cuadro de resolucin de problemas, con un
icono y un breve tip al lado del mismo, un texto que contiene el
ejemplo con la solucin 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 nm. 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 hbito de introducir el cdigo sin entenderlo de manera
adecuada o, peor an, 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
ms 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
14. Prlogo xiii Como primer ejemplo de esta filosofa, se cubren
las formas simples de programacin GUI (siglas en ingls de Graphical
User Interface, interfaz grfica del usuario) en los primeros
captulos, en una seccin aparte, y en seguida se cubren formas de
programacin grfica ms complejas en captulos ms avanza- dos
(especficamente, 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 programacin GUI. En opinin de los
autores, esa estrategia es un error, pues el manejo de eventos
mediante programacin grfica requiere de madurez en el manejo de la
programacin. Como se incluye hasta el final del libro, los lectores
tienen mayor capa- cidad para entenderla. Ejemplos con trazado de
resultado Para escribir un cdigo de manera eficaz, es imperativo
entenderlo de manera adecuada. Se ha visto que la presentacin paso
a paso de los resultados de ejecucin del cdigo 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
programacin, a menudo se presenta una simulacin de los resultados
del mismo, de una manera meticulosa. La tcnica de trazado que se
utiliza en el libro, ilustra el proceso completo que los programa-
dores emplean al llevar a cabo la depuracin. Es una alternativa a
la secuencia de pantallas que seran generadas por los depuradores
en un software IDE (siglas en ingls de Integrated Development
Environ- ment, ambiente de desarrollo integrado). Entrada y salida
En las secciones opcionales de tips en GUI y en los captulos 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 mtodos estndar System.out.print y
System.out.printf. Objetivo general nm. 3: Mundo real Muy a menudo
los estudiantes en los salones de clase de hoy en da y los
practicantes de la industria pre- fieren aprender mediante la
prctica, enfocando su atencin al mundo real. Para satisfacer esta
necesidad, este libro incluye: Herramientas de compilacin. Ejemplos
de programas completos. Gua prctica en diseo de programa. Gua de
estilo de codificacin con base en los estndares de la industria.
Notacin UML para diagramas de relacin de clases. Asignaciones de
tareas de proyectos prcticos. Herramientas de compilacin No es
necesaria una herramienta de compilacin especfica, el lector puede
escoger la herramienta de compilacin que prefiera. Si no tiene
preferencia por algn compilador en especfico, podra 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 mtodo E/S con
llamadas al mtodo JOptionPane. 00FrontMatter(i-xxxiv).indd
xiii00FrontMatter(i-xxxiv).indd xiii 5/3/09 10:15:505/3/09
10:15:50
15. xiv Prlogo Para obtener los compiladores completos, el
lector puede visitar el sitio Web del libro:i http://www.
mhhe.com/dean, buscar los vnculos apropiados de compilador(es) y
bajarlos gratuitamente. Ejemplos de programas completos Adems de
proporcionar fragmentos de cdigo para ilustrar conceptos
especficos, el libro contiene va- rios ejemplos de programas
completos. Con programas completos, el estudiante ser capaz: 1) de
ver cmo el cdigo analizado se enlaza con el resto del programa y 2)
probar el cdigo, corrindolo. Convenciones de estilo de codificacin
En el libro tambin se incluyen tips de codificacin. El estilo de
los tips se basa en las convenciones de codificacin de Sun
(http://java.sun.com/docs/codeconv/) y en prcticas de la industria.
En el apndice 5, se proporciona una referencia completa a las
convenciones de estilo de codificacin del cdigo y un ejemplo
asociado de un programa que ilustra dichas convenciones. Notacin
UML El lenguaje de modelado universal (UML, por sus siglas en
ingls) se ha convertido en el estndar 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 notacin UML para representar
grficamente clases y relaciones entre clases. Para aquellos
interesados en ms detalles, en el apndice 7 se proporciona notacin
UML adicional. Problemas de tarea Se proporcionan problemas de
tarea que son ilustrativos y prcticos, y se explican de manera muy
clara. Los problemas tienen un rango de dificultad que va de
sencillos a retadores, y estn agrupados en tres categoras:
preguntas de revisin, ejercicios, y proyectos. Se incluyen
preguntas de revisin y ejercicios al final de cada captulo, y se
proporcionan proyectos en el sitio Web del libro. Las preguntas de
revisin por lo regular tienen respuestas cortas y respuestas que
estn en el libro. Los formatos de las preguntas son: de respuesta
corta, opcin mltiple, cierto/falso, llenar los espacios en blanco,
transcripcin de programa, depuracin, escribir un fragmento de
cdigo. Cada pregunta de revi- sin se basa en una pequea parte del
captulo. 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, transcripcin, depura- cin, y escritura de un fragmento de
cdigo. Los ejercicios son la clave del prerrequisito ms importante
de la seccin numerada del captulo, pero a menudo integran conceptos
de varias partes del captulo. 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 solucin de problemas y aplique
lo que ha aprendido en el captulo. Estos proyectos a menudo
incluyen partes opcionales, que significan retos para los
estudiantes ms talentosos. Los proyectos son la clave del
prerrequisito ms importante del nmero de seccin en el captulo,
pero, por lo regular, integran conceptos provenientes de diversas
partes del captulo. Una caracterstica 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 tpicas y a menudo tambin ex- tremas en
situaciones lmite. Proyectos del rea acadmica Para hacer ms
atractivos los proyectos y mostrar cmo las tcnicas de programacin
del captulo en curso se pudieran aplicar a reas de inters
diferente, se toman contenidos de diferentes reas acadmicas: i Es
importante mencionar que el sitio Web del libro se encuentra
totalmente en ingls: tutoriales, proyectos propuestos y tareas,
presentaciones y otros temas, por lo cual en este libro, al hablar
de alguna seccin en el sitio Web, se presenta el ttulo en ingls,
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
16. Prlogo xv Ciencias de la computacin y mtodos numricos.
Administracin y contabilidad. Ciencias sociales y Estadstica.
Matemticas y Fsica. Ingeniera y Arquitectura. Biologa y Ecologa.
Los proyectos de rea acadmica 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
acadmica en particular, en ocasiones se ampla el planteamiento del
problema para explicar algunos conceptos especiales en esa rea
acadmica. En la mayora de los proyectos de rea acadmica no se
requiere que los estudiantes hayan comple- tado los proyectos de
los captulos previos; esto es, los proyectos no se construyen uno
al otro. As pues, el instructor puede asignar libremente los
proyectos sin preocuparse por los prerrequisitos de los proyec-
tos. En algunos casos, un proyecto repite un proyecto del captulo
previo con un enfoque diferente. El profesor puede usar esta
repeticin 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 acadmica especfica (el
instructor puede asignar proyectos del rea acadmica relevante).
Cuando un curso tiene estudiantes con diferentes perfiles (el
instructor puede solicitar a los estudiantes que elijan proyectos
de su propia rea acadmica, o bien puede ignorar los lmites del rea
acadmica y simplemente asignar los proyectos que llamen ms su
atencin). Para ayudar al lector a decidir en qu proyectos trabajar,
se incluye en este libro una seccin de Re- sumen de proyectos
despus del prlogo; en ste se enlistan todos los proyectos por
captulo, y para cada uno se especifica: La seccin asociada dentro
del captulo. El rea acadmica. Su longitud y dificultad. Una breve
descripcin. Despus de utilizar la seccin del Resumen de proyectos
para obtener una idea acerca de en qu pro- yectos podra gustarle al
lector trabajar, es conveniente consultar el sitio Web del libro
para obtener des- cripciones completas del mismo. Organizacin En
este libro, los autores guan a los lectores en tres importantes
metodologas de programacin: progra- macin estructurada, programacin
orientada a objetos (POO), y programacin orientada a eventos. Para
cubrir la parte de programacin estructurada, se introducen
conceptos bsicos tales como variables y operadores, sentencias
condicionales, y sentencias de control. Para cubrir el tema de POO,
primero se muestra a los lectores cmo llamar a los mtodos
precompilados de las API (siglas en ingls de Applica- tion Program
Interface, bibliotecas de interfaces de programacin aplicada) de
Sun. Despus, se introdu- cen conceptos de POO, tales como clase,
objeto, variable de instancia y mtodos de instancia. Los captulos
sobre manejo de excepciones y archivos son una transicin a la
programacin de la interfaz grfica del usuario (GUI). Se cubre de
manera importante el manejo de eventos en programacin GUI en los
dos ltimos captulos. El contenido y secuencia que aqu se promueven
hacen capaz al estudiante de desarrollar sus habili- dades desde
una base de programacin fundamental. Para lograr este primer
enfoque fundamental, el li- bro inicia con un mnimo de conceptos y
detalles. Despus, 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
17. xvi Prlogo aade detalles posteriores. Se ha evitado
sobrecargar los primeros captulos difiriendo ciertos detalles menos
importantes hasta los ltimos captulos. Apartado GUI Muchos
programadores encuentran divertida la programacin GUI. Como tal, la
programacin GUI puede ser una herramienta motivacional para
mantener el inters y compromiso del lector. sa es la ra- zn de que
se incluyan secciones grficas a lo largo de la obra, desde el
primer captulo. A estas seccio- nes se les llama Apartado GUI. Los
lectores que no tengan tiempo para introducirse en el apartado GUI,
no tienen ningn problema; cualquier seccin del apartado GUI puede
omitirse, ya que dichos te- mas son independientes del material que
se trata ms adelante. Captulo 1 El captulo 1 inicia con una
explicacin de los trminos bsicos de computacin: cules son los
compo- nentes del hardware, qu es el cdigo fuente, qu es el cdigo
objeto, etc. Tambin en este captulo se describe el lenguaje de
programacin que se utilizar en el resto del libro: Java.
Finalmente, se propor- ciona al estudiante una rpida visin del
clsico programa Hola mundo, fundamental en el inicio de un
aprendizaje de cualquier lenguaje de programacin. Se explica cmo
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 ingls).
Captulo 2 En el captulo 2 se presentan tcnicas de desarrollo en la
resolucin de problemas con nfasis en el diseo de algoritmos. En la
implementacin de soluciones algortmicas se utilizan herramientas
genricas (diagramas de flujo y seudocdigo), dando mayor peso al
seudocdigo. Como parte de la explicacin del diseo de algoritmos, se
describen tcnicas de programacin estructurada. A fin de que el
estudiante aprecie los detalles de la semntica, se muestra cmo
trazar los algoritmos. Captulos 3-5 Se presentan tcnicas de
programacin estructurada mediante el uso de Java. En el captulo 3
se descri- ben las bases de la programacin secuencial: variables,
entradas/salidas, sentencias de asignacin y lla- madas a mtodos
sencillos. En el captulo 4 se describe el flujo de programacin no
secuencial: sentencia if, sentencia switch, y sentencias de
control. En el captulo 5 se explican los mtodos con ms detalle y se
explica al lector cmo utilizar mtodos preconstruidos en la
biblioteca de API de Java. En los tres captu- los, se ensea diseo
de algoritmos mediante la resolucin de problemas y la escritura de
programas con la nueva sintaxis de Java introducida. Captulos 6-8
En el captulo 6 se introducen los elementos bsicos de la POO en
Java. Esto incluye la implementacin de clases, y la implementacin
de mtodos y variables dentro de estas clases. Se utilizan diagramas
de clase de UML y tcnicas de control de flujos en programacin
orientada a objetos para ilustrar dichos conceptos. En el captulo 7
se proporcionan detalles adicionales de la programacin orientada a
objetos. Se ex- plica cmo las variables referenciadas son
asignadas, cmo se comprueba su igualdad y cmo pasar ar- gumentos a
un mtodo. Se cubre la sobrecarga de mtodos y constructores.
Mientras que el arte del diseo de programas y la resolucin de
problemas de ciencias de la compu- tacin se desarrollan a lo largo
del libro, en el captulo 8 se enfocan estos aspectos en el contexto
de la POO. El captulo inicia con un tratamiento organizado al
estilo de programacin. Se describe la mayora de los paradigmas de
programacin: diseo arriba-abajo, diseo ascendente, utilizacin de
software pre- construido para mdulos de bajo nivel, y uso de
prototipos. Captulo 9 Algunos libros de Java ensean cmo implementar
miembros de clase antes de ensear cmo implemen- tar miembros de
instancia. Con ese mtodo, 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
18. Prlogo xvii nera inapropiada, y esa prctica es difcil de
romper despus, cuando finalmente el tema de los mtodos de instancia
se ha cubierto. La prctica de programacin propiamente dicha, seala
que los practicantes (incluidos los programadores novatos) deberan
implementar miembros de instancia en mayor cantidad que miembros de
clase. As pues, se ensea cmo implementar miembros de instancia
desde un principio y se pospone la implementacin de miembros de
clases hasta el captulo 9. Captulo 10 En el captulo 10 se describen
las diferentes formas de almacenar datos relacionados. Se presentan
los fundamentos de arreglos y muchas aplicaciones de importancia
hechas con arreglos: bsqueda, ordena- miento, y construccin de
histogramas. Se presentan conceptos ms avanzados de arreglos, como
la uti- lizacin de arreglos de dos dimensiones y arreglos de
objetos. Finalmente, se habla de una forma ms poderosa de arreglos:
la lista de arreglos (ArrayList). Captulo 11 Desde un principio, el
estudiante debe involucrarse en actividades relacionadas con la
resolucin de pro- blemas. Cubrir con minuciosidad los detalles de
la sintaxis puede distraernos de este objetivo. Por lo tanto, se
pasarn por alto algunos detalles de importancia menor sobre la
sintaxis y se regresar a ellos en el captulo 11. En el captulo 11
se proporcionan ms detalles de temas tales como: Los tipos
primitivos byte y short. El conjunto de caracteres Unicode.
Conversin de tipos. Modo posfijo vs. prefijo para los operadores de
incremento y decremento. El operador condicional. Evaluacin en
corto circuito. Captulo 12-13 En los captulos 12 y 13 se describen
las relaciones entre clases. Se dedican dos captulos 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
relacin de clases a profundidad y se proporcionan numerosos
ejemplos. En el captulo 12 se habla de los temas de agregacin,
composicin y herencia. En el captulo 13 se tratan con ms detalle
aspectos de la herencia, como la clase de objeto, el polimorfismo,
clases abstractas, e interfaces. Captulos 14-15 Se cubre el manejo
de excepciones en el captulo 14 y el de archivos en el 15. Se habla
del manejo de excep- ciones antes que del de archivos debido a que
el cdigo de manejo de archivos hace uso del de manejo de
excepciones; por ejemplo, el abrir un archivo requiere que se
realice la verificacin de alguna excepcin. Captulos 16-17 Se trata
el tema del manejo de eventos con programacin GUI al final del
libro en los captulos 16 y 17. Al aprender sobre el manejo de
eventos mediante la programacin GUI en una etapa posterior, el
estu- diante es capaz de aprovechar mejor sus complejidades
inherentes. Apndices La mayora de los apndices cubren material de
referencia, tales como la tabla de caracteres ASCII y la tabla de
precedencia de operadores; sin embargo, en los ltimos dos apndices
se cubre material avan- zado de Java: recursin 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 tambin quiera una
pronta introduccin a la POO. Se considera que el orden es el ms
ade- 00FrontMatter(i-xxxiv).indd xvii00FrontMatter(i-xxxiv).indd
xvii 5/3/09 10:15:525/3/09 10:15:52
19. xviii Prlogo cuado y eficaz para aprender cmo 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 construccin. La figura 0.1 ilustra dicha
flexi- bilidad al mostrar la dependencia entre captulos y, an ms
importante, la no dependencia de captulos. Por ejemplo, la flecha
entre los captulos 3 y 4 significa que el captulo 3 debe ser ledo
antes del captulo 4. Y la ausencia de flecha entre los captulos 1 y
2 significa que la lectura del captulo 1 se puede omitir. A
continuacin se presentan algunas oportunidades de cambio en la
secuencia mostradas en la fi- gura 0.1: El lector puede omitir el
captulo 1 (Introduccin a las computadoras y programacin). Para una
pronta introduccin a la POO, el lector puede leer la seccin de
introduccin a la POO en el captulo 6 despus de haber ledo el
captulo 1. Y puede aprender sobre sintaxis y semntica en la POO en
el captulo 7 despus de haber finalizado con los fundamentos de Java
en el captulo 3. Para una prctica adicional de las secuencias de
control, el lector puede aprender sobre arreglos en el captulo 10
despus de haber finalizado la lectura de las secuencias de control
en el captulo 4. El lector puede omitir el captulo 15 (archivos).
Nota. En la figura 0.1, la flecha discontinua conecta el captulo 3
con el 15. Se utiliza una flecha con l- neas discontinuas para
indicar que la conexin 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 captulo 3 sobre
los fundamentos de Java e inmediatamente pasar al captulo 15,
seccin 15.3 y 15.4 para E/S en archivos de texto. Con un poco de
esfuerzo, sern 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 cdigo que no
ser completamente entendible para alguien que viene del captulo 3.
Para utilizar el cdigo de E/S de archivos de texto, debern tratarlo
como a una plantilla. En otras palabras, utilizarn el cdigo a pesar
de que sean incapaces de entenderlo. Para apoyar la flexibilidad
del orden de contenido, el libro contiene hipervnculos. Un
hipervncu- lo es un salto adelantado de un lugar del libro a otro
distinto. Los saltos son vlidos en trminos 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 hipervnculos para cada una de las flechas no
secuenciales en la figura 0.1. Por ejemplo, se proporcionan
hipervnculos que van del captulo 1 al captulo 6 y del ca- ptulo 3
al 11. Para cada hipervnculo hacia el final (en los primeros
captulos), se le indica al lector hacia dnde podra saltar. Para
cada hipervnculo hacia el final (en los ltimos captulos), se
proporciona un icono del lado del texto meta que ayuda al lector a
encontrar el lugar donde comenz a leer. Pedagoga Iconos Elegancia
de programa. Indica que el texto asociado se relaciona con estilo
de codificacin del programa, legibili- dad, mantenimiento, robustez
y escalabilidad. La elegancia en un programa comprende estas
cualidades. Resolucin de problema. Indica que el texto asociado
tiene que ver con temas de resolucin 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. Hipervnculo meta.
Indica la meta final del hipervnculo. 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
20. Prlogo xix Materiales de apoyo Esta obra cuenta con
valiosos complementos para fortalecer el proceso
enseanza-aprendizaje. Para ma- yor informacin y polticas 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: Introducin a la POO
Captulo 14: Manejo de excepciones Captulo 15: Archivos Apndice 8,
Multithreads 15.3-15.4: Archivos de texto E/S Captulo 4: Sentencias
de control Captulo 5: Uso de mtodos preconstruidos Captulo 6:
Programacin orientada a objetos Captulo 7: POO- Detalles
adicionales Captulo 8: Ingeniera de software Captulo 9: Clases y
miembros de clases Captulo 3: Fundamentos de Java Captulo 2:
Algoritmos y diseo Captulo 1: Introduccin Captulo 11: Detalles de
tipo y mecanismos de cdigo alterno Captulo 12: Agregacin,
composicin y herencia Captulo 13: Herencia y polimorfismo Captulo
16: Fundamentos de programacin GUI Captulo 10: Arreglos y lista de
arreglos Apndice 8, Recursin 11.6-11.12: Mecanismos de cdigo
alterno 11.1-11.5: Detalles de tipos 10.1-10.6: Arreglos Captulo
17: Programacin GUI: Distribucin de componentes. Componentes GUI
adicionales Figura 0.1 Dependencia de captulos
00FrontMatter(i-xxxiv).indd xix00FrontMatter(i-xxxiv).indd xix
5/3/09 10:15:535/3/09 10:15:53
21. xx Prlogo 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
revisin de dos aos, quien pro- porcion una gua excelente en el
diseo en varios largos problemas de diseo. Tambin estamos agrade-
cidos por el esfuerzo incansable de Rebecca Olson. Rebecca realiz
un tremendo trabajo de organizacin y de anlisis del libro y de
muchas revisiones del mismo. El auxilio durante las varias etapas
de produc- cin estuvo a cargo del administrador de proyectos Kay
Brimeyer, y del diseador Laurie Cansen. Tam- bin 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 organizacin McGraw-Hill ha
sido maravillosa para trabajar y apreciamos sus esfuerzos. Queremos
reconocer con aprecio los numerosos y valiosos comentarios,
sugerencias y crticas cons- tructivas y los elogios de muchos
instructores que han revisado el libro. En particular: William
Allen, Instituto de Tecnologa 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 Mxico. 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.
Tambin 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 gramtico sin igual Jeff Glauner,
quien auxili en los matices sutiles de la sintaxis en el idioma
ingls. Finalmente, agradecemos a los estudiantes, a aquellos que
motivaron la escritura del libro, y a aque- llos que nos brindaron
retroalimentacin y una bsqueda 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
22. Una de las caractersticas de este libro son sus proyectos.
Los temas de los proyectos abarcan seis am- plias reas acadmicas,
como se resume a continuacin: Abreviatura Descripcin Fcil Moderado
Difcil Total CC Ciencias de la computacin y mtodos numricos 14 12 6
32 Administracin Administracin y contabilidad 10 10 3 23 Sociologa
Ciencias Sociales y Estadstica 7 7 5 19 Mat. & Fs. Matemticas y
Fsica 9 5 3 17 Ingeniera Ingeniera y Arquitectura 3 7 5 15 Biol.
& Ecol. Biologa y Ecologa 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 ms adelante a manera de una breve
identificacin de un rea acadmica en particular. Las cuatro columnas
de la derecha en la tabla superior indican el nmero de proyectos en
diversas categoras. Por supuesto, el nmero ms alto de proyectos
(32) ocurre en el rea de Ciencias de la computacin y mtodos
numricos. Los 26 proyectos catalogados como fciles y moderados en
el rea de CC son problemas de introduccin a la programacin. Los
seis proyectos catalogados como difciles proporcionan una discreta
introduc- cin a algunos temas avanzados, como operaciones con
listas ligadas, operaciones con bases de datos y un templado
simulado. Adems, existen 23 proyectos en el rea de administracin y
contabilidad que incluyen clculos 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 Sociologa y Ciencias polticas, as como
experiencia general. Hay 17 proyectos de Fsica y Matemticas, que
incluyen aplica- ciones tanto en mecnica clsica como en catica. 15
proyectos en Ingeniera y Arquitectura, que inclu- yen aplicaciones
en calefaccin y aire acondicionado (HVAC, por sus siglas en ingls),
circuitos elctricos y estructuras. Finalmente, seis proyectos en
Biologa y Ecologa, que incluyen simulaciones realistas de
crecimiento y presa-predador; aunque se ha asociado cada proyecto
con un rea acadmica, 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- cin, 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 explicacin adicional sobre el tema y el problema; y a
menudo se explicar cmo ir resolviendo el problema (en trminos
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 cmo 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 impresin, 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 captulo
y seccin, en el formato: NmerodeCaptulo.NmerodeSeccin. La segunda
columna es un nmero de proyecto nico para el captulo en cuestin. La
tercera columna identifica el rea acadmica primaria del proyec- to
con una abreviatura que se explica en la tabla que se presenta ms
arriba. La cuarta columna indica el nmero aproximado de pginas de
cdigo que contiene la solucin 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
23. dificultad con relacin al nivel de estudio en el cual se
encuentra el estudiante. Por ejemplo, se puede ver que lo que se
denomina fcil implica ms pginas de cdigo mientras se avanza en la
lectura del libro. Las ltimas dos columnas proporcionan un ttulo y
una breve descripcin del proyecto.ii Resumen del proyecto Cap./
Secc. Proyecto rea acadmica Pginas soluc. Dificultad Ttulo Breve
descripcin 2.7 1 Administracin 0.6 Fcil Bono anual (diagrama de
flujo) Dibujar un diagrama de flujo que calcule un bono anual. 2.7
2 Administracin 0.3 Fcil Bono anual (seudo- cdigo) Escribir en
seudocdigo un al- goritmo que calcule un bono anual. 2.7 3
Administracin 0.6 Fcil Nmero de timbres (diagrama de flujo) Dibujar
un diagrama de flujo para un algoritmo que calcule el nmero de
timbres necesarios para un sobre. Utilizar un tim- bre por cada 5
hojas de papel. 2.7 4 Administracin 0.4 Fcil Nmero de timbres
(seudocdigo) Escribir en seudocdigo un al- goritmo que calcule el
nmero de timbres necesarios para un sobre. Utilizar un timbre por
cada cinco hojas de papel. 2.7 5 Biol. & Ecol. 0.4 Fcil Cinco
reinos (seudo- cdigo) Escribir en seudocdigo un al- goritmo que
identifique un reino biolgico a partir de una serie de
caractersticas. 2.7 6 Mat. & Fs. 0.4 Fcil 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. & Fs. 0.4 Fcil Velocidad del so- nido
(seudocdigo) Escribir en seudocdigo un al- goritmo que calcule la
velocidad del sonido en un medio particu- lar. 2.7 8 Administracin
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 Administracin 0.4 Moderado Rendimiento del
mercado de valores (seudocdigo) Escribir en seudocdigo un al-
goritmo que imprima el tipo de mercado y su probabilidad dada una
tasa de rendimiento en par- ticular. 2.7 10 Administracin 0.3
Moderado Estado de cuenta bancario (seudoc- digo) Escribir en
seudocdigo un al- goritmo que determine el n- mero de aos que
transcurren hasta que el balance en un es- tado de cuenta alcanza
el milln de dlares. 2.7 11 Ingeniera 0.3 Moderado Terminacin de ci-
clo por peticin del usuario (diagrama de flujo) Escribir en
seudocdigo un al- goritmo que calcule el nmero de millas por galn
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: ttulo, descripcin,
etctera. Sin embargo, al consultar el sitio Web, el lector
encontrar los textos de dichos proyectos en idioma ingls.
00FrontMatter(i-xxxiv).indd xxii00FrontMatter(i-xxxiv).indd xxii
5/3/09 10:15:555/3/09 10:15:55
24. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 2.9 12 Ingeniera 0.5 Fcil Terminacin de ci-
clo por peticin del usuario (seudoc- digo) Escribir en seudocdigo
un al- goritmo que calcule el nmero de millas por galn para una se-
rie de entradas de millas y galo- nes por parte del usuario. 2.9 13
Ingeniera 0.4 Moderado Terminacin de ci- clo por valor de un
Sentinal (seudoc- digo) Escribir en seudocdigo un al- goritmo que
calcule la cantidad de millas por galn para una se- rie de entradas
de millas y galo- nes por parte del usuario. 2.9 14 Ingeniera 0.3
Fcil Terminacin de ci- clo por conteo (seu- docdigo) Escribir en
seudocdigo 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- docdigo) Escribir en seudocdigo un al- goritmo
que determine el peso promedio de un conjunto de ob- jetos. 3.2 1
CC N.A. Fcil Experimentacin Hola Mundo Experimentar con el programa
Hola Mundo para entender los significados de los tpicos men- sajes
de error de compilacin y de ejecucin. 3.3 2 CC N.A. Fcil
Investigacin Estudiar las convenciones de cdigo de Java. 3.3 3 CC
N.A. Moderado Investigacin Estudiar el apndice 5 Conven- ciones de
estilo de Java. 3.16 3.23 4 Ingeniera 2.5 Difcil Anlisis de arma-
dura Dada la carga en el centro de un puente y el peso de todos los
miembros, calcular la fuerza de compresin o tensin en cada miembro.
3.17 5 CC 1.0 Fcil 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 Clculo de la veloci- dad Dado un
conjunto de caracters- ticas de hardware y software, escribir un
programa que deter- mine el nmero de veces que corre un programa de
cmputo. 3.17 3.23 7 Ingeniera 2.7 Moderado Carga HVAC Calcular las
cargas de calefac- cin y aire acondicionado para una residencia
tradicional. 3.17 3.23 8 Sociologa 3.25 Difcil Planeacin de cam-
paa Escribir un programa que ayude a organizar los estimados de vo-
tos, dinero y trabajo. 3.17 3.23 9 Ingeniera 2.7 Fcil 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 Fcil 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
25. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 3.23 11 Mat. & Fs. 1.0 Fcil Parmetros de
un crculo Escribir un programa que ge- nere e imprima los valores
rela- cionados con un crculo. 3.23 12 Sociologa 0.4 Fcil Cumpleaos
nmero cien Escribir un programa que soli- cite al usuario
introducir el da, mes y ao de su nacimiento e imprima la fecha de
su cum- pleaos nmero 100. 4.3 1 Mat. & Fs. 1.7 Fcil Distancia
de dete- nido Escribir un programa que deter- mine si la distancia
que lleva un vehculo es segura, dada la ve- locidad del mismo y una
fr- mula que proporcione la distan- cia requerida para que ste
frene. 4.3 4.9 2 Ingeniera 1.9 Fcil 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 Administracin 1.1 Fcil Poltica econmica Escribir un
programa que lea los valores de tasa de creci- miento e inflacin y
despliegue la poltica econmica recomen- dada. 4.8 4 Administracin
2.0 Moderado Estado de cuenta bancario Escribir un programa que
deter- mine el nmero de aos que tie- nen que pasar hasta que el
saldo en una cuenta bancaria alcance el milln de dlares. 4.9 4.12 5
CC 2.6 Difcil Juego de NIM Implementar el juego NIM. Ini- ciar el
juego con un nmero de piedras en una pila especificado por el
usuario. El usuario y la computadora tendrn su turno para quitar
una o dos piedras de la pila. El jugador que tome la ltima piedra
pierde. 4.12 6 Mat. & Fs. 1.0 Fcil Tringulo Escribir un
programa que ge- nere un tringulo issceles he- cho con asteriscos,
dado el ta- mao del tringulo introducido por el usuario. 4.12 7
Sociologa 0.8 Fcil Calendario maya Implementar un algoritmo que
determine el nmero de Tzol- kins y de Haabs en un calenda- rio
redondo. 4.12 8 CC 0.9 Fcil Validacin 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
26. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 4.14 9 Administracin 2.6 Moderado Preparacin
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 exencin. El impuesto sobre ingreso no puede ser
menor a 0. 4.14 10 CC 1.7 Moderado Anlisis de texto Escribir un
programa que con- vierta palabras a Pig Latin.1 5.3 1 Mat. &
Fs. 1.2 Fcil Funciones trigono- mtricas Escribir un programa de
demos- tracin que solicite al usuario seleccionar una de las tres
fun- ciones inversas posibles: arcsen, arccos, o arccan y que
intro- duzca el radio trigonomtrico. Debe generarse un resultado
apropiado, con su diagnstico. 5.3 2 Mat. & Fs. 0.7 Fcil
Decibeles combina- dos Determinar el nivel de potencia acstica
producido por la com- binacin 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 dgitos
nicamente y que utilizan una letra minscula como primer carcter.
5.6 4 CC 1.0 Moderado Diseccin de n- mero telefnico Implementar un
programa que lea nmeros telefnicos, y que para cada nmero,
despliegue los componentes derivados del n- mero telefnico: cdigo
de pas, cdigo de rea y nmero local. 5.6 5 CC 1.1 Difcil Diseccin de
n- mero telefnico (versin robusta) Implementar una versin ms
robusta del programa de nmero telefnico. Permitir nmeros te-
lefnicos acortados, es decir, aquellos que tengan un solo grupo de
dgitos y nada ms, y nmeros telefnicos que tengan slo grupos de
dgitos locales, un cdigo de rea y nada ms. Resumen del proyecto xxv
1 Pig Latin es un juego de idioma usado principalmente en ingls. El
Pig Latin lo usan los nios 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
27. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 5.8 6 Administracin 1.0 Moderado Clculo de
valor presente neto Escribir un programa que calcule el valor
presente neto de una inversin propuesta, dada una tasa de descuento
y un con- junto arbitrario de flujos de caja futuros. 6.4 1 Biol.
& Ecol. 1.5 Moderado Observacin de la germinacin de una planta.
Escribir un programa que: 1) cree un objeto llamado rbol a partir
de una clase MappleTree; 2) llame a un mtodo planta que grabe la
plantacin de la semi- lla; 3) llame al mtodo germinar que grabe la
primera observa- cin de una semilla en creci- miento y el registro
de su altura; 4) llame a un mtodo depsito- Datos que despliegue los
valo- res actuales de todas las varia- bles de instancia. 6.4 2
Administracin 0.5 Fcil Cuenta bancaria Dado el cdigo de una clase
CuentaBancaria, generar un controlador que verifique dicha clase
instanciando un objeto y llamando a sus mtodos: set- Cliente,
setCuenta e ImprimeIn- foCuenta. 6.8 3 Mat. & Fs. 1.5 Moderada
Ecuacin logstica Ejercitar la ecuacin logstica: netX= PresentX + r
x presentX x preentX x (1 present x) / (mximo x), y r es un factor
de crecimiento. 6.9 4 Mat. & Fs. 0.9 Fcil Crculo Dado el cdigo
para la clase DriverCrculo, escribir una clase Crculo que defina
una va- riable de instancia radio, un m- todo setRadio y un mtodo
im- primeYCalculaDatosCrculo que utilice el radio del crculo para
calcular e imprimir el di- metro del crculo, circunferen- cia y
rea. 6.10 5 Ingeniera 2.0 Moderado Filtro digital Dada la frmula
para filtros pasabajos Chebyshev o pasa- bajos Butterworth, con
valores de parmetros 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
28. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 6.10 6 Sociologa 3.1 Difcil Mquina vendedora
Escribir un programa que si- mule la operacin de una m- quina
vendedora. El programa debe leer la cantidad de dinero insertada en
sta, debe solicitar al usuario elegir un artculo, y despus imprimir
el cambio de- vuelto al comprador. 6.12 7 Mat. & Fs. 1.1 Fcil
Rectngulo Implementar una clase Rectn- gulo que defina un rectngulo
con variables de instancia longi- tud y anchura, mtodos de ac- ceso
y modificacin, y un m- todo tipo booleano es cuadrado. 6.13 8 Biol.
& Ecol. 4.0 Difcil Dinmica 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- mulacin que incluya
presa, de- predador, y sustento renovable para la presa. 6.13 9
Mat. & Fs. 2.1 Moderado Guitarra mecnica Escribir un programa
que si- mule el movimiento de las cuer- das de la guitarra. 7.5 7.9
1 CC 3.5 Difcil Lista ligada Dado el cdigo para un contro- lador,
implementar una clase Receta que cree y mantenga una lista ligada
de recetas. La asig- nacin de problema especifica todas las
variables de instancia y mtodos en diagramas de clase UML. 7.7 2 CC
2.5 Fcil Descripcin de auto- mvil Utilizar una cadena de llamadas a
mtodos que despliegue las propiedades de automviles. 7.7 7.9 3
Biol. & Ecol. 4.6 Difcil Ciclo de carbn Dado el cdigo de un
controla- dor, escribir un par de clases para un programa que
modele el ciclo de carbn en un ecosis- tema. Utilizar dos clases
genri- cas. Una clase, Entidad, define dos cosas. La otra clase,
Rela- cin, define interacciones. 7.8 4 CC 1.4 Fcil Direccin 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
29. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 7.9 5 Mat. & Fs. 4.5 Moderado Manejador
de frac- ciones Dado el mtodo main de una clase driver, escribir
una clase Fraccin. Incluir los siguientes mtodos de instancia:
sumar, multiplicar, imprimir, impri- mirComoDoble, y un mtodo de
asignacin de valores para cada variable de instancia. 7.10 6
Ingeniera 2.8 Moderado Circuito elctrico Escribir las clases ramal
y nodo como elementos de un circuito elctrico. Un ramal transmite
energa a travs de un resistor en serie con un inductor. Un nodo
mantiene voltaje en un condensador conectado a tierra. El cdigo del
controlador se proporciona en la parte de asig- nacin del problema.
7.10 7 Administracin 5.1 Difcil Contabilidad de cos- tos Escribir
un programa orientado a objetos que realice la contabi- lidad de
costos en una planta manufacturera. 7.10 8 Sociologa 6.4 Difcil
Campaa poltica Escribir un programa que orga- nice el estimado de
votos, di- nero y esfuerzo. Es una versin orientada a objetos del
proyecto 8 en el captulo 3. 8.4 1 CC 1.6 Fcil Validacin 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 vlidas. sta es una
versin orientada a objetos del proyecto 8 en el captulo 4. 8.4 2
Ingeniera 4.0 Difcil Carga HVAC Calcular las cargas de calefac- cin
y aire acondicionado para una residencia tradicional. sta es una
versin orientada a obje- tos de la versin del proyecto 7 en el
captulo 3. 8.6 3 Sociologa 2.6 Moderada Control de elevador
Escribir un programa que si- mule la operacin 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 botn de alarma. 8.9
4 CC 2.0 Fcil Reestructuracin de prototipo Tomando como prototipo
al programa CicloAnidadoRectn- gulo de la figura 4.17 en la sec-
cin 4.12 y haciendo uso de la metodologa 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:59
30. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 9.3 1 Sociologa 2.7 Fcil Clase Persona
Definir una clase que simule la creacin y el despliegue de ob-
jetos tipo Persona. 9.4 2 Sociologa 2.7 Moderado Calificacin de
tarea Escribir un programa que ma- neje las calificaciones
escolares. Utilizar variables de instancia para los puntos mximos y
m- nimos en una tarea en particu- lar, y utilizar variables de
clase para los puntos totales actuales y mximos de todas las tareas
combinadas. 9.3 3 Sociologa 3.9 Difcil Grado de aprobacin poltica
Escribir un programa que deter- mine la media y la desviacin
estndar de estadsticas senci- llas. 9.4 4 Ingeniera 5.7 Difcil
Entrada solar para colector solar y HVAC Escribir un programa que
man- tenga el registro de la posicin del Sol y que determine cunta
energa solar penetra en una ventana de vidrio en cualquier
orientacin, lugar y momento. 9.6 5 Administracin 2.7 Moderado
Clculo del valor presente neto Escribir un programa que calcule el
valor presente neto de una inversin propuesta, dada una tasa de
descuento y un con- junto arbitrario de flujos de caja futuros. sta
es una versin orientada a objetos de la versin del proyecto 6 en el
captulo 5. 9.7 6 Mat. & Fs. 7.0 Difcil Problema de los tres
cuerpos Escribir un programa que mo- dele el problema de los tres
cuerpos en los cuales dos igua- lan el tamao del crculo lunar sobre
la Tierra en diferentes r- bitas. Esto ejemplifica un movi- miento
dinmico catico. 10.4 1 Biol. & Ecol. 5.0 Difcil Proyecciones
demo- grficas Escribir un programa que pro- yecte la poblacin
mundial fu- tura y la riqueza individual en funcin de las tasas de
fertili- dad y tasas de extraccin, 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
31. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 10.6 3 CC 5.1 Difcil 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 ms corto para visitar todas las
principales ciudades del mundo exactamente una vez. 10.7 4
Sociologa 2.1 Fcil Lista de invitados a una fiesta Escribir un
programa que cree un objeto Fiesta, agregue invita- dos a la
fiesta, y que imprima informacin de la misma. 10.9 5 Sociologa 2.7
Fcil Contador de vocales Escribir un programa que cuente el nmero
de vocales maysculas y minsculas en l- neas de texto completas
intro- ducidas por el usuario y que im- prima un resumen del nmero
de vocales contadas. 10.9 6 Mat. & Fs. 7.6 Difcil Solucin de
ecuacio- nes algebraicas si- multneas Escribir un programa que car-
gue un conjunto de ecuaciones algebraicas simultneas en arre- glos
de dos dimensiones y que resuelva las mismas por el m- todo de
descomposicin de abajo a arriba. 10.9 7 Mat. & Fs. 2.5 Moderado
Regresin lineal Escribir un programa que calcule la regresin
linear, tra- zando una lnea recta en una se- rie de datos
aleatorios. 10.10 8 Administracin 3.4 Moderado Recibos de compra
Escribir un programa que regis- tre los recibos de compra del
negocio, despliegue informa- cin del recibo actual y registre los
pagos a dichas compras. 10.11 9 Sociologa 1.1 Fcil Baraja Escribir
una clase que utilice una lista de arreglos para repar- tir
barajas. 10.13 10 Administracin 1.9 Fcil Tienda de libros Escribir
un programa que mo- dele el almacenamiento y recu- peracin de
libros con base en el ttulo. 11.3 1 Biol. & Ecol. 5.5 Difcil
Juego de la vida Modelar un juego que simule la reproduccin 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 slo 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
32. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 11.3 2 CC 0.7 Fcil Tabla ASCCI Escribir un
programa que im- prima una tabla con los 128 ca- racteres del cdigo
ASCII. La tabla debe imprimirse en un formato de ocho columnas se-
paradas. 11.7 3 CC 0.8 Fcil Cola circular Un programa determinado
im- plementa una cola circular. Reescribir los mtodos Est- Lleno,
borrar y mostrarCola, mediante el reemplazo de los operadores
condicionales, asig- naciones incrustadas y operado- res
incrementales incrustados con un cdigo ms simple y en- tendible.
11.7 4 Mat. & Fs. 4.1 Moderado Interpolacin poli- nmica 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
posicin entre el par de puntos. 11.9 5 CC 1.4 Moderado Operaciones
lgicas a nivel de bit Utilizar el corrimiento aritm- tico y lgico
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 Administracin 1.7 Fcil Cuentas de ahorro Calcular
y desplegar los balan- ces de las cuentas de ahorro ha- ciendo uso
del inters com- puesto. 12.4 2 Mat. & Fs. 13.4 Difcil Funciones
estadsti- cas Escribir un programa que ge- nere valores para las
funciones Gama, Gama incompleta, Beta, Beta incompleta y estadstica
binomial. 12.5 3 Administracin 3.3 Fcil 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 Sociologa 16.4 Difcil Juego
de corazones Escribir un programa que si- mule el juego de
corazones b- sico con un nmero 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
33. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 13.7 1 Administracin 9.0 Difcil Inventario
en una tienda de abarrotes Escribir un programa de inven- tarios
que mantenga un registro de varios artculos comestibles. Utilizar
diferentes mtodos en la clase Inventario para procesar objetos
heterogneos y artculos alimenticios de marca. Almace- nar todos los
objetos juntos en una estructura ArrayList. 13.7 2 Ingeniera 8.7
Difcil Anlisis de circuitos elctricos Escribir un programa que
calcule las corrientes en estado estacionario en un circuito elc-
trico de dos mallas que tenga una combinacin arbitraria de
resistores discretos, condensa- dores de capacidad y fuentes en las
terminales del circuito. In- cluir mtodos que ejecuten suma, resta,
multiplicacin y di- visin de nmeros complejos (nmeros con partes
reales e imaginarias). 13.8 3 Administracin 5.4 Moderado Nmina
Utilizar polimorfismo para es- cribir un programa de nmina que
calcule e imprima la n- mina semanal de una compaa. Asumir tres
tipos empleados: por hora, asalariados y asalaria- dos con comisin.
Asumir que cada tipo de empleado obtiene su pago utilizando una
frmula diferente. Utilizar una clase abstracta como base. 13. 8 4
Administracin 2.9 Moderado Cuentas bancarias Escribir un programa
que ma- neje los saldos de las cuentas bancarias para un arreglo de
cuentas bancarias. Utilizar dos tipos de cuentas bancarias: che-
ques y ahorros, derivadas de una clase abstracta llamada
CuentaBancaria. 14.4 1 Sociologa 4.0 Moderado ndice de masa cor-
poral Escribir un programa que soli- cite al usuario los valores de
su peso y altura y que despliegue el ndice de masa corporal aso-
ciado. 14.5 2 Sociologa 4.0 Moderado Almacenamiento y recuperacin
de ob- jetos en un arreglo Buscar una igualdad de los va- lores
clave en una tabla relacio- nal, utilizando dos tipos dife- rentes
de algoritmos de bsqueda: bsqueda secuencial y hashing. xxxii
Resumen del proyecto 00FrontMatter(i-xxxiv).indd
xxxii00FrontMatter(i-xxxiv).indd xxxii 5/3/09 10:16:015/3/09
10:16:01
34. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 14.9 3 CC 2.5 Moderado Formato de fechas
Crear una clave denominada Fe- cha que almacene valores e im- prima
la fecha ya sea en un for- mato numrico o alfabtico. Utilizar una
clase separada para manejar todas las excepciones. 14.9 4 CC 5.5
Difcil Utilidad de entrada de datos Escribir una clase que lea las
entradas del teclado y deter- mine a qu tipo de dato se re- fiere:
String, char, double, float, long e int. Debe hacerlo de ma- nera
similar a como lo hara un escner. 15.4 1 Ingeniera 3.7 Moderada
Cuestionario sobre uso de carreteras Modelar el trfico de una
carre- tera que atraviesa un lugar espe- cfico, recolectar
observaciones y leer el archivo para un anlisis posterior. 15.4 2
Sociologa 2.9 Fcil Fusin de correo Escribir un programa que lea un
formato de carta desde un ar- chivo de texto y modifique campos
personalizados. 15.5 15.9 3 CC 5.0 Moderada Conversin de archi- vos
Escribir un programa que reem- place los espacios en blanco en un
archivo de texto. 15.8 4 CC 1.5 Fcil Agregar datos a un archivo
objeto Implementar el cdigo necesa- rio para agregar datos a un ar-
chivo objeto. 16.12 1 Ingeniera 4.1 Moderada Puerta de cochera
animada Escribir un programa que si- mule la operacin de una puerta
automtica de cochera y sus controles, y que despliegue vi-
sualmente su posicin al mo- mento de operar. 16.14 2 Sociologa 3.0
Moderada Memorizacin de colores Escribir un programa que veri-
fique la habilidad del usuario de memorizar una secuencia de co-
lores. 16.14 3 Administracin 8.7 Difcil Inventario de aba- rrotes
GUI Disear una versin grfica del proyecto del captulo 13 (inven-
tario de almacn), utilizando la GUI. 16.15 4 Sociologa 4.2 Moderada
Juego de orden de palabras Escribir un simple juego inte- ractivo
que ayude a los nios a practicar el alfabeto. 16.16 5 Administracin
3.8 Moderada Reservaciones en aerolnea Escribir un programa con
inter- faz grfica que permita asignar asientos en los vuelos de una
aerolnea. 17.3 1 CC 1.7 Fcil Cambiar color y ali- neacin Escribir
un programa interac- tivo que modifique el color y la posicin de
los botones en una ventana grfica. Resumen del proyecto xxxiii
00FrontMatter(i-xxxiv).indd xxxiii00FrontMatter(i-xxxiv).indd
xxxiii 5/3/09 10:16:015/3/09 10:16:01
35. Cap./ Secc. Proyecto rea acadmica Pginas soluc. Dificultad
Ttulo Breve descripcin 17.6 2 CC 1.9 Fcil Rastreo de clic Escribir
un programa interac- tivo que modifique los bordes y las etiquetas
de los botones en una ventana grfica. 17.7 3 Sociologa 3.4 Moderada
Juego de gato Crear un juego de gato interac- tivo. 17.10 4
Sociologa 4.3 Moderada Juego de palabras, de nueva cuenta.
Modificar el juego del orden de palabras del captulo 16, de tal
manera que utilice un adminis- trador de distribucin. 17.10 5
Ingeniera 7.5 Difcil Difusin termal en una fuente de bomba de calor
central Escribir un programa que calcule temperaturas en la Tie-
rra en torno a una fuente de bomba de calor central. Desple- gar
los resultados en una grfica a color de temperaturas en fun- cin de
la distancia del centro terrestre y la poca del ao. xxxiv Resumen
del proyecto 00FrontMatter(i-xxxiv).indd
xxxiv00FrontMatter(i-xxxiv).indd xxxiv 5/3/09 10:16:025/3/09
10:16:02
36. 1C A P T U L O 1 Introduccin a las computadoras y la
programacin Objetivos Describir los diferentes componentes de un
equipo de cmputo. Enumerar los pasos necesarios para el desarrollo
de un programa. Conocer lo que significa la escritura de algoritmos
haciendo uso del seudocdigo. Conocer lo que significa la escritura
de programas usando el cdigo de un lenguaje de programacin.
Entender el cdigo fuente, el cdigo objeto y el proceso de
compilacin. Describir cmo el cdigo a nivel de byte hace de Java un
lenguaje porttil. Familiarizarse con la historia del lenguaje Java:
por qu fue desarrollado inicialmente, cmo obtuvo su nombre,
etctera. Escribir, compilar y ejecutar un simple programa de Java.
Relacin de temas 1.1 Introduccin 1.2 Terminologa de hardware 1.3
Desarrollo del programa 1.4 Cdigo fuente 1.5 Compilacin de cdigo
fuente en cdigo objeto 1.6 Portabilidad 1.7 Surgimiento de Java 1.8
Primer programa: Hola mundo 1.9 Apartado GUI: Hola mundo (opcional)
1.1 Introduccin Este libro trata acerca de la resolucin de
problemas. Especficamente, sobre la resolucin de problemas a travs
de un conjunto de instrucciones establecidas con precisin. A un
conjunto de instrucciones, que se introducen y ejecutan en un
formato para computadora, se le denomina programa. Para entender lo
que es un programa, pensemos la siguiente situacin. Supongamos que
administramos una tienda depar- tamental y que no sabemos cundo
debemos volver a surtir los estantes porque tenemos problemas para
mantener un inventario. La solucin a este problema sera escribir un
conjunto de instrucciones para mantener el control de los artculos
al momento que entran y salen de la tienda. Si las instrucciones
son correctas y estn en un formato entendible por la computadora,
las podemos introducir como un pro- grama, ejecutarlo e introducir
los datos de entrada y salida de los artculos al momento en que
stos se 01Dean(001-022).indd 101Dean(001-022).indd 1 17/2/09
22:25:3717/2/09 22:25:37
37. 2 Captulo 1 Introduccin a las computadoras y la programacin
presenten. Podemos traer informacin del inventario desde la
computadora en el momento en que as lo requiramos. Este
conocimiento sencillo y seguro nos permite volver a surtir nuestros
estantes de manera eficiente, y con ello obtener mayores
utilidades. El primer paso para aprender a escribir programas es
comprender los conceptos bsicos de compu- tacin. En este captulo
revisaremos esos conceptos. En los captulos subsiguientes se har
uso de esos conocimientos para explicar los elementos
verdaderamente fundamentales de la programacin. Este captulo inicia
con una descripcin de las diferentes partes de una computadora, y
contina con la explicacin de los pasos a seguir para escribir y
ejecutar un programa. En seguida, se centra exclusiva- mente en la
descripcin del lenguaje de programacin que se utilizar en el resto
del libro: el lenguaje Java. Se presentan instrucciones paso a paso
sobre cmo capturar y ejecutar un programa real de Java, con esto el
lector adquiere cierta experiencia prctica desde el principio. El
captulo termina con una sec- cin opcional del GUI (siglas en ingls
de Graphical User Interface, interfaz grfica del usuario) en la que
se describe cmo capturar y ejecutar un programa usando la interfaz
grfica (GUI). 1.2 Terminologa de hardware Un sistema de cmputo es
el conjunto de todos los componentes necesarios para que una
computadora pueda operar y las conexiones entre estos componentes.
Existen dos categoras bsicas de componentes: hardware y software.
El hardware son los componentes fsicos asociados con una
computadora. El soft- ware son los programas que le indican a la
computadora lo que debe hacer. Por ahora, nos centraremos en la
parte del hardware. La descripcin del hardware de una computadora
proporcionar al lector la informacin que re- quiere como
programador principiante. (Un programador es la persona que escribe
programas.) Una vez adentrado en el material presentado aqu, si el
lector lo desea, puede consultar el sitio Web de Webopedia e