観測量の値は DataManager オブジェクトによって管理します。 基本的に、1つの IterativeSimulator オブジェクトが1つの DataManager オブジェクトを持っているようなイメージです。 DataManager オブジェクトは ObservableSet オブジェクトも管理していて、物理量の値を取得しようとした場合、必要ならそれらのオブジェクトを用いて観測を実行します。
DataManager の実装として DefaultDataManager を作成します。 この実装は特にどうと言うこともないので、ここでは省略。
次に、DataManager を使用するインターフェース、クラスを見ていきましょう。 ObservableSet は省略して、DataAccessor インターフェースを拡張または実装しているものだけを取り上げます。 今回取り上げるのは、その中でも以下の4つです:
- DataOutputter
- IterationCondition (DataControlledIterationCondition)
- IterativeSimulator
- LeafIteration*1
残りのものについては次回以降に。
DataOutputter
全ての DataOutputter は観測量を使用するので、DataManager を属性として定義しておきましょう。 加えて、それに対するアクセッサ・メソッドも定義しておきます(setter メソッドは DataAccessor に定義してあるメソッド)。 DataOutputter はインターフェースなので、AspectJ のインタータイプ宣言を用いて DataManager 属性を付加します:
public aspect DataOutputterDataManager { private DataManager DataOutputter.data; public void DataOutputter.setDataManager(DataManager data){ this.data = data; } public DataManager DataOutputter.getDataManager(){ return this.data; } }
IterationCondition
反復条件 (IterationCondition) に、観測量の値によって反復を続けるか終了するかを評価するものがあると便利です。 これにも DataOutputter のようにインタータイプ宣言で DataManager 属性を付加できると便利なので、IterationCondition を実装する新たなクラス DataControlledIterationCondition を定義します:
public aspect DataControlledIterationConditionDataManager { private DataManager DataControlledIterationCondition.data; public void DataControlledIterationCondition.setDataManager( DataManager data){ this.data = data; } public DataManager DataControlledIterationCondition.getDataManager(){ return this.data; } }
反復条件の評価に観測量を使用するクラスは、DataControlledIterationCondition を拡張して作成することにしましょう。
IterativeSimulator
1つの IterativeSimulator オブジェクトに対して1つの DataManager オブジェクトを保持するために、IterativeSimulator にも DataManager 属性を付加しておきましょう:
public aspect IterativeSimulatorDataManager { private DataManager IterativeSimulator.data = new DefaultDataManager(); public DataManager IterativeSimulator.getDataManager(){ return this.data; } public void IterativeSimulator.setDataManager(final DataManager data){ this.data = data; this.getIteration().setDataManager(data); } }
LeafIteration
物理系の状態が更新されると、DataManager に保持されているデータも全て観測し直さなければなりません。 そのために、LeafIteration にも DataManager 属性を付加して、状態の更新前にデータをリセットするようにしましょう:
public aspect IterationDataManager { private DataManager LeafIteration.data; public void LeafIteration.setDataManager(DataManager data){ this.data = data; this.getIterationCondition().setDataManager(data); this.getDataOutputterContainer().setDataManager(data); } @Prepare(JoinPoint.EVOLVE) public void LeafIteration.resetDataManager(){ this.data.resetData(); } }
- 作者: エリック・T・レイ,Erik T.Ray,宮下尚,牧野聡,立堀道昭
- 出版社/メーカー: オライリージャパン
- 発売日: 2004/06
- メディア: 単行本
- 購入: 3人 クリック: 47回
- この商品を含むブログ (21件) を見る