next up previous
Next: 11.4 Generic Function Up: 11 データ指向型プログラミング Previous: 11.2 クロージャによるオブジェクトと手続きの一体化

11.3 メッセージ送信プログラミング

上のaccは,データと手続きを保存している構造をもっているオブジェクトの例に なる.このオブジェクトに対して,メッセージを送るとそのメッセージに対応 する手続きを返すget-methodと,そのメッセージに対応する手続きを実行する sendを定義すれば,

(defun get-method (object message)
  (funcall object message))

(defun send (object message &rest args)
  (apply (get-method object message) args))
のようになり,

> (send acc 'balance)
10.0
> (send acc 'withdraw 3)
7.0
> (send acc 'deposit 5)
12.0
> (send acc 'balance)
12.0
という具合に, オブジェクトへメッセージを送るという形の使い方が可能となる.

generated through LaTeX2HTML. M.Inaba 平成18年5月7日