Title: Design Patterns. Elements of Reusable Object-oriented Software