# Prefacio

C++ ha sido usado durante muchos años, antes de ser estandarizado en 1989, lo cual lo convierte en un lenguaje relativamente maduro comparado con otros que son populares hoy en día. Es un lenguaje muy importante para construir sistemas rápidos, eficientes, y de misiones críticas. C++ es también uno de los lenguajes más flexibles, dando a los desarrolladores muchas elecciones de estilos de programación para usar en códigos GUI de alto nivel así como en controladores de dispositivo de bajo nivel.
Por algunos años, en la década de los 90, C++ fue el lenguaje orientado a objetos (OO) más popular en uso, y muchos estudiantes de ciencias de la computación(CS) fueron introducidos a la Programación Orientada a Objetos(OOP) por medio de C++. Esto es debido a que C++ proporcionó una relativamente transición fácil a OOP para los programadores de C, y muchos profesores de CS habían sido formados previamente en C.
Comenzando alrededor de 1996, Java ganó favor por encima de C++ como el lenguaje OO principal para la enseñanza de los estudiantes. Hay un buen número de razones por las que Java ha ganado esa popularidad:
* El Lenguaje en sí mismo es más simple que C++.
* El lenguaje tiene un recolector de basura incorporado, por ello los programadores no necesitan preocuparse por sí mismos de la reasignación de memoria.
* Un juego estándar de clases GUI es incluida en el kit de desarrollo.
* La clase String incorporada soporta Unicode.
* Multithreading está incorporado dentro del lenguaje.
* Es mas sencillo construir y "conectar" archivos Java (JARs) de lo que es recompilar y reenlazar librerías.
* Muchos servidores web proporcionan APIs de Java para una integración sencilla.
* Los programas Java son independientes de la plataforma (Wintel, Solaris, MacOS, Linux, *nix, etc.).
Muchos de los beneficios de Java listados arriba pueden ser logrados con C++, usado en conjunción con Qt 4:
* Qt proporciona un comprensible juego de clases GUI que corren más rápido, se ven mejor y son mucho más flexibles que las clases Swing de Java.
* Señales y slots son mucho más fáciles de usar que las interfaces (Action|Event|Key)Listener en Java.
* Qt 4 tiene una arquitectura de conexiones que hace posible cargar código dentro de una aplicación sin recompilar o reenlazar.
* Qt 4 proporciona foreach, que hace la interacción a través de colecciones simple de leer y escribir.
Aunque Qt no proporciona una colección de recolectores, hay una varidedad de alternativas que se pueden utilizar para evitar la necesidad de borrar cada objeto directamente:
* Contenedores (Ver Sección 10.2)
* Padres e Hijos (Ver Sección 9.2)
* auto_ptr (Ver Sección 16.3.2)
* QPointer (Ver Sección 18.9).
* Subobjetos (Ver Sección 2.13)
* Objetos apilados (Ver Sección 19.3)
Usando C++ con Qt se vuelve algo muy parecido a Java en facilidad de uso, comprensibilidad y conveniencia. Esto sobrepasa significativamente a Java en las áreas de velocidad y eficiencia, haciendo posible desde aplicaciones de servidor de procesamiento intensivo hasta juegos de gráficos intensivos a alta velocidad.
Otro beneficio de aprender C++ con Qt viene del uso generalizado de QT en proyectos de código abierto. Esto es en realidad una gran riqueza de código abierto desde el cual puedes aprender, reusar y posiblemente ayudar a mejorar.

## Como usar este libro

La parte I contiene una introducción a C++, UML, y el núcleo Qt. Esta parte está diseñada para evitar seguir referenciando tanto como sea posible, y se presentar los tópicos en un orden y nivel de detalle que no debieran abrumar a quien es nuevo en C/C++.
En la parte II, encontrarás ideas de programación de alto nivel, módulos Qt y patrones de diseño. Aquí es donde presentamos caminos de desplazamiento en paradigma de la escritura de código y reorganización de objetos en una moda modular.
Para complementación y referencia, la parte III cubre en mayor profundidad algunas "secas" pero importantes características de C++ que hemos introducido en la parte I. En el momento en que el lector haya alcanzado este punto, esas ideas deberían ser mucho más fáciles de entender.
Al final de cada capítulo, encontrarás ejercicios y preguntas de revisión. La mayoría de los ejercicios de programación tienen soluciones disponibles en el Website. Para las preguntas, si las respuestas no se encuentran en el capítulo precedente, entonces a menudo habrá punteros señalando a donde las encontraremos. Si este libro es usado para un curso, estas preguntas deberían se hechas por el estudiante o por el profesor, en el salón de clases o en un examen.

## Una nota sobre los formatos

Lo que estas leyendo es solo un número de las posibles variaciones disponibles. Esto es porque el documento fue escrito originalmente en XML usando un estilo de "programación literal", hemos generado una variedad de versiones diferentes (viñetas laterales, libros de texto paragrafiados, con o sin soluciones, etc.) en una variedad de formatos distintos (html, pdf, ps, htmlhelp).
Cada ejemplo de programación es extraído desde el código fuente en trabajo. La versión web proporciona un enlace para cada código hacia su archivo fuente. Esto hace que sea sencillo probar los ejemplos por ti mismo. El texto y listas en la versión Web también contiene enlaces para cada librería de clase hacia su página de documentación.