Object-oriented software engineering practical software development using UML and Java - Lethbridge, Timothy C. (McGraw-Hill, 2005)