% Using the class linguistic abstraction declare class Counter attr val meth browse {Browse @val} end meth inc(Value) val := @val + Value end meth init(Value) val := Value end end declare C = {New Counter init(0)} {C browse} {C inc(1)} {C browse} % dynamic dispatching example declare class C1 meth m2(?X) {self m3(X)} end meth m3(?X) X = 13 end end declare class C2 from C1 meth m2(?X) X = 22 end meth m3(?X) X = 23 end meth m1(?X) C1, m2(X) end end declare class C3 from C2 meth init skip end meth m2(?X) X = 32 end meth m3(?X) X = 33 end end declare O3 = {New C3 init} {Browse {O3 m1($)}} declare class ManyMethods meth nil skip end meth '|'(M Ms) {self M} {self Ms} end end declare C = {New class $ from Counter ManyMethods end init(0)} {C browse} {C inc(1)} {C browse} {C [inc(3) browse inc(2) browse]}