Practical C++ Design: From Programming to Architecture