# Justificación para este libro

Como en la Universidad de Suffolk, seguimos la tendencia popular y continuamos enseñando programación orientada a objetos usando C++. Por varios años enseñamos un curso de un semestre de OOP/C++ estándar que seguía una secuencia CS1-CS2 basada en el lenguaje de programación C. Los estudiantes desarrollaron substancial maestría del lenguaje C++ del núcleo y entendimiento de algunos conceptos de OO como son la encapsulación, rehechura y desarrollo de herramientas. Sin embargo, encontramos que STL es una librería que ofrece dificultades a los estudiantes y causa que pierdan mucho tiempo construyendo programación de bajo nivel y problemas de plantillas. STL no es capaz de escribir aplicaciones con interfaces gráficas, y algún otro framework debía ser usado en consecuencia.
Durante el verano del 2003 nos hartamos y decidimos desarrollar un libro que pudiera aprovechar OOP/C++ en un alto nivel. Buscamos proporcionar una introducción sustancial a la programación de GUI usando el framework Qt multiplataforma, así como tocar algunos patrones de diseño importantes que serían usados.
Diseñamos este primeramente como un libro de texto para ser usado en clases de la universidad, pero fue diseñado de forma extensible y repleta de información que le hiciera útil para lectores con un cierto rango de respaldos: para aquellos que ya programaban en C o algún otro lenguaje progresivo y desearan aprender programación OO y GUI, para aquellos que no tuvieran ese antecedente pero estuviesen familiarizados con Basic, Java, Python, o algún otro lenguaje de programación y desearan aprender C++. La primera parte del libro está encaminada a familiarizar a todas las audiencias con los elementos de C++, conceptos de OO, UML, y las clases Qt de núcleo.
Creemos que los lectores entienden mejor las ideas cuando las aplican, y encontramos que esto es especialmente cierto con los patrones de diseño. Muchas de las clases Qt o ejemplos de código son implementaciones concretas de los patrones de diseño más populares descritos en Gamma95. Para cada patrón de diseño que discutimos, hacemos disponible el código fuente de nuestro ejemplo e incluimos ejercicios que retan al lector a reusar, refinar y extender ese código.
El reuso de librerías requiere un entendimiento no solo de las librerías, sino también del sofware modular, el enlazador y diseño de librería. Hemos incluido una cantidad substancial de advertencias destiladas por la experiencia (nuestra y de nuestros estudiantes) y desde comunidades de discución en línea. Encontramos que esto ayudaba a nuestros estudiantes s hacer frente a la mayoría de los problemas que encontraron en cursos basados en las primeras versiones de este libro.
Utilizamos versiones preliminares de este libro en el curso de OOP/C++ de la Universidad de Suffolk durante cada semestre escolar de los años 2003-2004 hasta 2005-2006, con resultados prometedoramente ascendentes y con valiosas peticiones de nuestros estudiantes. En la versión anterior de este curso los estudiantes típicamente acostumbraban escribir cientos de líneas de código para programar sus proyectos. En contraste, con el énfasis en el reuso de código y la explotación de librerías de herramientas robustas, los estudiantes programan proyectos que tienen menos líneas de código del estudiante pero son mucho más interesantes, y creemos, mucho más valiosos como experiencias de aprendizaje.
Existen muchos libros de C++ por allí que también enseñan C++ o enseñan Qt, pero encontramos que los libros de C++ usan una variedad distinta de estilos de programación, y hacen énfasis en algunos puntos que nosotros no usamos mucho con Qt. los libros sobre Qt que hemos visto asumen previos conocimientos de C++. Este libro, por el contrario, asume que no se tiene experiencia programando C++ o C, y cubre las características de lenguaje de C++ que necesitas saber con el fin de usar las clases Qt 4 tan pronto como sea posible en ejemplos y asignaciones. Esto puede ser un útil libro de texto para enseñar C++ y patrones de diseño, con énfasis en el reuso de código abierto.
Hasta donde podemos saber, no hay libros de C++ a nivel universitario que también contengan revisión de preguntas, ejercicios y lecturas alternativas para los instructores.
En Marzo del 2009 Paynalton, un aprendiz autodidacta de programación, buscaba una manera de crear una interfase gráfica en Qt 4 y buscó documentación que le enseñara a realizar esta tarea. Sin embargo la única fuente apropiada que encontró fue este libro que había sido publicado en la red. Por ello comenzó a leerlo al tiempo que realizaba una traducción al castellano con el fin de aprender y, al mismo tiempo, ayudar a otros que posteriormente buscaran este mismo conocimiento a encontrar la documentación en su idioma.