cat-design-patterns Advanced Design Patterns workshop for CAT Concepts Object-Oriented OO Principles Documents UML Object Design Well-Formed Classes