ACHIEVING OBJECT-ORIENTED DESIGN IN JAVA: THE THOROUGH MANUAL