倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

出力方法をシミュレーション設計図で指定する 其ノ壱

前々回の復習


前々回、自作の DataOutputter クラスをシミュレーション設計図から指定する方法を見ました。

簡単に復習しておくと、DataOutputter インターフェースの自作の実装クラス ConsoleOutputter があったとき、シミュレーション設計図では以下のように指定するんでした:

<?xml version="1.0" encoding="UTF-8"?>

<simulation-schema xmlns="http://xmlns.org.waman/simulation/0.1">
  ...
  <iteration>
    ...
    <output class="ConsoleOutputter" output-timing="final"/>
  </iteration>
  ...
</simulation-schema>

output-timing 要素は結果を出力するタイミングを指定します。

シミュレーション設計図で指定する


シミュレーションで使用する出力方法といえば、コンソール*1に出力したりファイルに出力したりと、だいたい決まっています。 したがって、反復条件をシミュレーション設計図で指定できるようにしたように、出力方法もシミュレーション設計図から指定できるようにしましょう。

出力方法の指定は、反復条件の場合と同じように <output> 要素の type 属性で行います。

例えば、"console" というキーワードでコンソールに出力すると指定できるとしましょう。 このとき、シミュレーション設計図は次のようになります:

<?xml version="1.0" encoding="UTF-8"?>

<simulation-schema xmlns="http://xmlns.org.waman/simulation/0.1">
  ...
  <iteration>
    ...
    <output type="console" output-timing="final"/>
  </iteration>
  ...
</simulation-schema>

type 属性に指定できるキーワードは、次回以降考えていきましょう。

出力するエントリを指定する


デフォルトでは、シミュレーション設計図で指定されている物理量(<observable-set> 要素)全てを出力するとします。 で、出力したい物理量を指定したい場合は、<output> 要素の子要素として <entry> 要素を書くことで指定します:

<?xml version="1.0" encoding="UTF-8"?>

<simulation-schema xmlns="http://xmlns.org.waman/simulation/0.1">
  ...
  <iteration>
    ...
    <output type="console" output-timing="final">
      <entry>Position</entry>
    </output>
  </iteration>
  
  <observable-set class="PositionObservable"/>
</simulation-schema>

<entry> 要素の子テキストに指定しているのは、自作の ObservableSet クラス(ここでは PositionObservable クラス)で宣言されている必要があります(@DataEntry が付加されている public static final な String フィールド)。

*1:コマンド・プロンプトや標準出力のこと。 Java では System.out で指定されるストリーム。