ACHIEVING LOW-LEVEL DESIGN IN JAVA: A THOROUGH EXPLANATION