2012年2月28日火曜日

開発環境

『初めての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 コメント:

コメントを投稿