Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, a book by Craig Larman