1.2. Capítulos

Aquí está una breve descripción de los capítulos que contiene este libro:

Parte 1: Construcción de sistemas estables

1. Manejar excepciones. Manejar errores ha sido siempre un problema en programación. Incluso si obedientemente devuelve información del error o pone una bandera, la función que llama puede simplemente ignorarlo. Manejar excepciones es una cualidad primordial en C++ que soluciona este problema permitiéndole "lanzar" un objeto fuera de su función cuando ocurre un error crítico. Tire diferentes tipos de objetos para diferentes errores, y la función que llama "coge" estos objetos en rutinas separadas de gestión de errores. Si lanza una excepción, no puede ser ignorada, de modo que puede garantizar que algo ocurrirá en respuesta a su error. La decisión de usar excepciones afecta al diseño del código positivamente, de modo fundamental.

2. Programación defensiva. Muchos problemas de software pueden ser prevenidos. Programar de forma defensiva es realizar cuidadosamente código de tal modo que los bugs son encontrados y arreglados pronto antes que puedan dañar en el campo. Usar aserciones es la única y más importante forma para validar su código durante el desarrollo, dejando al mismo tiempo seguimiento ejecutable de la documentación en su código que muestra sus pensamientos mientras escribe el código en primer lugar. Pruebe rigurosamente su código antes de darlo a otros. Un marco de trabajo de pruebas unitario automatizado es una herramienta indispensable para el éxito, en el desarrollo diario de software.

Parte 2: La biblioteca estándar de C++

3. Cadenas en profundidad. La actividad más común de programación es el procesamiento de texto. La clase string de C++ libera al programador de los temas de gestión de memoria, mientras al mismo tiempo proporciona una fuente de recursos para el procesamiento de texto. C++ también facilita el uso de una gran variedad de caracteres y locales para las aplicaciones de internacionalización.

4. Iostreams. Una de las bibliotecas original de C++-la que proporciona la facilidad básica de I/O-es llamada iostreams. Iostreams está destinado a reemplazar stdio.h de C con una biblioteca I/O que es más fácil de usar, más flexible, y extensible- que puede adaptarla para trabajar con sus nuevas clases. Este capítulo le enseña cómo hacer el mejor uso de la biblioteca actual I/O, fichero I/O, y formateo en memoria.

5. Plantillas en profundidad. La distintiva cualidad del "C++ moderno" es el extenso poder de las plantillas. Las plantillas hacen algo más que sólo crear contenedores genéricos. Sostienen el desarrollo de bibliotecas robustas, genéricas y de alto rendimiento.Hay mucho por saber sobre plantillas-constituyen, como fue, un sub-lenguaje dentro del lenguaje C++, y da al programador un grado impresionante de control sobre el proceso de compilación. No es una exageración decir que las plantillas han revolucionado la programación de C++.

6. Algoritmos genéricos. Los algoritmos son el corazón de la informática, y C++, por medio de la facilidad de las plantillas, facilita un impresionante entorno de poder, eficiencia, y facilidad de uso de algoritmos genéricos. Los algoritmos estándar son también personalizables a través de objetos de función. Este capítulo examina cada algoritmo de la biblioteca. (Capítulos 6 y 7 abarcan esa parte de la biblioteca Estándar de C++ comúnmente conocida como Biblioteca de Plantilla Estándar, o STL.)

7. Contenedores genéricos e Iteradores. C++ proporciona todas las estructuras comunes de datos de modo de tipado fuerte. Nunca necesita preocuparse sobre qué tiene tal contenedor. La homogenidad de sus objetos está garantizada. Separar la #FIXME traversing de un contenedor del propio contenedor, otra realización de plantillas, se hace posible por medio de los iteradores. Este ingenioso arreglo permite una aplicación flexible de algoritmos a contenedores usando el más sencillo de los diseños.

Parte 3: Temas especiales

8. Identificación de tipo en tiempo de ejecución. La identificación de tipo en tiempo de ejecución (RTTI) encuentra el tipo exacto de un objeto cuando sólo tiene un puntero o referencia al tipo base. Normalmente, tendrá que ignorar a propósito el tipo exacto de un objeto y permitir al mecanismo de función virtual implementar el comportamiento correcto para ese tipo. Pero ocasionalmente (como las herramientas de escritura de software tales como los depuradores) es útil para conocer el tipo exacto de un objeto-con su información, puede realizar con frecuencia una operación en casos especiales de forma más eficiente. Este capítulo explica para qué es RTTT y como usarlo.

9. Herencia múltiple. Parece sencillo al principio: Una nueva clase hereda de más de una clase existente. Sin embargo, puede terminar con copias ambiguas y múltiples de objetos de la clase base. Ese problema está resuelto con clases bases virtuales, pero la mayor cuestión continua: ¿Cuándo usarla? La herencia múltiple es sólo imprescindible cuando necesite manipular un objeto por medio de más de un clase base común. Este capítulo explica la sintaxis para la herencia múltiple y muestra enfoques alternativos- en particular, como las plantillas solucionan un problema típico. Usar herencia múltiple para reparar un interfaz de clase "dañada" demuestra un uso valioso de esta cualidad.

10. Patrones de diseño. El más revolucionario avance en programación desde los objetos es la introducción de los patrones de diseño. Un patrón de diseño es una codificación independiente del lenguaje de una solución a un problema de programación común, expresado de tal modo que puede aplicarse a muchos contextos. Los patrones tales como Singleton, Factory Method, y Visitor ahora tienen lugar en discusiones diarias alrededor del teclado. Este capítulo muestra como implementar y usar algunos de los patrones de diseño más usados en C++.

11. Programación concurrente. La gente ha llegado a esperar interfaces de usuario sensibles que (parece que) procesan múltiples tareas simultáneamente. Los sistemas operativos modernos permiten a los procesos tener múltiples hilos que comparten el espacio de dirección del proceso. La programación multihilo requiere una perspectiva diferente, sin embargo, y viene con su propio conjunto de dificultades. Este capítulo utiliza un biblioteca disponible gratuitamente (la biblioteca ZThread por Eric Crahen de IBM) para mostrar como gestionar eficazmente aplicaciones multihilo en C++.