Data Structures and Algorithms with Object-Oriented Design Patterns in C++ - R.Preiss Bruno (Wiley, 1998)
An object-oriented learning framework for creating good software design.