pattern Objectifier(Abstractor, ConcreteClass, Client, someMethod, method[]) class Abstractor { abstract * method[](*); } class ConcreteClass extends Abstractor { * method[](*) { } } class Client { ConcreteClass ref; * someMethod(*) { ref.method[some i](); } } } pattern ObjectRecursion(Handler, Recurser, Terminator, Initiator, someMethod, handleRequest) extends Objectifier(Handler, (Recursor[]+Terminator[]), Initiator, someMethod, handleRequest) { class Recursor[] { * handleRequest(*) { redirect inTypeFamily *.handleRequest(*); } } class Terminator[] { * handleRequest(*) { } } }