Applying UML and Patterns : An Introduction to Object-Oriented An