Introduccion a la programacion con JAVA 1 edicion dean

766

description

Programacion Orientada a Objetos

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