Object-Oriented Design in C++ Using the Standard Template Library