next up previous
Next: 12.3 スロットの属性設定 Up: 12 オブジェクト指向プログラミング Previous: 12.1 CLOS

12.2 クラス,メソッド,スロットアクセス

図形の面積を求める場合に,図形のパラメタが 異なるが,図形は何であろうと面積を求める関数はareaだけにしたい. さらに,新しい図形が増えたとしても,それまでの関数を変更する のではなく,その図形の面積の求め方を追加だけでよいように したい. そのようなことがCLOSでは可能である.

(defclass rectangle ()
  (height width))
(defclass circle ()
  (radius))

(defmethod area ((x rectangle))
  (* (slot-value x 'height)
     (slot-value x 'width)))

(defmethod area ((x circle))
  (* pi (expt (slot-value x 'radius) 2)))

(setq c (make-instance 'circle))
(setq r (make-instance 'rectangle))

> (setf (slot-value r 'height) 2
        (slot-value r 'width) 3)
> (setf (slot-value c 'radius) 3)

> (area c)
28.274333882308138d0
> (area r)
6


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