「物理シミュレーション・フレームワーク」(以下、OPSフレームワーク*1)ってのをブラックボックス的に考えて、要求されるもの、成果物として得られる物を考えてみましょう。 要求されるものは、物理系をモデリングした結果得られるものになりますが、これは後日にして、まずは成果物を考えましょう。
OPSフレームワークの成果物というとシミュレーション結果のデータになりそうですが*2、ここではシミュレーション・プログラムの生成とその実行の間にワンクッション置くことにします。 すなわち、OPS フレームワークはシミュレーションを実行するオブジェクトを生成するコンポーネントであるとします。
もう少し具体的に言うと、以下のようなシミュレーション実行のためのインターフェースを定義して*3、
public interface Simulator{ void simulate(); }
OPSフレームワークはこの Simulator オブジェクトを生成するファクトリ・クラス(ファクトリ・コンポーネント)とするのです。 このようにすることで、シミュレーションの生成と実装を分離できるようになります。 まぁ、開発者側のメリットが主ですが。
Simulator オブジェクトは simulate() メソッドを呼び出すことによってシミュレーションを開始します。 Simulator オブジェクトとして種々の実装を渡すことによって、シミュレーションを別スレッドで実行したり、シリアライズしてネットワーク上の他のPC上へ送って実行したり出来るようになります。 もちろんそういう実装を提供すればですが。