Chapter #4 Examples in Oz %%%%%%%%%%%%%%%%%%% Chapter - 4 %%%%%%%%%%%%%%%%%%%%%% % 4.4 class OnlyOnionsV meth init skip end meth forSkewer(?$) true end meth forOnion(S ?$) {S onlyOnions($)} end meth forLamb(S ?$) false end meth forTomato(S ?$) false end end % 4.36 class IsVegetarianV meth init skip end meth forSkewer(?$) true end meth forOnion(S ?$) {S isVegetarian($)} end meth forLamb(S ?$) false end meth forTomato(S ?$) {S isVegetarian($)} end end % 4.16 class ShishD feat ooFn : {New OnlyOnionsV init} ivFn : {New IsVegetarianV init} meth init skip end meth onlyOnions(?$) raise abstract() end end meth isVegetarian(?$) raise abstract() end end end class Skewer from ShishD meth init skip end meth onlyOnions(?$) {self.ooFn forSkewer($)} end meth isVegetarian(?$) {self.ivFn forSkewer($)} end end class Onion from ShishD feat Shish meth init(S) self.Shish = S end meth onlyOnions(?$) {self.ooFn forOnion(self.Shish $)} end meth isVegetarian(?$) {self.ivFn forOnion(self.Shish $)} end end class Lamb from ShishD feat Shish meth init(S) self.Shish = S end meth onlyOnions(?$) {self.ooFn forLamb(self.Shish $)} end meth isVegetarian(?$) {self.ivFn forLamb(self.Shish $)} end end class Tomato from ShishD feat Shish meth init(S) self.Shish = S end meth onlyOnions(?$) {self.ooFn forTomato(self.Shish $)} end meth isVegetarian(?$) {self.ivFn forTomato(self.Shish $)} end end % 4.43 class RemoveAnchovyV meth init skip end meth forCrust(?$) {New Crust init} end meth forCheese(P ?$) {New Cheese init({P removeAnchovy($)})} end meth forOlive(P ?$) {New Olive init({P removeAnchovy($)})} end meth forAnchovy(P ?$) {P removeAnchovy($)} end meth forSausage(P ?$) {New Sausage init({P removeAnchovy($)})} end end class TopAnchovyWithCheeseV meth init skip end meth forCrust(?$) {New Crust init} end meth forCheese(P ?$) {New Cheese init({P topAnchovyWithCheese($)})} end meth forOlive(P ?$) {New Olive init({P topAnchovyWithCheese($)})} end meth forAnchovy(P ?$) {New Cheese init({New Anchovy init({P topAnchovyWithCheese($)})})} end meth forSausage(P ?$) {New Sausage init({P topAnchovyWithCheese($)})} end end class SubstituteAnchovyByCheeseV meth init skip end meth forCrust(?$) {New Crust init} end meth forCheese(P ?$) {New Cheese init({P substituteAnchovyByCheese($)})} end meth forOlive(P ?$) {New Olive init({P substituteAnchovyByCheese($)})} end meth forAnchovy(P ?$) {New Cheese init({P substituteAnchovyByCheese($)})} end meth forSausage(P ?$) {New Sausage init({P substituteAnchovyByCheese($)})} end end % 4.41 class PizzaD feat remFn : {New RemoveAnchovyV init} topFn : {New TopAnchovyWithCheeseV init} subFn : {New SubstituteAnchovyByCheeseV init} meth removeAnchovy(?$) raise abstract() end end meth topAnchovyWithCheese(?$) raise abstract() end end meth substituteAnchovyByCheese(?$) raise abstract() end end end class Crust from PizzaD meth init skip end meth removeAnchovy(?$) {self.remFn forCrust($)} end meth topAnchovyWithCheese(?$) {self.topFn forCrust($)} end meth substituteAnchovyByCheese(?$) {self.subFn forCrust($)} end end class Cheese from PizzaD feat P meth init(Pi) self.P = Pi end meth removeAnchovy(?$) {self.remFn forCheese(self.P $)} end meth topAnchovyWithCheese(?$) {self.topFn forCheese(self.P $)} end meth substituteAnchovyByCheese(?$) {self.subFn forCheese(self.P $)} end end class Olive from PizzaD feat P meth init(Pi) self.P = Pi end meth removeAnchovy(?$) {self.remFn forOlive(self.P $)} end meth topAnchovyWithCheese(?$) {self.topFn forOlive(self.P $)} end meth substituteAnchovyByCheese(?$) {self.subFn forOlive(self.P $)} end end class Anchovy from PizzaD feat P meth init(Pi) self.P = Pi end meth removeAnchovy(?$) {self.remFn forAnchovy(self.P $)} end meth topAnchovyWithCheese(?$) {self.topFn forAnchovy(self.P $)} end meth substituteAnchovyByCheese(?$) {self.subFn forAnchovy(self.P $)} end end class Sausage from PizzaD feat P meth init(Pi) self.P = Pi end meth removeAnchovy(?$) {self.remFn forSausage(self.P $)} end meth topAnchovyWithCheese(?$) {self.topFn forSausage(self.P $)} end meth substituteAnchovyByCheese(?$) {self.subFn forSausage(self.P $)} end end |