Java Principles of Object Oriented Programming