The subtitle of this book is Principled design with implementations in C++ and Java . It presents a semi-formal introduction to OO software design and application programming.
It does not teach programming (it assumes the reader is competent in C++) or design (as a book on UML would do) but attempts to bridge the gap between design and implementation. In particular it makes use of a semi- formal behaviour specification language based on state-transition concepts. For example, it starts with the state diagram of a simple binary counter and then implements it in C and C++; to show the problems of non-OO approach and how this can be overcome. The object behaviour specification language is then described and an abstract model of a list specified (the important of abstract models is emphasised so that a model can be proved correct independent of implementation). Serial and parallel implementations are then described. The book continues with this semi-formal approach, formulating primitives to build up a hierarchy of containers. The concept of ensemble methods (which treat all items in a container as a group) is discussed and how effective they can be in parallel processing implementations. The main implementation language is C++ with a final chapter using Java (of particular interest is the use of threads which enable the implementation of ensemble methods in a parallel/distributed environment).
Not the usual programming/design book! Well worth considering for a second level software-engineering module (following a first level programming module) which could then be followed by a third level module on formal methods.