 
 
 
 
 
   
 Next: 12.3 スロットの属性設定
Up: 12 オブジェクト指向プログラミング
 Previous: 12.1 CLOS
 
図形の面積を求める場合に,図形のパラメタが
異なるが,図形は何であろうと面積を求める関数は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日