netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-03-28 [長年日記] ▲
_ AOSD まとめメモ/ポスターセッション ▲
ポイントカットを提案していたものでは,path expression pointcut と,block pointcut というのがあった.
path expression は,フィールドに格納されている参照を使って,obj.field1.field2 のようにたどれる範囲のオブジェクトを宣言できるようにしようというもの.target(p) && path(obj -> p)
のように記述することで,オブジェクト p を保有する obj なんかを変数に束縛できる.これは,DemeterJ とかで使っているtraversalの記法でもあり,強力な仕組みになる可能性はある
ただ,実現のアイディアについて聞いてみたら,ガベージコレクタなんかがオブジェクトの参照を見つけるような方法,といっていたので,かなりの力技になりそうな点が不安.成果が出てみないと何ともいえない.
一方の block pointcut は,東工大の人々による提案.エラーから回復するために,エラーを検出する特定の try ブロックを2つのポイントカット pcd-begin
と pcd-end
を使って block(pcd-begin, pcd-end)
という形式で指定し,それに対して回復用のアドバイスをくっつけることを提案している.pcd-begin
とpcd-end
が同じブロック内にならないといけないという制約を付けていても,beginとendの対応が正しく取れているかどうか,コンパイル時にしっかり判定する必要があり,実装はけっこう難しそう.
そのかわり,ポイントカットの抽象度を向上させる可能性はありそう.たとえばファイル処理に関するブロックを pointcut FileProcess(): block(call(File.open), call(File.close))
のような記述で記述すると,今までのようにbefore(): open
と after(): close
と書くかわりに,before(): FileProcess
と after(): FileProcess
と書いたりできる.これは,実装の詳細のメソッド名などを見せずにポイントカットだけを公開するために使えたりするかも?とちょっと期待.