FUNDAMENTOS DE PROGRAMACIÓN - ALGORITMOS, ESTRUCTURA DE DATOS Y OBJETOS - 5 EDICIÓN
INDICE
PARTE I ALGORITMOS Y HERRAMIENTAS DE PROGRAMACIÓN
Capítulo 1 Introducción a las computadoras y a los lenguajes de programación
INTRODUCCIÓN
1.1. El origen de las computadoras y su evolución.
1.2. Las computadoras modernas: una breve taxonomía
1.3. Organización de una computadora.
1.3.1. Memoria central de la computadora.
1.3.2. Memoria caché.
1.3.3. Unidades de medida de memoria
1.3.4. Dispositivos de entrada y salida.
1.3.5. Dispositivos de almacenamiento secundario.
1.3.6. Sistemas de comunicación.
1.4. Software: conceptos básicos y clasificación.
1.4.1. Software de sistema.
1.4.2. Software de aplicaciones
1.4.3. Software propietario.
1.4.4. Software de código abierto.
1.5. Sistema operativo.
1.6. El lenguaje de la computadora.
1.6.1. Representación de la información en las computadoras códigos de caracteres .
1.7. La programación de las computadoras en perspectiva.
1.8. Lenguajes de programación.
1.8.1. Tipos de lenguajes de programación: máquina, ensamblador y de alto nivel.
1.9. Traductores de lenguaje: el proceso de traducción de un programa.
1.9.1. Intérpretes.
1.9.2. Compiladores.
1.9.3. Compiladores versus interpretes
1.9.4. La compilación y sus fases
1.10. Evolución de los lenguajes de programación.
1.11. Paradigmas de programación
1.12. Internet y la Web
1.12.1. Desarrollo de programas web
1.13. Cloud computing computación en la nube como servicio
1.13.1. Software como servicio SaaS
1.13.2. Plataforma como servicio PaaS
1.13.3. Infraestructura como servicio las
VIII
Contenido
1.14. Internet de las cosas
1.15. Big Data. Los grandes volúmenes de datos.
1.16. Los lenguajes de programación más populares: índice TIOBE
1.17. Nacimiento de la programación moderna: lenguajes de programación de referencia C, C , Java, Python y C
RESUMEN
Capítulo 2 Metodología de la programación y desarrollo de software.
INTRODUCCIÓN
2.1. Fases en la resolución de problemas.
2.1.1. Análisis del problema
2.1.2. Diseño del algoritmo.
2.1.3. Herramientas de programación.
2.1.4. Codificación de un programa
2.1.5. Compilación y ejecución de un programa.
2.1.6. Verificación y depuración de un programa
2.1.7. Documentación y mantenimiento
2.2. Metodología de la programación
2.2.1. Programación modular
2.3. Programación estructurada
2.3.1. Datos locales y datos globales
2.3.2. Técnicas de programación estructurada.
2.3.3. Modelado del mundo real
2.4. Programación orientada a objetos
2.4.1. Abstracción
2.5. Concepto y características de algoritmos
2.5.1. Características de los algoritmos.
2.5.2. Diseño del algoritmo
2.6. Escritura de algoritmos
2.7. Representación gráfica de los algoritmos
2.7.1. Pseudocódigo
2.7.2. Diagramas de flujo
2.7.3. Diagramas de Nassi-Schneiderman N-S
2.8. Herramientas y entornos de desarrollo de programación
2.8.1. Editores de texto
2.8.2. Programa ejecutable
2.8.3. Proceso de compilación ejecución de un programa
2.8.4. Entorno de desarrollo integrado
2.8.5. Panorama de los entornos de programación
ACTIVIDADES DE APRENDIZAJE
ACTIVIDADES COMPLEMENTARIAS
RESUMEN
EJERCICIOS
Capítulo 3 Estructura general de un programa
INTRODUCCIÓN
3.1. Concepto de programa.
3.2. Estructura de un programa.
3.3. Instrucciones y tipos de instrucciones.
3.3.1. Tipos de instrucciones.
3.3.2. Instrucciones de asignación.
3.3.3. Instrucciones de lectura de datos entrada .
3.3.4. Instrucciones de escritura de resultados salida
3.3.5. Instrucciones de bifurcación.
3.4. Elementos básicos de un programa.
3.5. Datos, tipos de datos y operaciones primitivas
3.5.1. Datos numéricos....
3.5.2. Datos lógicos booleanos
3.5.3. Datos tipo carácter y tipo cadena..
3.6. Constantes y variables...
3.6.1. Declaración de constantes y variables..
3.7. Expresiones y operadores
3.7.1. Expresiones aritméticas
3.7.2. Reglas de prioridad...
3.7.3. Expresiones lógicas booleanas ...
3.7.4. Reglas generales de prioridad y asociatividad
3.8. Funciones internas.
3.8.1. Funciones matemáticas de Java.
3.9. Operación de asignación.
3.9.1. Asignación aritmética
3.9.2. Asignación lógica....
3.9.3. Asignación de cadenas de caracteres
3.9.4. Asignación múltiple.
3.9.5. Conversión de tipo.
3.10. Operadores avanzados 108
3.10.1. Operador condicional ?: C C , Java .
3.10.2. Operador coma.
3.10.3. Operadores especiales: ,
3.10.4. Operador sizeof.
3.10.5. Operadores de manipulación de bits bitwise, Java
3.10.6. Prioridad y asociatividad
3.10.7. Conversiones de tipos
3.11. Entrada y salida de información
3.12. Escritura de algoritmos programas..
3.12.1. Cabecera del programa o algoritmo...
3.12.2. Declaración de variables
3.12.3. Declaración de constantes numéricas..
3.12.4. Declaración de constantes y variables carácter
3.12.5. Comentarios ....
3.12.6. Estilo de escritura de algoritmos programas.
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS.
CONCEPTOS CLAVE RESUMEN..
EJERCICIOS
Capítulo 4 Flujo de control I: estructuras selectivas
INTRODUCCIÓN
4.1. El flujo de control de un programa.
4.2. Estructura secuencial
4.3. Estructuras selectivas
4.4. Alternativa simple si -entonces if-then
4.4.1. Alternativa doble si -entonces-sino if-then-else
4.5. Alternativa múltiple según sea, caso de; switch-case ...
4.6. Estructuras de decisión anidadas en escalera
4.7. La sentencia ir-a goto no recomendable su uso, con excepciones
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS.
CONCEPTOS CLAVE..
RESUMEN
EJERCICIOS.
Capítulo 5 Flujo de control II: estructuras repetitivas.
INTRODUCCIÓN
Contenido
5.1. Estructuras repetitivas
5.2. Estructura mientras "while"
5.2.1. Ejecución de un bucle cero veces.
5.2.2. Bucles infinitos....
5.2.3. Terminación de bucles con datos de entrada..
5.3. Estructura hacer-mientras "do-while" ...
5.4. Diferencias entre mientras while y hacer-mientras do-while : una aplicación en C
5.5. Estructura repetir "repeat"
5.6. Estructura desde para "for" ...
5.6.1. Otras representaciones de estructuras repetitivas desde para for
5.6.2. Realización de una estructura desde con estructura mi entras...
5.7. Salidas internas de los bucles ....
5.8. Sentencias de salto interrumpir break y continuar continue
5.8.1. Sentencia interrumpir break ...
5.8.2. Sentencia continuar continue
5.9. Comparación de bucles while, for y do-while: una aplicación en C
5.10. Diseño de bucles lazos ..
5.10.1. Bucles para diseño de sumas y productos..
5.10.2. Fin de un bucle ...
5.11. Estructuras repetitivas anidadas
5.11.1. Bucles lazos anidados: una aplicación en C
5.12. Sentencias de salto en C , Java y Python: break, continue, return, goto...
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
CONCEPTOS CLAVE RESUMEN..
EJERCICIOS
REFERENCIAS BIBLIOGRAFICAS..
Capítulo 6 Subprogramas subalgoritmos : funciones.
INTRODUCCIÓN
6.1. Introducción a los subalgoritmos o subprogramas..
6.2. Funciones.
6.2.1. Declaración de funciones..
6.2.2. Invocación a las funciones
6.3. Procedimientos subrutinas .
6.3.1. Sustitución de argumentos parámetros..
6.4. Ámbito: variables locales y globales..
6.5. Comunicación con subprogramas: paso de parámetros...
6.5.1. Paso de parámetros.
6.5.2. Paso por valor ....
6.5.3. Paso por referencia ...
6.5.4. Comparaciones de los métodos de paso de parámetros..
6.5.5. Síntesis de la transmisión de parámetros.
6.6. Funciones y procedimientos como parámetros..
6.7. Los efectos laterales ......
6.7.1. En procedimientos...
6.7.2. En funciones..
6.8. Recursión recursividad
6.9. Funciones en C C , Java y C
6.10. Ámbito alcance y almacenamiento en C C y Java
6.11. Sobrecarga de funciones en C y Java ...
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
CONCEPTOS CLAVE..
RESUMEN
EJERCICIOS
PARTE II ESTRUCTURA DE DATOS
Capítulo 7 Estructuras de datos I arrays -arreglos- y estructuras .
INTRODUCCIÓN..
7.1. Introducción a las estructuras de datos.
7.2. Arrays arreglos unidimensionales: los vectores.
7.3. Operaciones con vectores.
7.3.1. Asignación...
7.3.2. Lectura escritura de datos...
7.3.3. Acceso secuencial al vector recorrido ..
7.3.4. Actualización de un vector..
7.4. Arrays arreglos de varias dimensiones
7.4.1. Arrays bidimensionales tablas matrices
7.5. Arrays arreglos multidimensionales.
7.6. Almacenamiento de arrays en memoria
7.6.1. Almacenamiento de un vector.
7.6.2. Almacenamiento de arrays multidimensionales..
7.7. Estructuras versus registros..
7.7.1. Registros ....
7.8. Arrays arreglos de estructuras..
7.9. Uniones...
7.9.1. Unión versus estructura..
7.10. Enumeraciones ......
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
CONCEPTOS CLAVE.
RESUMEN.
EJERCICIOS
Capítulo 8 Las cadenas de caracteres
INTRODUCCIÓN
8.1. Introducción
8.2. El juego de caracteres
8.2.1. Código ASCIl.
8.2.2. Código EBCDIC
8.2.3. Código universal Unicode para Internet
8.2.4. Secuencias de escape
8.3. Cadena de caracteres..
8.4. Datos tipo carácter
8.4.1. Constantes
8.4.2. Variables.
8.4.3. Instrucciones básicas con cadenas..
8.5. Operaciones con cadenas...
8.5.1. Cálculo de la longitud de una cadena.
8.5.2. Comparación..
8.5.3. Concatenación.
8.5.4. Subcadenas.
8.5.5. Búsqueda.
8.6. Otras funciones de cadenas
8.6.1. Insertar.
8.6.2. Borrar..
8.6.3. Cambiar
8.6.4. Conversión de cadenas números
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS...
CONCEPTOS CLAVE.
RESUMEN..
EJERCICIOS..
Capítulo 9 Archivos ficheros
INTRODUCCIÓN
9.1. Archivos y flujos stream : la jerarquía de datos.
9.1.1. Campos...
9.1.2. Registros
9.1.3. Archivos ficheros
9.1.4. Bases de datos..
9.1.5. Estructura jerárquica.
9.1.6. Jerarquía de datos ...
9.2. Conceptos y definiciones: terminología
9.2.1. Clave indicativo
9.2.2. Registro físico o bloque
9.2.3. Factor de bloqueo..
9.3. Soportes secuenciales y direccionables.
9.4. Organización de archivos..
9.4.1. Organización secuencial
9.4.2. Organización directa..
9.4.3. Organización secuencial indexada
9.5. Operaciones sobre archivos..
9.5.1. Creación de un archivo.
9.5.2. Consulta de un archivo...
9.5.3. Actualización de un archivo
9.5.4. Clasificación de un archivo..
9.5.5. Reorganización de un archivo.
9.5.6. Destrucción de un archivo...
9.5.7. Reunión, fusión de un archivo..
9.5.8. Rotura estallido de un archivo
9.6. Gestión de archivos ..
9.6.1. Crear un archivo
9.6.2. Abrir un archivo
9.6.3. Cerrar archivos
9.6.4. Borrar archivos..
9.7. Flujos
9.7.1. Tipos de flujos..
9.7.2. Flujos en C
9.7.3. Flujos en Java
9.7.4. Consideraciones prácticas en Java y C
9.8. Mantenimiento de archivos
9.8.1. Operaciones sobre registros
9.9. Procesamiento de archivos secuenciales algoritmos
9.9.1. Creación.
9.9.2. Consulta
9.9.3. Actualización .
9.10. Procesamiento de archivos directos algoritmos
9.10.1. Operaciones con archivos directos...
9.10.2. Clave-dirección
9.10.3. Tratamiento de las colisiones.
9.10.4. Acceso a los archivos directos mediante indexación..
9.11. Procesamiento de archivos secuenciales indexados.
9.12. Tipos de archivos: consideraciones prácticas en C C y Java
9.12.1. Archivos de texto..
9.12.2. Archivos binarios
9.12.3. Lectura y escritura de archivos.
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
CONCEPTOS CLAVE RESUMEN..
EJERCICIOS
Capítulo 10 Ordenación, búsqueda e intercalación..
INTRODUCCION
10.1. Introducción
10.2. Ordenación..
10.2.1. Método de intercambio o de burbuja
10.2.2. Ordenación por inserción
10.2.3. Ordenación por selección..
10.2.4. Método de Shell
10.2.5. Método de ordenación rápida quicksort .
10.3. Búsqueda ..
10.3.1. Búsqueda secuencial.
10.3.2. Búsqueda binaria.
10.3.3. Búsqueda mediante transformación de claves hashing .
10.3.3.1. Métodos de transformación de claves..
10.3.3.2. Colisiones.
10.4. Intercalación...
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
CONCEPTOS CLAVE RESUMEN....
EJERCICIOS
Capítulo 11 Ordenación, búsqueda y fusión externa archivos
INTRODUCCIÓN
11.1. Introducción ...
11.2. Archivos ordenados.
11.3. Fusión de archivos.
11.4. Partición de archivos ......
11.4.1. Clasificación interna..
11.4.2. Partición por contenido...
11.4.3. Selección por sustitución
11.4.4. Partición por secuencias
11.5. Clasificación de archivos.
11.5.1. Clasificación por mezcla directa.
11.5.2. Clasificación por mezcla natural
11.5.3. Clasificación por mezcla de secuencias equilibradas .
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
CONCEPTOS CLAVE RESUMEN..
EJERCICIOS
Capítulo 12 Estructuras dinámicas lineales de datos pilas, colas y listas enlazadas
INTRODUCCION
12.1. Introducción a las estructuras de datos.
12.1.1. Estructuras dinámicas de datos.
12.2. Listas
12.3. Listas enlazadas.
12.4. Procesamiento de listas enlazadas
12.4.1. Implementación de listas enlazadas con punteros ...
12.4.2. Implementación de listas enlazadas con arrays arreglos
12.5. Listas circulares
12.6. Listas doblemente enlazadas
12.6.1. Inserción .
12.6.2. Eliminación.
12.7.Pilas.
12.7.1. Aplicaciones de las pilas.
12.8. Colas.
12.8.1. Representación de las colas
12.8.2. Aprovechamiento de la memoria
12.9. Doble cola....
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS.
CONCEPTOS CLAVE..
RESUMEN..
EJERCICIOS..
Capítulo 13 Estructura de datos no lineales árboles y grafos
INTRODUCCIÓN..
13.1. Introducción
13.2. Árboles
13.2.1. Terminología y representación de un árbol general
13.3. Árbol binario.
13.3.1. Terminología de los árboles binarios..
13.3.2. Árboles binarios completos ...
13.3.3. Conversión de un árbol general en árbol binario.
13.3.4. Representación de los árboles binarios ....
13.3.4.1. Representación por punteros ... 13.3.4.2. Representación por listas enlazadas..
13.3.4.3. Representación por arrays...
13.3.5. Recorrido de un árbol binario..
13.4. Árbol binario de búsqueda ....
13.4.1. Búsqueda de un elemento.
13.4.2. Insertar un elemento.
13.4.3. Eliminación de un elemento..
13.5. Grafos
13.5.1. Terminología de grafos.
13.5.2. Representación de grafos .....
13.5.2.1. Matriz de adyacencia...
13.5.2.2. Lista de adyacencia.....
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS..
CONCEPTOS CLAVE..
RESUMEN..
EJERCICIOS
Capítulo 14 Recursividad
INTRODUCCIÓN
14.1. La naturaleza de la recursividad
14.2. Recursividad directa e indirecta..
14.2.1. Recursividad indirecta..
14.2.2. Condición de terminación de la recursión ...
14.3. Recursión versus iteración...
14.4. Recursión infinita.
14.5. Resolución de problemas complejos con recursividad
14.5.1. Torres de Hanoi...
14.5.2.Búsqueda binaria recursiva .....
14.5.3. Ordenación rápida quicksort ...
14.5.3.1. Algoritmo quicksort.
14.5.4. Ordenación mergesort...
14.5.4.1. Algoritmo mergesort en Java
CONCEPTOS CLAVE..
RESUMEN....
EJERCICIOS.
PROBLEMAS..
PARTE III PROGRAMACIÓN ORIENTADA A OBJETOS Y UML 2.5.1..
Capítulo 15 Tipos abstractos de datos, objetos y modelado con UML 2.5.1
INTRODUCCIÓN ..
15.1. Programación estructurada procedimental ...
15.1.1. Limitaciones de la programación estructurada....
15.1.2. Modelado de objetos del mundo real: el camino a los objetos
15.2. Programación orientada a objetos
15.2.1. Objetos
15.2.2. Tipos abstractos de datos: CLASES.
15.3. Modelado e identificación de objetos .
15.4. Propiedades fundamentales de orientación a objetos.
15.4.1. Abstracción ....
15.4.2. La abstracción en el software ...
15.4.3. Encapsulamiento y ocultación de datos.
15.4.4. Herencia...
15.4.5. Reutilización o reusabilidad
15.4.6. Polimorfismo ..
15.5. Modelado de aplicaciones: UML..
15.5.1. Lenguaje de modelado ....
15.5.2. UML: el Lenguaje Unificado de Modelado..
15.6. Modelado y modelos...
15.7. Diagramas de UML 2.5.1...
15.8. Bloques de construcción componentes de UML 2.5.1 ...
15.8.1. Elementos estructurales ..
15.8.2. Elementos de comportamiento.
15.8.3. Elementos de agrupación..
15.9. Especificaciones de UML.
15.10. Historia de UML..
CONCEPTOS CLAVE.
RESUMEN...
ANEXO: TERMINOLOGÍA DE ORIENTACIÓN A OBJETOS
EJERCICIOS
Capítulo 16 Diseño de clases y objetos: representaciones gráficas en UML.
INTRODUCCION
16.1. Diseño y representación gráfica de objetos en UML
16.1.1. Representación gráfica en UML.
16.1.2. Características de los objetos.
16.1.3. Estado .
16.1.4. Múltiples instancias de un objeto
16.1.5. Evolución de un objeto
16.1.6. Comportamiento.
16.1.7. Identidad...
16.1.8. Los mensajes..
16.1.9. Responsabilidad y restricciones...
16.2. Diseño y representación gráfica de clases en UML
16.2.1. Representación gráfica de una clase
16.2.2. Declaración de una clase.
16.2.3. Reglas de visibilidad
16.2.4. Sintaxis.
16.3. Declaración de objetos de clases..
16.3.1. Acceso a miembros de la clase: encapsulamiento
16.3.2. Declaración de métodos.
16.3.3. Tipos de métodos..
16.4. Constructores ..
16.4.1. Constructor por defecto predeterminado
16.5. Destructores
16.6. Implementación de clases en C .
16.6.1. Archivos de cabecera y de clases.
16.6.2. Clases compuestas.
16.7. Recolección de basura..
16.7.1. El método finalize
CONCEPTOS CLAVE RESUMEN.
EJERCICIOS
LECTURAS RECOMENDADAS
Capítulo 17 Relaciones entre clases: delegaciones, asociaciones, agregaciones, herencia.
INTRODUCCION
17.1. Relaciones entre clases
17.2. Dependencia.
17.3. Asociación .
17.3.1. Multiplicidad
17.3.2. Restricciones en asociaciones..
17.3.3. Asociación cualificada..
17.3.4. Asociaciones reflexivas...
17.3.5. Diagrama de objetos..
17.3.6. Clases de asociación.
17.3.7. Restricciones en asociaciones
17.4. Agregación ..........
17.4.1. Composición...
17.5. Jerarquía de clases: generalización y especialización..
17.5.1. Jerarquías de generalización especialización..
17.6. Herencia: clases derivadas..
17.6.1. Herencia simple..
17.6.2. Herencia múltiple.
17.6.3. Niveles de herencia...
17.6.4. Declaración de una clase derivada ..
17.6.5. Consideraciones de diseño.
17.7. Accesibilidad y visibilidad en herencia...
17.71. Herencia pública..
17.7.2. Herencia privada.
17.7.3. Herencia protegida...
17.8. Un caso de estudio especial: herencia múltiple
17.8.1. Características de la herencia múltiple.
17.9. Clases abstractas...
17.9.1. Operaciones abstractas..
CONCEPTOS CLAVE...
RESUMEN
EJERCICIOS
PARTE IV METODOLOGÍA DE LA PROGRAMACIÓN Y DESARROLLO DE SOFTWARE
Capítulo 18 Ingeniería de software y metodología de la programación..
INTRODUCCIÓN ..
18.1. Introducción a la ingeniería de software: técnicas y modelos
18.1.1. Software propietario ..
18.1.2. Software abierto: código abierto open source ...
18.2. Proceso de desarrollo de software.
18.2.1. Actividades del proceso de desarrollo de software..
18.3. Ciclo de vida del desarrollo de software...
18.4. Modelos de procesos de desarrollo de software...
18.4.1. Métodos ágiles..
18.4.2. Prototipado.
18.5. Ciclo de vida del software "en cascada" waterfall
18.5.1. Modelo waterfall de Sommerville..
18.5.2. Modelo de cascada waterfall de Pressman..
18.5.3. Modelo tradicional de ciclo de vida del software "en cascada"
18.6. Metodología de la programación: análisis de especificaciones y requerimientos.
18.7. Diseño .
18.7.1. Diseño de algoritmos
18.8. Implementación codificación
18.9. Pruebas e integración..
18.9.1 Verificación
18.9.2. Técnicas de pruebas
18.9.3. Revisión general de validación y verificación de programas
18.10. Depuración de programas
18.10.1. Localización y reparación de errores..
18.10.2. Depuración de sentencias si -entonces-sino..
18.10.3. Los equipos de programación..
18.10.4. El depurador
18.11. Mantenimiento ...
18.11.1. La obsolescencia: programas obsoletos.
18.11.2. Iteración y evolución del software.
18.12. Documentación
18.12.1. Manual del usuario.
18.12.2. Manual de mantenimiento documentación para programadores
18.12.3. Reglas de documentación..
18.13. Depuración.
18.13.1. Localización y reparación de errores.
18.13.2. Depuración de sentencias si -entonces-si no..
18.13.3. Los equipos de programación.
18.14. Diseño de algoritmos..
18.15. Eficiencia .
18.15.1. Eficiencia versus legibilidad claridad
18.16. Portabilidad.
CONCEPTOS CLAVE
RESUMEN
Bibliografía y recursos de programación