Documentos de Académico
Documentos de Profesional
Documentos de Cultura
i
i
i
ndice general
1. Introduccin a los Objetos 1
1.1. El progreso de abstraccin . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Cada objeto tiene una interfaz . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. La implementacin oculta . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Reutilizar la implementacin . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5. Herencia: reutilizacin de interfaces . . . . . . . . . . . . . . . . . . . . 7
1.5.1. Relaciones es-un vs. es-como-un . . . . . . . . . . . . . . . . . 10
1.6. Objetos intercambiables gracias al polimorfismo . . . . . . . . . . . . . 11
1.7. Creacin y destruccin de objetos . . . . . . . . . . . . . . . . . . . . . . 15
1.8. Gestin de excepciones: tratamiento de errores . . . . . . . . . . . . . . 16
1.9. Anlisis y diseo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9.1. Fase 0: Hacer un plan . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9.1.1. Declaracin de objetivos . . . . . . . . . . . . . . . . . 19
1.9.2. Fase 1: Qu estamos haciendo? . . . . . . . . . . . . . . . . . . 19
1.9.3. Fase 2: Cmo podemos construirlo? . . . . . . . . . . . . . . . 22
1.9.3.1. Las cinco etapas del diseo de objetos . . . . . . . . . 23
1.9.3.2. Directrices para desarrollo de objetos . . . . . . . . . . 24
1.9.4. Fase 3: Construir el ncleo . . . . . . . . . . . . . . . . . . . . . 25
1.9.5. Fase 4: Iterar los casos de uso . . . . . . . . . . . . . . . . . . . . 25
1.9.6. Fase 5: Evolucin . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.9.7. Los planes valen la pena . . . . . . . . . . . . . . . . . . . . . . . 27
1.10. Programacin Extrema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.9. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3. C en C++ 63
3.1. Creacin de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.1.1. Valores de retorno de las funciones . . . . . . . . . . . . . . . . . 65
3.1.2. Uso de funciones de libreras C . . . . . . . . . . . . . . . . . . . 66
3.1.3. Creacin de libreras propias . . . . . . . . . . . . . . . . . . . . 66
3.2. Control de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.1. Verdadero y falso . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.2. if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.3. while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.2.4. do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.2.5. for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.2.6. Las palabras reservadas break y continue . . . . . . . . . . . 70
3.2.7. switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.2.8. Uso y maluso de goto . . . . . . . . . . . . . . . . . . . . . . . . 73
3.2.9. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3. Introduccin a los operadores . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3.1. Precedencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.3.2. Auto incremento y decremento . . . . . . . . . . . . . . . . . . . 75
3.4. Introduccin a los tipos de datos . . . . . . . . . . . . . . . . . . . . . . 76
3.4.1. Tipos predefinidos bsicos . . . . . . . . . . . . . . . . . . . . . . 76
3.4.2. booleano, verdadero y falso . . . . . . . . . . . . . . . . . . . . . 77
3.4.3. Especificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.4.4. Introduccin a punteros . . . . . . . . . . . . . . . . . . . . . . . 79
3.4.5. Modificar objetos externos . . . . . . . . . . . . . . . . . . . . . . 82
V
i
i
Volumen1 2012/1/12 13:52 page VI #6
i
i
i
i
i
i
ndice general
3.4.6. Introduccin a las referencias de C++ . . . . . . . . . . . . . . . 84
3.4.7. Punteros y Referencias como modificadores . . . . . . . . . . . 85
3.5. Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.5.1. Definicin de variables al vuelo . . . . . . . . . . . . . . . . . 87
3.6. Especificar la ubicacin del espacio de almacenamiento . . . . . . . . . 89
3.6.1. Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.6.2. Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.6.2.1. Variables registro . . . . . . . . . . . . . . . . . . . . . 90
3.6.3. Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.6.4. extern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.6.4.1. Enlazado . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6.5. Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6.5.1. Valores constantes . . . . . . . . . . . . . . . . . . . . . 94
3.6.6. Volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.7. Los operadores y su uso . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.7.1. Asignacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
i
i
i
i
i
i
ndice general
3.8.3. Programas ms claros gracias a enum . . . . . . . . . . . . . . . 112
3.8.3.1. Comprobacin de tipos para enumerados . . . . . . . 114
3.8.4. Cmo ahorrar memoria con union . . . . . . . . . . . . . . . . 114
3.8.5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.8.5.1. Punteros y arrays . . . . . . . . . . . . . . . . . . . . . 117
3.8.5.2. El formato de punto flotante . . . . . . . . . . . . . . . 120
3.8.5.3. Aritmtica de punteros . . . . . . . . . . . . . . . . . . 121
3.9. Consejos para depuracin . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.9.1. Banderas para depuracin . . . . . . . . . . . . . . . . . . . . . . 124
3.9.1.1. Banderas de depuracin para el preprocesador . . . . 124
3.9.1.2. Banderas para depuracin en tiempo de ejecucin . . 124
3.9.2. Convertir variables y expresiones en cadenas . . . . . . . . . . . 126
3.9.3. La macro C assert() . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.10. Direcciones de funcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.10.1. Definicin de un puntero a funcin . . . . . . . . . . . . . . . . 127
3.10.2. Declaraciones y definiciones complicadas . . . . . . . . . . . . . 128
3.10.3. Uso de un puntero a funcin . . . . . . . . . . . . . . . . . . . . 129
3.10.4. Arrays de punteros a funciones . . . . . . . . . . . . . . . . . . . 129
3.11. Make: cmo hacer compilacin separada . . . . . . . . . . . . . . . . . 130
i
i
ndice general
4.7.1. Importancia de los ficheros de cabecera . . . . . . . . . . . . . . 158
4.7.2. El problema de la declaracin mltiple . . . . . . . . . . . . . . 160
4.7.3. Las directivas del preprocesador #define, #ifndef y #endif . . . 160
4.7.4. Un estndar para los ficheros de cabecera . . . . . . . . . . . . . 161
4.7.5. Espacios de nombres en los ficheros de cabecera . . . . . . . . . 162
4.7.6. Uso de los ficheros de cabecera en proyectos . . . . . . . . . . . 162
4.8. Estructuras anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
4.8.1. Resolucin de mbito global . . . . . . . . . . . . . . . . . . . . 166
4.9. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
4.10. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
5. Ocultar la implementacin 171
5.1. Establecer los lmites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
5.2. Control de acceso en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 172
5.2.1. protected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.3. Amigos (friends) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.3.1. Amigas anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.3.2. Es eso puro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
5.4. Capa de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
5.5. La clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
5.5.1. Modificaciones en Stash para usar control de acceso . . . . . . 181
5.5.2. Modificar Stack para usar control de acceso . . . . . . . . . . . 181
5.6. Manejo de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
5.6.1. Ocultar la implementacin . . . . . . . . . . . . . . . . . . . . . 182