書き忘れてましたが、前回までは「状態を観測せず、出力もしないシミュレーション」を考えていました。 今回からは「データを観測して出力する」処理を“織り込み”ましょう。
今回は、まず Iteration に DataOutputter に関する属性を考えます。 Iteration に直接 DataOutputter のセットを保持させてもいいんですが、出力の処理などを一括して扱うための新たなクラス DataOutputterContainer を作成しましょう(メソッドの実装は載せてませんが具象クラスです):
public class DataOutputterContainer implements SimulationComponent{ public Set<DataOutputter> getDataOutputters(); public void addDataOutputter(DataOutputter outputter); public void removeDataOutputter(DataOutputter outputter); /** * 引数で指定されたタイミングで指定される * DataOutputter を用いて出力を行います。 * 出力のタイミングには * ・初期状態 (OutputTiming.INITIAL) * ・更新後の状態 (OutputTiming.AFTER_EVOLUTION) * ・終状態 (OutputTiming.FINAL) * の3つがあります。 */ public void output(OutputTiming timing); }
AspectJ の「インタータイプ宣言」を用いて、この DataOutputterContainer を Iteration に属性として付加しましょう:
aspect DataOutputterContainerAttribute{ private final DataOutputterContainer Iteration.container = new DataOutputterContainer(); public DataOutputterContainer Iteration.getDataOutputterContainer(){ return this.container; } public Set<DataOutputter> Iteration.getDataOutputters(){ return this.container.getDataOutputters(); } public void Iteration.addDataOutputter(DataOutputter outputter){ this.container.addDataOutputter(outputter); } public void Iteration.removeDataOutputter(DataOutputter outputter){ this.container.removeDataOutputter(outputter); } }
アスペクト指向入門 -Java ・ オブジェクト指向から AspectJプログラミングへ
- 作者: 千葉滋
- 出版社/メーカー: 技術評論社
- 発売日: 2005/11/18
- メディア: 単行本
- 購入: 4人 クリック: 54回
- この商品を含むブログ (40件) を見る