/* visitor patterns in CORBA */ interface undergrad; /* prototypes - no forward reference */ interface grad; interface studentvisitor { Object visitu(inout undergrad u); /* no overloading in CORBA! */ Object visitg(inout grad g); }; interface studentvisitee /* abstract class */ { attribute string name; attribute double gpa; attribute long tuition; attribute studentvisitee next; /* linked list */ Object accept(in studentvisitor visitor); long f(); // test }; /* visitee subclasses */ interface undergrad : studentvisitee { attribute string major; }; interface grad : studentvisitee { attribute string thesistopic; }; /* visitor subclasses don't need new declarations? */ interface printvisitor : studentvisitor {}; interface tuitionadjustor : studentvisitor {};