CONQUERING FUNDAMENTAL DESIGN IN JAVA: A THOROUGH EXPLANATION