Next: 13.3 インスタンスの生成
Up: 13 オブジェクト指向プログラミングの例
Previous: 13.1 クラスの定義
メソッド定義は以下のようにする.
浮遊物クラスの:initは関数instanceにより生成する際に
利用されるメソッドである.
(defmethod particle
(:init ()
(setq pname nil
mass 1
x-position 0
y-position 0
x-speed 0
y-speed 0
x-acceleration (car *gravity*)
y-acceleration (cadr *gravity*))
self)
(pname () pname)
(mass () mass)
(x-position () x-position)
(y-position () y-position)
(x-speed () x-speed)
(y-speed () y-speed)
(x-acceleration () x-acceleration)
(y-acceleration () y-acceleration)
(set-pname (v) (setq pname v))
(set-mass (v) (setq mass v))
(set-x-position (v) (setq x-position v))
(set-y-position (v) (setq y-position v))
(set-x-speed (v) (setq x-speed v))
(set-y-speed (v) (setq y-speed v))
(set-x-acceleration (v) (setq x-acceleration v))
(set-y-acceleration (v) (setq y-acceleration v))
(position-of ()
(list (send self 'x-position)
(send self 'y-position)))
(velocity-of ()
(list (send self 'x-speed)
(send self 'y-speed)))
(acceleration-of ()
(list (send self 'x-acceleration)
(send self 'y-acceleration)))
(set-position (x y)
(send self 'set-x-position x)
(send self 'set-y-position y))
(set-velocity (x y)
(send self 'set-x-speed x)
(send self 'set-y-speed y))
(new-position ()
(send self 'set-x-position
(+ (send self 'x-position)
(send self 'x-speed)))
(send self 'set-y-position
(+ (send self 'y-position)
(send self 'y-speed))))
(new-velocity ()
(send self 'set-x-speed
(+ (send self 'x-speed)
(send self 'x-acceleration)))
(send self 'set-y-speed
(+ (send self 'y-speed)
(send self 'y-acceleration))))
(status ()
(format t
"~%~a's Pos:~a Vel:~a Acc:~a"
(send self 'pname)
(send self 'position-of)
(send self 'velocity-of)
(send self 'acceleration-of)))
(crashed? ()
(and (> (send self 'y-position)
*initial-height*)
(not (< (send self 'x-position) 0))
(< (send self 'x-position)
*asteroid-width*)))
)
pname,x-position,set-pnameなどがメソッド名である.
そのメソッド名の次にはそのメソッドへの引数がくるとする.
ロケットはパーティクルクラスのサブクラスなので,
パーティクルクラスのメソッドをすべて継承する.
そのため,ロケットのメソッドは以下のように
ロケットに特有のメソッドのみの定義となる.
(defmethod rocket
(:init () (setq motor-force '(0 0)) self)
(set-motor-force (v) (setq motor-force v))
(motor-force () motor-force)
(set-motor (force)
(send self 'set-motor-force force)
(send self 'set-x-acceleration
(+ (car *gravity*) (car force)))
(send self 'set-y-acceleration
(+ (cadr *gravity*) (cadr force))))
(status
()
(format t "~%~a's Pos:~a Vel:~a Acc:~a"
(send self 'pname)
(send self 'position-of)
(send self 'velocity-of)
(send self 'acceleration-of))
(format t " Motor:~a" (send self 'motor-force)))
)
generated through LaTeX2HTML. M.Inaba 平成18年5月7日