Ruby による数値計算デモ

高橋 憲義
2002/06

実行に必要なもの

使い方

demo.tar.gz を展開すると demo ディレクトリができます.

numex.rb が本体です.

% ruby numex.rb

とするとメニューが開くので初期値,ステップ数を設定して実行ボタンを押してください.

全体の構造

まず NumEx から Menu が呼ばれます.NumEx クラスは Menu の Observer として 登録されており,メニューの実行ボタンが押されると,Menu クラスから設定値を 引数として NumEx の update メソッドが呼ばれます.

NumEx の update メソッドでは数値計算用の Model クラスとデータ処理用の NData クラスのインスタンスが生成されます.

NData は Model の Observer として登録され,Model クラス内の数値計算の 1 ステップ毎に NData の update メソッドが呼ばれます.

NData は update が呼ばれると Model の get メソッドを呼んで数値計算の結果を 取得し,グラフを描きます.

問題

今後

中身

NumEx(numex.rb)

全体を管理するクラスです.

メソッド

menu_set(menu_hash)

モデルに渡すべき設定を { 設定名 => 設定値 } の形の Hash で渡します.

start

メニューウィンドウを開きます.

update(hash)

Observer の仕組みによりメニューウィンドウの実行ボタンが押された時に 呼ばれ,Hash としてメニューの設定内容を受けとります.

また,Model クラスと NData クラスのインスタンスを作成し,実行します.

Model(model.rb)

数値計算をするクラスです.

メソッド

run

数値計算のためのループがあります.

calc

x(n+1) = 2.0 * x(n)**2 - 1.0 という 漸化式の計算をします.

get

呼ばれた時点での x(n) の値を返します.

NData(data.rb)

データを加工します.

メソッド

update(obj, i)

obj オブジェクト(今の場合は Model クラスのインスタンス)からの更新情報を 受けとり,obj.get メソッドを呼び,数値計算の結果を取得します.

draw_graph

DCLを使ってグラフを描きます.

configure_event

DCL over GTK+ の初期設定をします.

expose_event

ウィンドウの再描画をします.