Programming Abstractions in Java