Software Engineering Lecture 7/4

Software Engineering Lecture 7/4

前回の復習

オブジェクトの間の関係 このような関係はオブジェクトのインスタンス変数によって表される

3次元化学シミュレータの情報モデル

當間が出してくれたモデルを少し見てみよう。






グラフィックスの情報モデル

Tcl/Tk on GCL を使ってみよう。他のXLISPでも、それぞれグラフィック インタフェースがはずはずだ。グラフィクスの部分とオブジェクト指向的に 接続することにグラフィカルインタフェースに依存しないプログラムの 部分を増やすことができる。 Phigs も使えるようだし、Phigsはオブジェクト 指向的な3D Graphicsだけど、少し複雑なので、ここではTcl/Tkを最小限度 使うことにしよう。

% gcl
(in-package "TK")
(tkconnect)
(load "/usr/open/lib/gcl-2.2/gcl-tk/demos/widget.lisp")
とすると、 widget (Window gadget ウィジェット)と呼ばれるX-windowの 画面要素の例題が動く。例えば、canvas の2D plot などが参考になるはず だ。この部分のソースを調べながら使うことにしよう。 これを見ると、
(setf w '.w)
(tkconnect)
(toplevel w)
(wm :minsize w 300 300)
(setf c (conc w '.c))
(canvas c :width 300 :height 300)
(pack c)
などとすればグラフィックスを書くキャンバスができることが分かる。 canvas の中のオブジェクトは、以下のようにして作ったり動かしたり することができる。このあたりはEmacsからinfoでみてみるしかない。
(funcall c :create "oval" 20 20 26 26 :width 1 :outline "black" :tag  "a")
(funcall c :create "oval" 20 20 26 26 :width 1 :outline "black" :tag  "b")
(funcall c :create "oval" 20 20 26 26 :width 1 :outline "black" :tag  "c")
(funcall c :move "a" 10 10) 
(funcall c :move "b" 30 40) 
ここでオブジェクトについているタグをオブジェクトIDとして使うことが できる。
(defun step-one (tag)
     (setf time (+ time 0.1))                                             
))                           

(defun step-one ()           
    (setf time (+ time 0.1))
      (funcall c :move "a" (* 10 (sin time)) (* 10 (cos time)))
      (funcall c :move "b" (* 10 (sin time)) (* 10 (cos time)))          
      (funcall c :move "c" (* 10 (sin time)) (* 10 (cos time)))
)
とすればオブジェクトが動くのが見えるはずだ。このfuncallがオブジェクト 指向のメッセージ送信の役割を果たしている。しかし、Tcl/Tkではキャンバス の中のグラフィックスを動かすには、canvasにメッセージを送らないと いけない。

これを

(loop (step-one))
などとすることによりシミュレーションをおこなうことができる。もし、表示が とびとびになるようなら、極端に遅くなるが、
(loop (step-one)(update))
とすると一ステップごとに表示を変えてから動作する。ここらは、シミュレーションの 速度にあわせて調整する必要がある。

もちろん、このような方法ではオブジェクト指向ということはできない。しかし、 一般的に、オブジェクト指向プログラミングでは、オブジェクトは独立に動作 するという仮定で設計するが、プログラミング言語自身は逐次型の言語である のが普通だろう。すると、なんらかのスケジューラが必要になる。

ここでは実験装置がそれを担当することにしよう。


MVC (モデル、ビュー、コントローラ)



3次元化学シミュレータの状態モデル



情報モデルと状態モデル



Prev Next Kono's home page