Objects, Data Structures and Abstraction: Using Java