Mastering Object-Oriented Design in C++