Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process