Objects, Abstraction, Data Structures and Design: Using C++