next up previous
Next: 13.3 インスタンスの生成 Up: 13 シミュレーション例 Previous: 13.1 クラスの定義

13.2 メソッドの定義

メソッド定義は以下のようにします. 浮遊物クラスの:initは関数instanceにより生成する際に 利用されるメソッドです.

(defvar *initial-height* 25)
(defvar *asteroid-width* 25)

(defmethod set-pname ((p particle) v)
  (setf (pname p) v))
(defmethod set-mass ((p particle) v)
  (setf (mass p) v))
(defmethod set-x-position ((p particle) v)
  (setf (x-position p) v))
(defmethod set-y-position ((p particle) v)
  (setf (y-position p) v))
(defmethod set-x-speed ((p particle) v)
  (setf (x-speed p) v))
(defmethod set-y-speed ((p particle) v)
  (setf (y-speed p) v))
(defmethod set-x-acceleration ((p particle) v)
  (setf (x-acceleration p) v))
(defmethod set-y-acceleration ((p particle) v)
  (setf (y-acceleration p) v))
;;;
(defmethod position-of ((p particle))
  (list (x-position p) (y-position p)))
(defmethod velocity-of ((p particle))
  (list (x-speed p) (y-speed p)))
(defmethod acceleration-of ((p particle))
  (list (x-acceleration p) (y-acceleration p)))
;;;
(defmethod new-position ((p particle))
  (setf (x-position p)
    (+ (x-position p) (x-speed p)))
  (setf (y-position p)
    (+ (y-position p) (y-speed p))))
(defmethod new-velocity ((p particle))
  (setf (x-speed p)
    (+ (x-speed p) (x-acceleration p)))
  (setf (y-speed p)
    (+ (y-speed p) (y-acceleration p))))
(defmethod status ((p particle))
  (format t  "~%~a's Pos:~a Vel:~a Acc:~a"
          (pname p)
          (position-of p)
          (velocity-of p)
          (acceleration-of p)))
(defmethod crashed? ((p particle))
  (and (> (y-position p) *initial-height*)
       (not (< (x-position p) 0))
       (< (x-position p) *asteroid-width*)))
pname,x-position,set-pnameなどがメソッド名です. そのメソッド名の次にはそのメソッドへの引数がきます. ロケットはパーティクルクラスのサブクラスなので, パーティクルクラスのメソッドをすべて継承します. そのため,ロケットのメソッドは以下のように ロケットに特有のメソッドのみの定義となります.

(defvar *gravity* '(0 4))

(defmethod set-motor ((p rocket) force)
  (setf (motor-force p) force)
  (setf (x-acceleration p)
    (+ (car *gravity*) (car force)))
  (setf (y-acceleration p)
    (+ (cadr *gravity*) (cadr force))))

(defmethod status ((p rocket))
  (format t "~%~a's Pos:~a Vel:~a Acc:~a"
          (pname p)
          (position-of p)
          (velocity-of p)
          (acceleration-of p))
  (format t " Motor:~a" (motor-force p)))


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