netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-12-30 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
さっきの論文に関するメモの続き.久しぶりに長い.
アスペクトの結合演算は,Seq, Any, Fst, Cond の4つ.Seq はAspect1 を実行した後に2を実行する.Any はどちでも好きな順序で実行する.Fst は,1,2 の順に実行するが,もし isCrosscutting がセットされたらそこで終了する.たとえば,new Fst( 懸賞当たったら無料アスペクト, 安売りキャンペーンアスペクト );のように左側のアスペクトが効果を発揮したら後者の意味がなくなるような場合に使う.逆に,左側が作動しない限り右側が動作しない Cond というのもある.new Cond( すべての学生に必要なデータ加工, 大学院生専用の追加事項出力 );
pointcut の指定については,regular crosscuts というものを以下の論文で提案しているらしい.F. Douence, P. Fradet, M. Sudholt:``A framework for the detection and resolution of aspect interactions'', Proceedings of the 27th ACM SIGPLAN/SIGSOFT Conference on Generative Programming and Component Engineering (GPCE), October (2002).今度チェックしてみよう.
_ 論文 ▲
実家に帰る途中,新幹線の中,暇なので論文読み.
Remi Douence, Mario Sudholt:``A model and a tool for Event-based Aspect-Oriented Programming (EAOP)''
アスペクト指向プログラミングを,「イベント」を join points として実現しようというもの.実行モニタが,メソッドとコンストラクタの呼び出し・リターンのようなイベントに対して Event オブジェクトを生成し,アスペクトに渡す.(このイベント処理自体はプリプロセッサによって生成される)マルチスレッドに対しては(今のところは)synchronized で対処している様子.
アスペクトは,そのイベントが自分に関係のあるものかどうかを調べ,関係があるなら動作する.この筆者らの実装では,Aspect クラスを継承し,definition メソッドを記述.nextEvent() 呼び出しによって次のイベントを取得する(次のイベントが来るまで nextEvent は実行がブロックされる).event.skip = true; として本来のメソッド呼び出しを飛ばしたりもできるらしい.
アスペクト間の関係,再帰呼び出しについては,アスペクトの中でthis.isRunning = true; とセットすることによってそのアスペクトが起動中であることを示し,再帰呼び出しを防止することができる.
また,アスペクトの設定は,monitor.aspects = new SomeAspect();のように実行時に行うが,ここでaspects = new Seq(new Aspect1(), new Aspect2()); のようにアスペクト間の結合演算を行うオブジェクトを使用できる.動的に結合できるところがえらい.