Text this: Abstract data types in Java / Michael S. Jenkins.