Design Patterns : Elements of Reusable Object-Oriented Software with Applying Uml and Patterns : An Introduction to Object-Oriented Analysis and Design and the Unified Process : Elements of Reusable Object-Oriented Software with Applying Uml and Patterns