前回に定義した SimulaitionComponent#getChildComponents() メソッドを用いて、IterativeSimulator に DataManager オブジェクトをセットするだけで、それが所持する SimulationComponent オブジェクトにも DataManager オブジェクトがセットされるような実装を施しましょう。
setDataManager() メソッドは DataAccessor に定義したメソッドでしたが、これまた「インタータイプ宣言」を用いて SimulationComponent に setDataManager() メソッドを付加しましょう:
public aspect DataAccessorAspect { public void SimulationComponent.setDataManager(DataManager data){ for(SimulationComponent child: getChildComponents()) child.setDataManager(data); } }
前々回にインタータイプ宣言を用いて定義した setDataManager() メソッドは、SimulationComponent のサブインターフェースに定義されているので上記のアスペクトによる実装は上書きされます(たぶん)。
この方法だと DataAccessor を実装していないクラスにも setDataManager() メソッドが付加されるので、少々実装が分かり難くなってしまうかもしれません。 したがって、あまりこの方法は多用しすぎない方が良いかと思います。
- 作者: 芳沢光雄
- 出版社/メーカー: 講談社
- 発売日: 2006/05/19
- メディア: 新書
- 購入: 7人 クリック: 39回
- この商品を含むブログ (45件) を見る