ACHIEVING OBJECT-ORIENTED DESIGN WITH JAVA: A DETAILED HANDBOOK