クラスの設計

あークラス設計をまずったかなぁ。
金属中不純物の拡散コード。やることは、不純物のいる場所から別の場所へ移る単位時間あたりの確率を計算(これ重い)、それを合計して乱数をふって不純物の一つを選んで実際に動かす。一度移動した場所は遷移確率を記憶しておく。不純物は金属原子4つからなる四面体の中心にいる。現在の四面体からデローニ分割という手法で隣接する四面体を同定する。これも計算面倒なんで一度計算したら記憶しておく。必要なルーチンは

  • ローカルな原子配列から遷移確率を計算する
  • 四面体は頂点の4つの原子の番号で同定。整数4つを与えると計算済み四面体ならデータを返し、まだなら計算するルーチン
  • 隣接する四面体の情報を返すルーチン

問題は

  • 不純物のクラスと、各場所のクラス(遷移確率など記憶)のどちらが主でどちらが従か。従クラスは主クラスのメンバをいじらない。
  • 整数4つを与えると場所(四面体)を返すメソッドは二分木サーチでやるとして、場所のクラスの static なメソッドとして定義するのか、別のクラスを作って定義するのか。別のクラスの場合は friend かなんかで場所クラスを覗けるようにしないといけない。

主従がはっきりしない設計をしたため、きちんと忘れずに必要な変数更新ができているかはっきりしないコードになった。