CONQUERING FOUNDATIONAL DESIGN IN JAVA: A PRACTICAL GUIDE