Design Patterns in Real-Life Object-Oriented Software