fundamentos de programacion

797
Cuarta edición Luis Joyanes Aguilar FUNDAMENTOS DE PROGRAMACIÓN Algoritmos, estructura de datos y objetos

Upload: jssscarl

Post on 21-Dec-2015

216 views

Category:

Documents


19 download

DESCRIPTION

Las tecnicas y requerimientos necesario para programar

TRANSCRIPT

  • 9 7 8 8 4 4 8 1 6 1 1 1 8

    Fundamentos de Programacin, 4. edicin es la ltima revisin de un ttulo clsico de progra-macin que ha introducido a millares de lectores de Espaa y Latinoamrica en el mundo de la progra-macin de computadoras. Esta nueva edicin se ha reescrito teniendo presentes las crticas y propuestas de alumnos, autodidactas y profesores que han estu-diado o utilizado esta obra. Las primeras ediciones se apoyaban en la programacin estructurada y len-guajes de programacin clsicos, como Pascal y C. En la 3. edicin se extendi el contenido al lenguaje C++ y a los entonces emergentes Java, C#, Visual Basic, VB.NET. En el siglo xxi, se sigue utilizando la programacin estructurada tanto en la enseanza como en el campo profesional, pero es ya el maduro paradigma orientado a objetos el que convive con la programacin clsica, por lo que se han actualizado las caractersticas del lenguaje algortmico UPSAM adaptado a los ms utilizados C/C++, Java y C#, as como extensiones de Visual Basic y VB.NET. Por otra parte, desde hace ya varios aos, el Lengua-je Unificado de Modelado (UML) se ha convertido en un estndar, indispensable en cualquier desarrollo de software moderno y en esta nueva revisin se han incorporado, con 3 captulos especficos, las propie-dades de UML 2.0. La edicin que tiene en sus ma-nos trata de aprovechar la experiencia y todas las cualidades de su ya larga vida, prxima a su vigsi-mo aniversario.

    Caractersticas Contiene un captulo actualizado completo de intro-duccin a la computacin y a la programacin. Describe con gran cantidad de ejemplos y ejercicios las herramientas de programacin ms utilizadas en el aprendizaje de la informtica y la computacin, tales como diagramas de flujo y lenguaje algortmico (pseudocdigo). Incluye un curso completo de diseo y construccin de algoritmos. Dedica una parte completa al estudio de estructuras de datos fundamentales, tanto estticas (arrays o arreglos, registros, estructuras) como din-micas (listas, pilas, colas, rboles y grafos). Dedica un captulo entero al importante tema de la recursividad como herramienta para resolver proble-mas complejos. Una parte completa, tres captulos, se dedica al estudio de UML y la programacin orientada a ob-jetos. Incorpora un apndice completo del lenguaje algo-rtmico UPSAM 2.1. Se incluyen reglas de sintaxis a lo largo de todo el libro, con reglas y consejos de buenas prcticas de programacin.

    Cuarta edicin

    FUN

    DAM

    ENTO

    S D

    EPRO

    GRAM

    ACI

    NLuis Joyanes Aguilar

    Luis Joyanes Aguilar

    FUNDAMENTOS DEPROGRAMACIN

    4.a ed.

    FUNDAMENTOS DE PROGRAMACIN

    www.mcgraw-hill.es

    Algoritmos, estructura de datos y objetos

    Algoritmos, estructura de datos y objetos

    ISBN: 978-84-481-6111-8

    El libro dispone de un sitio web, Portal Tecnolgico y de Conocimiento, donde el lector en-contrar tutoriales, bibliografa, ejercicios y gran cantidad de apndices como ayuda al estu-diante, junto con innumerables herramientas de programacin, guas de sintaxis de diferentes lenguajes de programacin y referencias de las ltimas versiones y revisiones de UML 2.0.

    www.mhe.es/joyanes

  • FUNDAMENTOS DE PROGRAMACIN

    Algoritmos, estructura de datos y objetos

    Cuarta edicin

  • FUNDAMENTOS DE PROGRAMACIN

    Algoritmos, estructura de datos y objetos

    Cuarta edicin

    Luis Joyanes AguilarCatedrtico de Lenguajes y Sistemas Informticos

    Facultad de Informtica, Escuela Universitaria de InformticaUniversidad Pontificia de Salamanca campus de Madrid

    MADRID BOGOT BUENOS AIRES CARACAS GUATEMALA LISBOA MXICONUEVA YORK PANAM SAN JUAN SANTIAGO SO PAULO

    AUCKLAND HAMBURGO LONDRES MILN MONTREAL NUEVA DELHI PARSSAN FRANCISCO SIDNEY SINGAPUR ST LOUIS TOKIO TORONTO

  • FUNDAMENTOS DE PROGRAMACIN. Algoritmos, estructura de datos y objetos. Cuarta edicin.

    No est permitida la reproduccin total o parcial de este libro, ni su tratamientoinformtico, ni la transmisin de ninguna forma o por cualquier medio, ya sea elec-trnico, mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo y por escrito de los titulares del Copyright.

    DERECHOS RESERVADOS 2008, respecto a la cuarta edicin en espaol, por McGRAW-HILL/INTERAMERICANA DE ESPAA, S. A. U.Edifi cio Valrealty, 1. plantaBasauri, 1728023 Aravaca (Madrid)

    ISBN: 978-84-481-6111-8 Depsito legal: M.

    Editores: Jos Luis Garca y Cristina SnchezTcnicos editoriales: Blanca Pecharromn y Mara LenPreimpresin: Nuria Fernndez SnchezCubierta: Escria Diseo Grfi coCompuesto en: Grfi cas Blanco, S. L.Impreso en:

    IMPRESO EN ESPAA - PRINTED IN SPAIN

  • Contenido

    Prefacio a la cuarta edicin ................................................................................................................................................... xvii

    PARTE I. ALGORITMOS Y HERRAMIENTAS DE PROGRAMACIN ................................................ 1

    Captulo 1. Introduccin a las computadoras y los lenguajes de programacin ................................................................ 3INTRODUCCIN ......................................................................................................................................................... 31.1. Qu es una computadora? .................................................................................................................................. 4

    1.1.1. Origen de las computadoras .................................................................................................................... 51.1.2. Clasificacin de las computadoras ........................................................................................................... 6

    1.2. Organizacin fsica de una computadora ............................................................................................................. 71.2.1. Dispositivos de Entrada/Salida (E/S): perifricos ................................................................................... 81.2.2. La memoria principal ............................................................................................................................... 91.2.3. Unidades de medida de memoria ............................................................................................................ 101.2.4. El procesador ........................................................................................................................................... 121.2.5. Propuestas para seleccin de la computadora ideal para aprender programacin o para actividades profesionales ............................................................................................................................................ 14

    1.3. Representacin de la informacin en las computadoras ..................................................................................... 151.3.1. Representacin de textos ......................................................................................................................... 151.3.2. Representacin de valores numricos ...................................................................................................... 161.3.3. Representacin de imgenes .................................................................................................................... 171.3.4. Representacin de sonidos ....................................................................................................................... 18

    1.4. Codificacin de la informacin ........................................................................................................................... 191.4.1. Sistemas de numeracin .......................................................................................................................... 19

    1.5. Dispositivos de almacenamiento secundario (almacenamento masivo) .............................................................. 211.5.1. Discos magnticos ................................................................................................................................... 211.5.2. Discos pticos: CD-ROM y DVD ........................................................................................................... 211.5.3. Discos y memorias Flash USB ................................................................................................................ 241.5.4. Otros dispositivos de Entrada y Salida (E/S) .......................................................................................... 24

    1.6. Conectores de dispositivos de E/S ....................................................................................................................... 261.6.1. Puertos serie y paralelo ............................................................................................................................ 261.6.2. USB .......................................................................................................................................................... 271.6.3. Bus IEEE Firewire 1394 ....................................................................................................................... 27

    1.7. Redes, Web y Web 2.0 ......................................................................................................................................... 281.7.1. Redes P2P, igual-a-igual (peer-to-peer, P2P) .......................................................................................... 291.7.2. Aplicaciones de las redes de comunicaciones ......................................................................................... 291.7.3. Mdem ..................................................................................................................................................... 301.7.4. Internet y la World Wide Web ................................................................................................................. 30

    1.8. El software (los programas) ................................................................................................................................. 321.8.1. Software del sistema ................................................................................................................................ 321.8.2. Software de aplicacin ............................................................................................................................. 331.8.3. Sistema operativo ..................................................................................................................................... 34

    1.8.3.1. Multiprogramacin/Multitarea .................................................................................................. 351.8.3.2. Tiempo compartido (mltiples usuarios, time sharing) ........................................................... 351.8.3.3. Multiproceso ............................................................................................................................. 35

  • 1.9. Lenguajes de programacin ............................................................................................................................... 361.9.1. Traductores de lenguaje: el proceso de traduccin de un programa ..................................................... 371.9.2. La compilacin y sus fases .................................................................................................................... 381.9.3. Evolucin de los lenguajes de programacin ........................................................................................ 391.9.4. Paradigmas de programacin................................................................................................................. 40

    1.10. Breve historia de los lenguajes de programacin .............................................................................................. 42RESUMEN .................................................................................................................................................................... 43

    Captulo 2. Metodologa de la programacin y desarrollo de software ............................................................................. 45

    INTRODUCCIN ......................................................................................................................................................... 452.1. Fases en la resolucin de problemas ................................................................................................................... 46

    2.1.1. Anlisis del problema .............................................................................................................................. 472.1.2. Diseo del algoritmo ................................................................................................................................ 482.1.3. Herramientas de programacin ................................................................................................................ 482.1.4. Codificacin de un programa ................................................................................................................... 512.1.5. Compilacin y ejecucin de un programa ............................................................................................... 522.1.6. Verificacin y depuracin de un programa .............................................................................................. 522.1.7. Documentacin y mantenimiento ............................................................................................................ 53

    2.2. Programacin modular ......................................................................................................................................... 542.3. Programacin estructurada .................................................................................................................................. 54

    2.3.1. Datos locales y datos globales ................................................................................................................. 552.3.2. Modelado del mundo real ........................................................................................................................ 56

    2.4. Programacin orientada a objetos ........................................................................................................................ 562.4.1. Propiedades fundamentales de la orientacin a objetos .......................................................................... 572.4.2. Abstraccin .............................................................................................................................................. 572.4.3. Encapsulacin y ocultacin de datos ....................................................................................................... 582.4.4. Objetos ..................................................................................................................................................... 592.4.5. Clases ....................................................................................................................................................... 612.4.6. Generalizacin y especializacin: herencia ............................................................................................. 612.4.7 Reusabilidad ............................................................................................................................................. 632.4.8. Polimorfismo ............................................................................................................................................ 63

    2.5. Concepto y caractersticas de algoritmos ............................................................................................................ 642.5.1. Caractersticas de los algoritmos ............................................................................................................. 652.5.2. Diseo del algoritmo ................................................................................................................................ 66

    2.6. Escritura de algoritmos ........................................................................................................................................ 682.7. Representacin grfica de los algoritmos ............................................................................................................ 69

    2.7.1. Pseudocdigo ........................................................................................................................................... 702.7.2. Diagramas de flujo ................................................................................................................................... 712.7.3. Diagramas de Nassi-Schneiderman (N-S) ............................................................................................... 80

    RESUMEN .................................................................................................................................................................... 81EJERCICIOS ................................................................................................................................................................. 81

    Captulo 3. Estructura general de un programa .................................................................................................................. 83

    INTRODUCCIN ......................................................................................................................................................... 833.1. Concepto de programa ......................................................................................................................................... 843.2. Partes constitutivas de un programa .................................................................................................................... 843.3. Instrucciones y tipos de instrucciones ................................................................................................................. 85

    3.3.1. Tipos de instrucciones ............................................................................................................................. 853.3.2. Instrucciones de asignacin ..................................................................................................................... 863.3.3. Instrucciones de lectura de datos (entrada) ............................................................................................. 873.3.4. Instrucciones de escritura de resultados (salida) ..................................................................................... 873.3.5. Instrucciones de bifurcacin .................................................................................................................... 87

    3.4. Elementos bsicos de un programa ..................................................................................................................... 893.5. Datos, tipos de datos y operaciones primitivas ................................................................................................... 89

    3.5.1. Datos numricos ...................................................................................................................................... 903.5.2. Datos lgicos (booleanos) ....................................................................................................................... 923.5.3. Datos tipo carcter y tipo cadena............................................................................................................. 92

    vi Contenido

  • 3.6. Constantes y variables ....................................................................................................................................... 923.6.1. Declaracin de constants y variables ..................................................................................................... 94

    3.7. Expresiones ........................................................................................................................................................ 943.7.1. Expresiones aritmticas ......................................................................................................................... 953.7.2. Reglas de prioridad ................................................................................................................................ 973.7.3. Expresiones lgicas (booleanas) ........................................................................................................... 99

    3.8. Funciones internas ............................................................................................................................................. 102 3.9. La operacin de asignacin ............................................................................................................................... 104

    3.9.1. Asignacin aritmtica ............................................................................................................................ 1053.9.2. Asignacin lgica .................................................................................................................................. 1053.9.3. Asignacin de cadenas de caracteres..................................................................................................... 1053.9.4. Asignacin mltiple ............................................................................................................................... 1053.9.5. Conversin de tipo ................................................................................................................................. 106

    3.10. Entrada y salida de informacin ........................................................................................................................ 1073.11. Escritura de algoritmos/programas .................................................................................................................... 108

    3.11.1. Cabecera del programa o algoritmo .................................................................................................... 1083.11.2. Declaracin de variables ..................................................................................................................... 1083.11.3. Declaracin de constantes numricas .................................................................................................. 1093.11.4. Declaracin de constantes y variables carcter ................................................................................... 1093.11.5. Comentarios ......................................................................................................................................... 1103.11.6. Estilo de escritura de algoritmos/programas ....................................................................................... 111

    ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 113CONCEPTOS CLAVE .................................................................................................................................................. 124RESUMEN .................................................................................................................................................................... 124EJERCICIOS ................................................................................................................................................................. 125

    Captulo 4. Flujo de control I: Estructuras selectivas ......................................................................................................... 127INTRODUCCIN ......................................................................................................................................................... 1274.1. El flujo de control de un programa ...................................................................................................................... 1284.2. Estructura secuencial ........................................................................................................................................... 1284.3. Estructuras selectivas ........................................................................................................................................... 1304.4. Alternativa simple (si-entonces/if-then) .................................................................................................... 131

    4.4.1. Alternativa doble (si-entonces-sino/if-then-else) .................................................................... 1324.5. Alternativa mltiple (segn_sea, caso de/case) ........................................................................................ 1374.6. Estructuras de decisin anidadas (en escalera) .................................................................................................... 1444.7. La sentencia ir-a (goto) ................................................................................................................................... 148ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 151CONCEPTOS CLAVE .................................................................................................................................................. 154RESUMEN .................................................................................................................................................................... 154EJERCICIOS ................................................................................................................................................................. 155

    Captulo 5. Flujo de control II: Estructuras repetitivas ...................................................................................................... 157

    INTRODUCCIN ......................................................................................................................................................... 1575.1. Estructuras repetitivas .......................................................................................................................................... 1585.2. Estructura mientras ("while") ..................................................................................................................... 160

    5.2.1. Ejecucin de un bucle cero veces ............................................................................................................ 1625.2.2. Bucles infinitos ........................................................................................................................................ 1635.2.3. Terminacin de bucles con datos de entrada ........................................................................................... 163

    5.3. Estructura hacer-mientras ("do-while") ................................................................................................. 1655.4. Diferencias entre mientras (while) y hacer-mientras (do-while): una aplicacin en C++ .................... 1675.5. Estructura repetir ("repeat") ........................................................................................................................ 1685.6. Estructura desde/para ("for") ........................................................................................................................ 171

    5.6.1. Otras representaciones de estructuras repetitivas desde/para (for) .................................................... 1715.6.2. Realizacin de una estructura desde con estructura mientras ............................................................ 174

    5.7. Salidas internas de los bucles .............................................................................................................................. 1755.8. Sentencias de salto interrumpir (break) y continuar (continue) ............................................................ 176

    5.8.1. Sentencia interrumpir (break) ........................................................................................................... 1765.8.2. Sentencia continuar (continue) ......................................................................................................... 177

    Contenido vii

  • 5.9. Comparacin de bucles while, for y do-while: una aplicacin en C++ ..................................................... 1785.10. Diseo de bucles (lazos) .................................................................................................................................... 179

    5.10.1. Bucles para diseo de sumas y productos ........................................................................................... 1795.10.2. Fin de un bucle .................................................................................................................................... 179

    5.11. Estructuras repetitivas anidadas ......................................................................................................................... 1815.11.1. Bucles (lazos) anidados: una aplicacin en C++ ................................................................................ 183

    ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 186CONCEPTOS CLAVE .................................................................................................................................................. 197RESUMEN .................................................................................................................................................................... 197EJERCICIOS ................................................................................................................................................................. 198REFERENCIAS BIBLIOGRFICAS .......................................................................................................................... 199

    Captulo 6. Subprogramas (subalgoritmos): Funciones ..................................................................................................... 201

    INTRODUCCIN ......................................................................................................................................................... 201 6.1. Introduccin a los subalgoritmos o subprogramas ............................................................................................ 202 6.2. Funciones ........................................................................................................................................................... 203

    6.2.1. Declaracin de funciones ......................................................................................................................... 2046.2.2. Invocacin a las funciones ....................................................................................................................... 205

    6.3. Procedimientos (subrutinas) ................................................................................................................................ 2106.3.1. Sustitucin de argumentos/parmetros .................................................................................................... 211

    6.4. mbito: variables locales y globales ................................................................................................................... 2156.5. Comunicacin con subprogramas: paso de parmetros....................................................................................... 218

    6.5.1. Paso de parmetros .................................................................................................................................. 2196.5.2. Paso por valor .......................................................................................................................................... 2196.5.3. Paso por referencia................................................................................................................................... 2206.5.4. Comparaciones de los mtodos de paso de parmetros .......................................................................... 2216.5.5. Sntesis de la transmisin de parmetros ................................................................................................. 223

    6.6. Funciones y procedimientos como parmetros ................................................................................................... 2256.7. Los efectos laterales ............................................................................................................................................. 227

    6.7.1. En procedimientos ................................................................................................................................... 2276.7.2. En funciones ............................................................................................................................................ 228

    6.8. Recursin (recursividad) ...................................................................................................................................... 2296.9. Funciones en C/C++ , Java y C# ......................................................................................................................... 2316.10. mbito (alcance) y almacenamiento en C/C++ y Java ....................................................................................... 2336.11. Sobrecarga de funciones en C++ y Java .............................................................................................................. 235ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 238CONCEPTOS CLAVE .................................................................................................................................................. 242RESUMEN .................................................................................................................................................................... 242EJERCICIOS ................................................................................................................................................................. 243

    PARTE II. ESTRUCTURA DE DATOS ......................................................................................................... 245

    Captulo 7. Estructuras de datos I (arrays y estructuras) .................................................................................................... 247

    INTRODUCCIN ......................................................................................................................................................... 2477.1. Introduccin a las estructuras de datos ................................................................................................................ 2487.2. Arrays (arreglos) unidimensionales: los vectores ................................................................................................ 2487.3. Operaciones con vectores .................................................................................................................................... 251

    7.3.1. Asignacin ............................................................................................................................................... 2527.3.2. Lectura/escritura de datos ........................................................................................................................ 2537.3.3. Acceso secuencial al vector (recorrido) ................................................................................................... 2537.3.4. Actualizacin de un vector ...................................................................................................................... 255

    7.4. Arrays de varias dimensiones .............................................................................................................................. 2587.4.1. Arrays bidimensionales (tablas/matrices) ................................................................................................ 258

    7.5. Arrays multidimensionales .................................................................................................................................. 2607.6. Almacenamiento de arrays en memoria .............................................................................................................. 262

    7.6.1. Almacenamiento de un vector ................................................................................................................. 2627.6.2. Almacenamiento de arrays multidimensionales ...................................................................................... 263

    viii Contenido

  • 7.7. Estructuras versus registros ............................................................................................................................... 2657.7.1. Registros ................................................................................................................................................ 265

    7.8. Arrays de estructuras ......................................................................................................................................... 266 7.9. Uniones .............................................................................................................................................................. 268

    7.9.1. Unin versus estructura ......................................................................................................................... 2687.10. Enumeraciones ................................................................................................................................................... 270ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 272CONCEPTOS CLAVE .................................................................................................................................................. 282RESUMEN .................................................................................................................................................................... 282EJERCICIOS ................................................................................................................................................................. 283

    Captulo 8. Las cadenas de caracteres ................................................................................................................................ 285

    INTRODUCCIN ......................................................................................................................................................... 2858.1. Introduccin ......................................................................................................................................................... 2868.2. El juego de caracteres .......................................................................................................................................... 286

    8.2.1. Cdigo ASCII .......................................................................................................................................... 2868.2.2. Cdigo EBCDIC ...................................................................................................................................... 2878.2.3. Cdigo universal Unicode para Internet .................................................................................................. 2878.2.4. Secuencias de escape ............................................................................................................................... 289

    8.3. Cadena de caracteres ............................................................................................................................................ 2898.4. Datos tipo carcter ............................................................................................................................................... 291

    8.4.1. Constantes ................................................................................................................................................ 2918.4.2. Variables ................................................................................................................................................... 2918.4.3. Instrucciones bsicas con cadenas ........................................................................................................... 292

    8.5. Operaciones con cadenas ..................................................................................................................................... 2938.5.1. Clculo de la longitud de una cadena ...................................................................................................... 2938.5.2. Comparacin ............................................................................................................................................ 2948.5.3. Concatenacin .......................................................................................................................................... 2958.5.4. Subcadenas ............................................................................................................................................... 2968.5.5. Bsqueda .................................................................................................................................................. 297

    8.6. Otras funciones de cadenas .................................................................................................................................. 2978.6.1. Insertar ..................................................................................................................................................... 2988.6.2. Borrar ....................................................................................................................................................... 2988.6.3. Cambiar .................................................................................................................................................... 2998.6.4. Conversin de cadenas/nmeros .............................................................................................................. 300

    ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 300CONCEPTOS CLAVE .................................................................................................................................................. 305RESUMEN .................................................................................................................................................................... 305EJERCICIOS ................................................................................................................................................................. 306

    Captulo 9. Archivos (ficheros) .......................................................................................................................................... 307

    INTRODUCCIN ......................................................................................................................................................... 3079.1. Archivos y flujos (stream): La jerarqua de datos ............................................................................................... 308

    9.1.1. Campos .................................................................................................................................................... 3099.1.2. Registros .................................................................................................................................................. 3099.1.3. Archivos (ficheros) .................................................................................................................................. 3109.1.4. Bases de datos .......................................................................................................................................... 3109.1.5. Estructura jerrquica ................................................................................................................................ 3109.1.6. Jerarqua de datos .................................................................................................................................... 311

    9.2. Conceptos y definiciones = terminologa ............................................................................................................ 3129.2.1. Clave (indicativo) ..................................................................................................................................... 3129.2.2. Registro fsico o bloque ........................................................................................................................... 3129.2.3. Factor de bloqueo..................................................................................................................................... 312

    9.3. Soportes secuenciales y direccionables ............................................................................................................... 3139.4. Organizacin de archivos ..................................................................................................................................... 314

    9.4.1. Organizacin secuencial .......................................................................................................................... 3149.4.2. Organizacin directa ................................................................................................................................ 3159.4.3. Organizacin secuencial indexada ........................................................................................................... 316

    Contenido ix

  • 9.5. Operaciones sobre archivos ............................................................................................................................... 3179.5.1. Creacin de un archivo .......................................................................................................................... 3189.5.2. Consulta de un archivo .......................................................................................................................... 3189.5.3. Actualizacin de un archivo .................................................................................................................. 3199.5.4. Clasificacin de un archivo ................................................................................................................... 3199.5.5. Reorganizacin de un archivo ............................................................................................................... 3209.5.6. Destruccin de un archivo ..................................................................................................................... 3209.5.7. Reunin, fusin de un archivo ............................................................................................................... 3209.5.8. Rotura/estallido de un archivo ............................................................................................................... 321

    9.6. Gestin de archivos............................................................................................................................................ 3219.6.1. Crear un archivo .................................................................................................................................... 3229.6.2. Abrir un archivo ..................................................................................................................................... 3229.6.3. Cerrar archivos ....................................................................................................................................... 3249.6.4. Borrar archivos ...................................................................................................................................... 324

    9.7. Flujos ................................................................................................................................................................. 3249.7.1. Tipos de flujos ....................................................................................................................................... 3259.7.2. Flujos en C++ ........................................................................................................................................ 3259.7.3. Flujos en Java ........................................................................................................................................ 3259.7.4. Consideraciones prcticas en Java y C# ................................................................................................ 326

    9.8. Mantenimiento de archivos................................................................................................................................ 3269.8.1. Operaciones sobre registros ................................................................................................................... 328

    9.9. Procesamiento de archivos secuenciales (algoritmos) ...................................................................................... 3289.9.1. Creacin ................................................................................................................................................. 3289.9.2. Consulta ................................................................................................................................................. 3299.9.3. Actualizacin ......................................................................................................................................... 332

    9.10. Procesamiento de archivos directos (algoritmos) .............................................................................................. 3359.10.1. Operaciones con archivos directos ...................................................................................................... 3359.10.2. Clave-direccin .................................................................................................................................... 3419.10.3. Tratamiento de las colisiones .............................................................................................................. 3419.10.4. Acceso a los archivos directos mediante indexacin .......................................................................... 341

    9.11. Procesamiento de archivos secuenciales indexados .......................................................................................... 3439.12. Tipos de archivos: consideraciones prcticas en C/C++ y Java ........................................................................ 344

    9.12.1. Archivos de texto ................................................................................................................................. 3449.12.2. Archivos binarios ................................................................................................................................. 3459.12.3. Lectura y escritura de archivos ............................................................................................................ 345

    ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 346CONCEPTOS CLAVE .................................................................................................................................................. 352RESUMEN .................................................................................................................................................................... 352EJERCICIOS ................................................................................................................................................................. 353

    Captulo 10. Ordenacin, bsqueda e intercalacin ............................................................................................................. 355

    INTRODUCCIN ......................................................................................................................................................... 35510.1. Introduccin ....................................................................................................................................................... 35610.2. Ordenacin ......................................................................................................................................................... 357

    10.2.1. Mtodo de intercambio o de burbuja .................................................................................................. 35810.2.2. Ordenacin por insercin .................................................................................................................... 36310.2.3. Ordenacin por seleccin .................................................................................................................... 36510.2.4. Mtodo de Shell .................................................................................................................................. 36810.2.5. Mtodo de ordenacin rpida (quicksort) ........................................................................................... 370

    10.3. Bsqueda ............................................................................................................................................................ 37410.3.1. Bqueda secuencial ............................................................................................................................. 37410.3.2. Bqueda binaria ................................................................................................................................... 37910.3.3. Bsqueda mediante transformacin de claves (hasting) ..................................................................... 383

    10.4. Intercalacin ...................................................................................................................................................... 388ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 391CONCEPTOS CLAVE .................................................................................................................................................. 402RESUMEN .................................................................................................................................................................... 402EJERCICIOS ................................................................................................................................................................. 403

    x Contenido

  • Captulo 11. Ordenacin, bsqueda y fusin externa (archivos) .......................................................................................... 405

    INTRODUCCIN ......................................................................................................................................................... 40511.1. Introduccin ....................................................................................................................................................... 40611.2. Archivos ordenados ........................................................................................................................................... 40611.3. Fusin de archivos ............................................................................................................................................. 40611.4. Particin de archivos .......................................................................................................................................... 410

    11.4.1. Clasificacin interna ............................................................................................................................ 41011.4.2. Particin por contenido ....................................................................................................................... 41011.4.3. Seleccin por sustitucin ..................................................................................................................... 41111.4.4. Particin por secuencias ...................................................................................................................... 413

    11.5. Clasificacin de archivos ................................................................................................................................... 41411.5.1. Clasificacin por mezcla directa ......................................................................................................... 41411.5.2. Clasificacin por mezcla natural ......................................................................................................... 41711.5.3. Clasificacin por mezcla de secuencias equilibridas .......................................................................... 421

    ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 422CONCEPTOS CLAVE .................................................................................................................................................. 426RESUMEN .................................................................................................................................................................... 426EJERCICIOS ................................................................................................................................................................. 427

    Captulo 12. Estructuras dinmicas lineales de datos (pilas, colas y listas enlazadas) ........................................................ 429

    INTRODUCCIN ......................................................................................................................................................... 42912.1. Introduccin a las estructuras de datos .............................................................................................................. 430

    12.1.1. Estructuras dinmicas de datos ........................................................................................................... 43012.2. Listas .................................................................................................................................................................. 43112.3. Listas enlazadas ................................................................................................................................................. 43312.4. Procesamiento de listas enlazadas ..................................................................................................................... 436

    12.4.1. Implementacin de listas enlazadas con punteros............................................................................... 43612.4.2. Implementacin de listas enlazadas con arrays (arreglos) .................................................................. 442

    12.5. Listas circulares ................................................................................................................................................. 45012.6. Listas doblemente enlazadas ............................................................................................................................. 450

    12.6.1. Insercin .............................................................................................................................................. 45112.6.2. Eliminacin.......................................................................................................................................... 452

    12.7. Pilas.................................................................................................................................................................... 45212.7.1. Aplicaciones de las pilas ..................................................................................................................... 458

    12.8. Colas .................................................................................................................................................................. 46012.8.1. Representacin de las colas ................................................................................................................. 46112.8.2. Aprovechamiento de la memoria ........................................................................................................ 467

    12.9. Doble cola .......................................................................................................................................................... 468ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 469CONCEPTOS CLAVE .................................................................................................................................................. 476RESUMEN .................................................................................................................................................................... 477EJERCICIOS ................................................................................................................................................................. 477

    Captulo 13. Estructuras de datos no lineales (rboles y grafos) ......................................................................................... 479

    INTRODUCCIN ......................................................................................................................................................... 47913.1. Introduccin ....................................................................................................................................................... 48013.2. rboles ............................................................................................................................................................... 480

    13.2.1. Terminologa y representacin de un rbol general ............................................................................ 48113.3. rbol binario ...................................................................................................................................................... 482

    13.3.1. Terminologa de los rboles binarios .................................................................................................. 48313.3.2. rboles binarios completos ................................................................................................................. 48413.3.3. Conversin de un rbol general en rbol binario ................................................................................ 48513.3.4. Representacin de los rboles binarios ............................................................................................... 48913.3.5. Recorrido de un rbol binario ............................................................................................................. 493

    13.4. rbol binario de bsqueda ................................................................................................................................. 49513.4.1. Bsqueda de un elemento .................................................................................................................... 49713.4.2. Insertar un elemento ............................................................................................................................ 49813.4.3. Eliminacin de un elemento ................................................................................................................ 499

    Contenido xi

  • 13.5. Grafos ................................................................................................................................................................ 50613.5.1. Terminologa de grafos ........................................................................................................................ 50613.5.2. Representacin de grafos .................................................................................................................... 509

    ACTIVIDADES DE PROGRAMACIN RESUELTAS .............................................................................................. 512CONCEPTOS CLAVE .................................................................................................................................................. 516RESUMEN .................................................................................................................................................................... 516EJERCICIOS ................................................................................................................................................................ 517

    Captulo 14. Recursividad..................................................................................................................................................... 519

    INTRODUCCIN ......................................................................................................................................................... 51914.1. La naturaleza de la recursividad ........................................................................................................................ 52014.2. Recursividad directa e indirecta ........................................................................................................................ 524

    14.2.1. Recursividad indirecta ......................................................................................................................... 52714.2.2. Condicin de terminacin de la recursin .......................................................................................... 528

    14.3. Recursin versus iteracin ................................................................................................................................. 52814.4. Recursin infinita............................................................................................................................................... 53114.5. Resolucin de problemas complejos con recursividad ..................................................................................... 535

    14.5.1. Torres de Hanoi ................................................................................................................................... 53514.5.2. Bsqueda binaria recursiva .................................................................................................................. 54014.5.3. Ordenacin rpida (QuickSort) ........................................................................................................... 54214.5.4. Ordenacin mergesort ......................................................................................................................... 545

    CONCEPTOS CLAVE .................................................................................................................................................. 548RESUMEN .................................................................................................................................................................... 548EJERCICIOS ................................................................................................................................................................. 549PROBLEMAS ............................................................................................................................................................... 549

    PARTE III. PROGRAMACIN ORIENTADA A OBJETOS Y UML 2.1 ................................................. 551

    Captulo 15. Tipos abstractos de datos, objetos y modelado con UML 2.1 ........................................................................ 553

    INTRODUCCIN ......................................................................................................................................................... 55315.1. Programacin estructurada (procedimental)...................................................................................................... 554

    15.1.1. Limitaciones de la programacin estructurada ................................................................................... 55415.1.2. Modelado de objetos del mundo real .................................................................................................. 555

    15.2. Programacin orientada a objetos ..................................................................................................................... 55615.2.1. Objetos ................................................................................................................................................. 55715.2.2. Tipos abstractos de datos: CLASES.................................................................................................... 558

    15.3. Modelado e identificacin de objetos ................................................................................................................ 56015.4. Propiedades fundamentales de orientacin a objetos ........................................................................................ 561

    15.4.1. Abstraccin .......................................................................................................................................... 56115.4.2. La abstraccin en el software .............................................................................................................. 56115.4.3. Encapsulamiento y ocultacin de datos .............................................................................................. 56215.4.4 Herencia ............................................................................................................................................... 56215.4.5. Reutilizacin o reusabilidad ................................................................................................................ 56315.4.6. Polimorfismo ....................................................................................................................................... 564

    15.5. Modelado de aplicaciones: UML ...................................................................................................................... 56515.5.1. Lenguaje de modelado ........................................................................................................................ 56615.5.2. Qu es un lenguaje de modelado? ..................................................................................................... 566

    15.6. Diseo de software con UML ........................................................................................................................... 56715.6.1. Desarrollo de software orientado a objetos con UML ........................................................................ 56815.6.2. Especificaciones de UML ................................................................................................................... 568

    15.7. Historia de UML ................................................................................................................................................ 56815.7.1. El futuro de UML 2.1 .......................................................................................................................... 569

    15.8. Terminologa de orientacin a objetos .............................................................................................................. 569CONCEPTOS CLAVE .................................................................................................................................................. 570RESUMEN .................................................................................................................................................................... 570EJERCICIOS ................................................................................................................................................................. 570

    xii Contenido

  • Captulo 16. Diseo de clases y objetos: Representaciones grficas en UML .................................................................... 573

    INTRODUCCIN ......................................................................................................................................................... 57316.1. Diseo y representacin grfica de objetos en UML ........................................................................................ 574

    16.1.1. Representacin grfica en UML ......................................................................................................... 57516.1.2. Caractersticas de los objetos .............................................................................................................. 57616.1.3. Estado .................................................................................................................................................. 57716.1.4. Mltiples instancias de un objeto ........................................................................................................ 57916.1.5. Evolucin de un objeto ........................................................................................................................ 57916.1.6. Comportamiento .................................................................................................................................. 58016.1.7. Identidad .............................................................................................................................................. 58216.1.8. Los mensajes ....................................................................................................................................... 58216.1.9. Responsabilidad y restricciones .......................................................................................................... 584

    16.2. Diseo y representacin grfica de clases en UML .......................................................................................... 58416.2.1. Representacin grfica de una clase ................................................................................................... 58516.2.2. Declaracin de una clase ..................................................................................................................... 58816.2.3. Reglas de visibilidad ........................................................................................................................... 59016.2.4. Sintaxis ................................................................................................................................................ 592

    16.3. Declaracin de objetos de clases ....................................................................................................................... 59316.3.1. Acceso a miembros de la clase: encapsulamiento .............................................................................. 59516.3.2. Declaracin de mtodos ...................................................................................................................... 59716.3.3. Tipos de mtodos ................................................................................................................................. 601

    16.4. Constructores ..................................................................................................................................................... 60216.4.1. Constructor por defecto ....................................................................................................................... 603

    16.5. Destructores ....................................................................................................................................................... 60616.6. Implementacin de clases en C++ ..................................................................................................................... 607

    16.6.1. Archivos de cabecera y de clases ........................................................................................................ 60816.6.2. Clases compuestas ............................................................................................................................... 609

    16.7. Recoleccin de basura ....................................................................................................................................... 61016.7.1. El mtodo finalize () .................................................................................................................... 610

    CONCEPTOS CLAVE .................................................................................................................................................. 611RESUMEN .................................................................................................................................................................... 611EJERCICIOS ................................................................................................................................................................. 613LECTURAS RECOMENDADAS ................................................................................................................................ 614

    Captulo 17. Relaciones entre clases: Delegaciones, asociaciones, agregaciones, herencia ................................................ 615

    INTRODUCCIN ......................................................................................................................................................... 61517.1. Relaciones entre clases ...................................................................................................................................... 61617.2. Dependencia ...................................................................................................................................................... 61617.3. Asociacin ......................................................................................................................................................... 617

    17.3.1. Multiplicidad ....................................................................................................................................... 61917.3.2. Restricciones en asociaciones ............................................................................................................. 62017.3.3. Asociacin cualificada......................................................................................................................... 62017.3.4. Asociaciones reflexivas ....................................................................................................................... 62017.3.5. Diagrama de objetos ............................................................................................................................ 62117.3.6. Clases de asociacin ............................................................................................................................ 62117.3.7. Restricciones en asociaciones ............................................................................................................. 625

    17.4. Agregacin ......................................................................................................................................................... 62617.4.1 Composicin ........................................................................................................................................ 628

    17.5. Jerarqua de clases: generalizacin y especializacin ....................................................................................... 62917.5.1. Jerarquas de generalizacin/especializacin ...................................................................................... 631

    17.6. Herencia: clases derivadas ................................................................................................................................. 63417.6.1. Herencia simple ................................................................................................................................... 63417.6.2. Herencia mltiple ................................................................................................................................ 63517.6.3. Niveles de herencia ............................................................................................................................ 63617.6.4. Declaracin de una clase derivada ...................................................................................................... 63817.6.5. Consideraciones de diseo .................................................................................................................. 639

    17.7. Accesibilidad y visibilidad en herencia ............................................................................................................. 64017.7.1. Herencia pblica .................................................................................................................................. 640

    Contenido xiii

  • 17.7.2. Herencia privada .................................................................................................................................. 64017.7.3. Herencia protegida............................................................................................................................... 641

    17.8. Un caso de estudio especial: herencia mltiple................................................................................................. 64217.8.1. Caractersticas de la herencia mltiple ................................................................................................ 644

    17.9. Clases abstractas ................................................................................................................................................ 64517.9.1. Operaciones abstractas ........................................................................................................................ 646

    CONCEPTOS CLAVE .................................................................................................................................................. 647RESUMEN .................................................................................................................................................................... 647EJERCICIOS ................................................................................................................................................................. 648

    PARTE IV. METODOLOGA DE LA PROGRAMACIN Y DESARROLLO DE SOFTWARE ................. 649

    Captulo 18. Resolucin de problemas y desarrollo de software: Metodologa de la programacin .................................. 653

    INTRODUCCIN ......................................................................................................................................................... 653 18.1. Abstraccin y resolucin de problemas ........................................................................................................... 654

    18.1.1. Descomposicin procedimental ......................................................................................................... 65418.1.2. Diseo descendente ........................................................................................................................... 65518.1.3. Abstraccin procedimental ................................................................................................................ 65618.1.4. Abstraccin de datos .......................................................................................................................... 65618.1.5. Ocultacin de la informacin ............................................................................................................ 65718.1.6. Programacin orientada a objetos ..................................................................................................... 65718.1.7. Diseo orientado a objetos ................................................................................................................ 657

    18.2. El ciclo de vida del software ........................................................................................................................... 65818.2.1. El ciclo de vida del software tradicional (modelo en cascada) ........................................................ 65818.2.2. El proceso unificado .......................................................................................................................... 66018.2.3. Cliente, desarrollador y usuario ......................................................................................................... 661

    18.3. Fase de anlisis: requisitos y especificaciones ................................................................................................ 662 18.4. Diseo .............................................................................................................................................................. 664 18.5. Implementacin (codificacin) ........................................................................................................................ 666 18.6. Pruebas e integracin ....................................................................................................................................... 666

    18.6.1. Verificacin ........................................................................................................................................ 66718.6.2. Tcnicas de pruebas ........................................................................................................................... 667

    18.7. Mantenimiento ................................................................................................................................................. 66918.7.1. La obsolescencia: programas obsoletos ............................................................................................ 66918.7.2. Iteracin y evolucin del software .................................................................................................... 669

    18.8. Principios de diseo de sistemas de software .................................................................................................. 67018.8.1. Modularidad mediante diseo descendente ....................................................................................... 67018.8.2. Abstraccin y encapsulamiento ......................................................................................................... 67118.8.3. Modificabilidad .................................................................................................................................. 67118.8.4. Comprensibilidad y fiabilidad ........................................................................................................... 67218.8.5. Interfaces de usuario .......................................................................................................................... 67218.8.6. Programacin segura contra fallos .................................................................................................... 67318.8.7. Facilidad de uso ................................................................................................................................. 67318.8.8. Eficiencia ........................................................................................................................................... 67418.8.9. Estilo de programacin, documentacin y depuracin ..................................................................... 674

    18.9. Estilo de programacin .................................................................................................................................... 67418.9.1. Modularizar un programa en subprogramas ...................................................................................... 67418.9.2. Evitar variables globales en subprogramas ......