Object-oriented software engineering using UML, Patterns, and Java. (©2014)