開発環境
- 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 コメント:
コメントを投稿