ACHIEVING OBJECT-ORIENTED DESIGN WITH JAVA: THE DETAILED MANUAL