開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7)のVI部(クラスとオブジェクト指向プログラミング)のまとめ演習の練習問題7(コンポジション)を解いてみる。
7.
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 print "I am: ", __name__ class Lunch: def __init__(self): self.customer = Customer() self.employee = Employee() def order(self, foodName): self.customer.placeOrder(foodName, self.employee) def result(self): self.customer.printFood() class Customer: def __init__(self): self.food = None def placeOrder(self, foodName, employee): self.food = employee.takeOrder(foodName) def printFood(self): print self.food.name class Employee: def takeOrder(self, foodName): return Food(foodName) class Food: def __init__(self, name): self.name = name if __name__ == '__main__': lunch = Lunch() lunch.order("burritos") lunch.result() lunch.order("pizza") lunch.result()
入出力結果(Terminal)
$ ./python_program.py I am: __main__ burritos pizza $
上記のプログラムの構造(CustomerのメソッドからEmployeeメソッドが呼び出されるという構造、すなわち「顧客」が注文を出すと、それを「従業員」がうう蹴る、という「顧客主体」の構造)と逆の構造( EmployeeのメソッドからCustomerメソッドが呼び出されるという構造、すなわち「従業員」が注文を聞くと、それに「顧客」が応える、という「従業員主体」の構造)にプログラムを変更
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 print "I am: ", __name__ class Lunch: def __init__(self): self.employee = Employee() self.customer = Customer() def order(self, foodName): self.employee.takeOrder(foodName, self.customer) def result(self): self.employee.printFood() class Customer: def placeOrder(self, foodName): return Food(foodName) class Employee: def __init__(self): self.food = None def takeOrder(self, foodName, customer): self.food = customer.placeOrder(foodName) def printFood(self): print self.food.name class Food: def __init__(self, name): self.name = name if __name__ == '__main__': lunch = Lunch() lunch.order("burritos") lunch.result() lunch.order("pizza") lunch.result()
入出力結果(Terminal)
$ ./python_program.py I am: __main__ burritos pizza $
0 コメント:
コメントを投稿