import extensions; import system'routines; class Operable { Operable = self; operate() = "delegate implementation"; } class Delegator { prop object Delegate; constructor() { Delegate := nil } operate() { // if the object does not support "get&operable" message - returns nil var operable := Delegate.Operable \ back:nil; if (nil == operable) { ^ "default implementation" } else { ^ operable.operate() } } } public program() { var delegator := new Delegator(); new::(nil, new Object(), new Operable()).forEach:(o) { delegator.Delegate := o; console.printLine(delegator.operate()) } }