There are many books on programming languages, or on application frameworks, or on design patterns, and so on. Some try to squeeze a few distinct topics into a single book, which is a difficult thing to do well. This book is different. Although it covers such diverse topics as C++, Qt 4, design patterns, and some basic unified modeling language (UML), the authors manage to create a coherent textbook on writing software.
The book is intended for use in a university class on object-oriented (OO) programming with C++. Designing assignments for programming courses is a common problem: if they are too easy and artificial, the students will get bored and won’t learn much. On the other hand, real-life examples often require so much overhead that the very topic they are to demonstrate is lost. Using Qt, a popular cross-platform class library and application framework, allows for interesting examples without the need for additional libraries that might blur the picture. The book uses Qt 4, which is incompatible with Qt 3: the authors do warn that the examples won’t work with the latter. This is rather inconvenient, since currently Qt 3 is still more common, as it is bundled with each popular Linux distribution that includes the current versions of K desktop environment (KDE). On the other hand it should make the book relevant for longer.
There are five parts. The book starts with a C++ primer, very basic UML, and simple Qt 4 examples. Part 2 is the most important and covers more advanced topics: design patterns; containers; Qt widgets; modules for Extensible Markup Language (XML) and structured query language (SQL) processing; process and thread management; and reflective programming. The last three parts include C++ language references, programming exercises, and appendices.
The design patterns included in the book are selected from the “classic” patterns of the “gang of four” or Buschmann. This is consistent with its purpose as a university textbook on OO programming. The examples implement these patterns in the context of the Qt framework. This achieves two purposes: showing a working implementation of each pattern and teaching the proper use of classes from the Qt framework.
My overall impression of this book is positive. It certainly delivers as a textbook on software development. It will help people learn not just how to use C++ but how to actually write useful programs. I also liked the examples in the book, which are specifically designed to do something useful rather than something purely academic. I have one minor criticism about the examples and in particular the comments: they are not comprehensive for a book supposedly suitable for readers without previous knowledge of C or C++.