A Functional Pattern System for Object-Oriented Design Thomas K¨uhne