(57)【要約】【課題】  織り込み対象のプログラム中の想定箇所に織り込むアスペクトを容易に生成すること。【解決手段】  クラス構造を解析し、各クラスで使用されているクラス名、メソッド名、シグネチャを取得し、生成するアスペクトに定義するクラス名、メソッド名、シグネチャの候補を生成するクラス情報解析手段と、共通処理として切り出すアスペクトが行うアドバイスの候補のデータ構造を解析するアドバイス解析手段と、開発対象のプログラム内で使用されているクラスについてクラス名、メソッド名、シグネチャを明示したクラス図と、前記アドバイス解析手段が解析したアドバイスの候補とをユーザインターフェース画面に表示させる管理手段と、表示されたアドバイスの候補とクラス名、メソッド名、シグネチャの候補をユーザに選択させ、アスペクトを生成するアスペクト生成手段とを備えることを特徴とする。【選択図】  図２
2007213487.tif 000002
【特許請求の範囲】
【請求項１】
開発対象のプログラム内で使用されているクラスに共通する処理をアスペクトとして生成するアスペクト生成装置であって、
開発対象のプログラム内で使用されているクラスファイルを第１の記憶手段から読み出し、クラスファイル内の各クラスの構造を解析し、各クラスで使用されているクラス名、メソッド名、シグネチャを取得し、その取得したクラス名、メソッド名、シグネチャに基づき、生成するアスペクトに定義するクラス名、メソッド名、シグネチャの候補を生成するクラス情報解析手段と、
共通処理として切り出すアスペクトが行うアドバイスの候補を第２の記憶手段から読み出し、アドバイスの候補のデータ構造を解析するアドバイス解析手段と、
前記クラス情報解析手段によるクラス構造の解析結果に基づき開発対象のプログラム内で使用されているクラスについてクラス名、メソッド名、シグネチャを明示したクラス図と、前記アドバイス解析手段が解析したアドバイスの候補とをグラフィカルユーザインターフェース画面に表示させるユーザインターフェース管理手段と、
前記グラフィカルユーザインタフェース画面に表示されたアドバイスの候補のうちユーザによって選択された任意のアイコンが前記クラス図中の任意のクラスの位置にドラッグされた場合に、当該クラスにおいて選択可能な、前記クラス情報解析手段によって生成されたクラス名、メソッド名、シグネチャの候補を表示し、ユーザによって選択されたクラス名、メソッド名、シグネチャの候補のデータを、ユーザによって選択されたアドバイスの候補のデータ構造に適用してアスペクトを生成するアスペクト生成手段と
を備えることを特徴とするアスペクト生成装置。
【請求項２】
前記アスペクト生成手段は、生成したアスペクトに定義されたクラス名、メソッド名、シグネチャに一致するクラス名、メソッド名、シグネチャを持つクラス図中のクラスのメソッドを強調表示することを特徴とする請求項１に記載のアスペクト生成装置。
【請求項３】
開発対象のプログラム内で使用されているクラスに共通する処理をアスペクトとして生成するアスペクト生成方法であって、
第１の手段により、開発対象のプログラム内で使用されているクラスファイルを第１の記憶手段から読み出し、クラスファイル内の各クラスの構造を解析し、各クラスで使用されているクラス名、メソッド名、シグネチャを取得し、その取得したクラス名、メソッド名、シグネチャに基づき、生成するアスペクトに定義するクラス名、メソッド名、シグネチャの候補を生成する第１のステップと、
第２の手段により、共通処理として切り出すアスペクトが行うアドバイスの候補を第２の記憶手段から読み出し、アドバイスの候補のデータ構造を解析する第２のステップと、
第３の手段により、前記第１の手段によるクラス構造の解析結果に基づき開発対象のプログラム内で使用されているクラスについてクラス名、メソッド名、シグネチャを明示したクラス図と、前記第２の手段が解析したアドバイスの候補とをグラフィカルユーザインターフェース画面に表示させる第３のステップと、
第４の手段により、前記グラフィカルユーザインターフェース画面に表示されたアドバイスの候補のうちユーザによって選択された任意のアイコンが前記クラス図中の任意のクラスの位置にドラッグされた場合に、当該クラスにおいて選択可能な、前記第１の手段によって生成されたクラス名、メソッド名、シグネチャの候補を表示し、ユーザによって選択されたクラス名、メソッド名、シグネチャの候補のデータを、ユーザによって選択されたアドバイスの候補のデータ構造に適用してアスペクトを生成する第４のステップと
を備えることを特徴とするアスペクト生成方法。
【請求項４】
前記第４のステップにおいて、生成したアスペクトに定義されたクラス名、メソッド名、シグネチャに一致するクラス名、メソッド名、シグネチャを持つクラス図中のクラスのメソッドを強調表示することを特徴とする請求項３に記載のアスペクト生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アスペクト指向プログラミングにおけるアスペクト生成方法及び装置に関するものである。
【背景技術】
【０００２】
現在、アプリケーション開発において新しい概念である、アスペクト指向プログラミングが注目されている。
アスペクト指向とは、プログラム内に組み込まれている各モジュール間で共通に使われる機能を切り出し、それを後から自動的にプログラムに織り込んでいくものである。アスペクトの例として、ログやトランザクション管理などがあげられる。また、アスペクト指向は、オブジェクト指向と相反する概念ではないため、この２つを組み合わせて利用することが可能である。
ここで、ログを例に用いてアスペクト指向プログラミングについて説明する。
ログを出力する際、従来においては、ログコンポーネントを呼び出すコードをプログラム中から呼び出すことによって、ログを出力してきた。このような場合、開発者自身が担当しているモジュールにログコンポーネントを呼び出すコードを記述することが一般的であるが、個々の開発者のスキルによってログ出力の精度が異なるため、システム全体で均質な情報量のログを出力することは難しかった。
アスペクト指向プログラミングを用いることにより、ログを出力する機能をアスペクトとして切り出し、これをシステム全体のプログラムに対して自動的に織り込むことができるため、システム全体を通して均質な情報量のログを出力するようにすることが可能となる。
このようにアスペクト指向プログラミングを用いることにより、モジュール間で横断的に使用する機能を切り出して、設定によって後から埋め込むことが可能となる。
【０００３】
アスペクトは、そのアスペクトが行う処理を記述したアドバイスと、そのアドバイスをどこに埋め込むかを指定するポイントカットから構成されている。
アドバイスには、埋め込む先の処理を実行する前に実行されるbeforeアドバイス、後に実行されるafterアドバイス、その処理の前後を包み込むように実行されるaroundアドバイスの３種類がある。
また、メソッドに対するアドバイスとフィールドアクセスに対するアドバイスがある。
ポイントカットでは、あるクラスのどのメソッドを呼び出したか、どのフィールドにアクセスしたか、あるクラスをインスタンス化したかなどをポイントとして切り出して指定することができる。
ポイントカットは、クラス名やメソッド名などを直接指定する以外にも、ワイルドカード(*)を用いることによって一度に複数のポイントを指定することもできる。
【０００４】
アスペクト指向プログラミングを実現するために、アスペクトをどのように定義するかを規定し、アドバイスをプログラムに織り込むことが必要となる。このような機能を実現する環境をアスペクト指向環境と呼ぶ。現在、オブジェクト指向言語であるJava(登録商標）と組み合わせて使えるアスペクト指向環境がいくつか利用可能である。ここでは、そのひとつであるAspectJのアスペクト表記方法を用いるものとする。
【０００５】
AspectJでは、アスペクトの定義を以下のような形式で表記する。
package sample;
public aspect Debug {
pointcut callHello(): execution(* sample.Hello.sayHello(..));
Object around() : callHello() {
Object t = thisJoinPoint.getTarget();
System.out.println("target is " + t.getClass().getName());
Object result = proceed();
System.out.println("returning " + result);
return result;
}
}
【０００６】
アスペクトの定義は、pointcut句によるポイントカットの指定とアドバイスの実装から構成される。
pointcut句では、メソッドに対しては、execution宣言により実行、call宣言により呼び出しのポイントを指定できる。それぞれの宣言の引数には、メソッドのシグネチャを指定する。
メソッドのシグネチャは、「<戻り値> <クラス名>.<メソッド名>(引数)」で構成される。ここには、*(ワイルドカード)を用いることもでき、say*のように指定することにより、sayHello、sayGoodbyのようにsayで始まる文字列にマッチさせることもできる。
メソッドの引数は、受け付ける引数の型を記述する以外にも「..」を指定することにより任意の引数を指定することもできる。
また、pointcut句では、フィールドに対しては、get宣言により読み込みアクセス、set宣言により書き込みアクセスのポイントを指定できる。それぞれの宣言の引数には、フィールド名を指定する。
フィールド名は、「<クラス名>.<フィールド名>」で構成される。ここにもメソッドと同様にワイルドカードを指定することができる。
【０００７】
AspectJの開発環境として、AJDTというツールがある。これを用いることにより、あるアスペクトがどのJavaクラスに適用されるかといった情報を表示することができる。また、アスペクトがどのようにクラスに適用されたかをシステム全体を通して見ることができるビューアも用意されている。
なお、本発明に関連する公知技術文献としては下記の特許文献１がある。
【０００８】
【特許文献１】特開２００５-２５８９４４号
【発明の開示】
【発明が解決しようとする課題】
【０００９】
アスペクトを織り込み対象のプログラムのどの箇所に生成（織り込む）るかは、特別な生成式を用いる。この文法は通常のJavaなど既存のプログラム言語の文法と大きく異なるため、一般的な開発者にとって、これを習得し使いこなすことは容易ではない。
また、この生成式には、ワイルドカードなどを用いてプログラム中の複数のポイントにアスペクトを生成することが可能であり、これを用いることによって効率良くアスペクトの生成を行うことができる。しかし、これを用いた場合、そのアスペクトが自分が想定している箇所に正しく生成されているかを確認することは難しい。
すなわち、アスペクトの生成は、その文法および影響範囲の両面から見て、あまり簡単ではないのが現状である。
【００１０】
本発明の目的は、アスペクト指向プログラミングを用いたアプリケーション開発において、織り込み対象のプログラム中の想定箇所に織り込むアスペクトを容易に生成することができるアスペクト生成方法及び装置を提供することである。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明のアスペクト生成装置は、開発対象のプログラム内で使用されているクラスファイルを第１の記憶手段から読み出し、クラスファイル内の各クラスの構造を解析し、各クラスで使用されているクラス名、メソッド名、シグネチャを取得し、その取得したクラス名、メソッド名、シグネチャに基づき、生成するアスペクトに定義するクラス名、メソッド名、シグネチャの候補を生成するクラス情報解析手段と、共通処理として切り出すアスペクトが行うアドバイスの候補を第２の記憶手段から読み出し、アドバイスの候補のデータ構造を解析するアドバイス解析手段と、前記クラス情報解析手段によるクラス構造の解析結果に基づき開発対象のプログラム内で使用されているクラスについてクラス名、メソッド名、シグネチャを明示したクラス図と、前記アドバイス解析手段が解析したアドバイスの候補とをグラフィカルユーザインターフェース画面に表示させるユーザインターフェース管理手段と、前記グラフィカルユーザインターフェース画面に表示されたアドバイスの候補のうちユーザによって選択された任意のアイコンが前記クラス図中の任意のクラスの位置にドラッグされた場合に、当該クラスにおいて選択可能な、前記クラス情報解析手段によって生成されたクラス名、メソッド名、シグネチャの候補を表示し、ユーザによって選択されたクラス名、メソッド名、シグネチャの候補のデータを、ユーザによって選択されたアドバイスの候補のデータ構造に適用してアスペクトを生成するアスペクト生成手段とを備えることを特徴とする。
また、前記アスペクト生成手段は、生成したアスペクトに定義されたクラス名、メソッド名、シグネチャに一致するクラス名、メソッド名、シグネチャを持つクラス図中のクラスのメソッドを強調表示することを特徴とする。
【００１２】
本発明に係るアスペクト生成方法は、第１の手段により、開発対象のプログラム内で使用されているクラスファイルを第１の記憶手段から読み出し、クラスファイル内の各クラスの構造を解析し、各クラスで使用されているクラス名、メソッド名、シグネチャを取得し、その取得したクラス名、メソッド名、シグネチャに基づき、生成するアスペクトに定義するクラス名、メソッド名、シグネチャの候補を生成する第１のステップと、第２の手段により、共通処理として切り出すアスペクトが行うアドバイスの候補を第２の記憶手段から読み出し、アドバイスの候補のデータ構造を解析する第２のステップと、第３の手段により、前記第１の手段によるクラス構造の解析結果に基づき開発対象のプログラム内で使用されているクラスについてクラス名、メソッド名、シグネチャを明示したクラス図と、前記第２の手段が解析したアドバイスの候補とをグラフィカルユーザインターフェース画面に表示させる第３のステップと、第４の手段により、前記グラフィカルユーザインターフェース画面に表示されたアドバイスの候補のうちユーザによって選択された任意のアイコンが前記クラス図中の任意のクラスの位置にドラッグされた場合に、当該クラスにおいて選択可能な、前記第１の手段によって生成されたクラス名、メソッド名、シグネチャの候補を表示し、ユーザによって選択されたクラス名、メソッド名、シグネチャの候補のデータを、ユーザによって選択されたアドバイスの候補のデータ構造に適用してアスペクトを生成する第４のステップとを備えることを特徴とする。
また、前記第４のステップにおいて、生成したアスペクトに定義されたクラス名、メソッド名、シグネチャに一致するクラス名、メソッド名、シグネチャを持つクラス図中のクラスのメソッドを強調表示することを特徴とする。
【発明の効果】
【００１３】
本発明のアスペクト生成装置及び方法によれば、次のような効果がある。
（１）グラフィカルユーザインターフェース画面に表示されたクラス名、メソッド名、メソッドの引数のそれぞれの候補に対し、アスペクトとして切り出す処理（アドバイス）のアイコンをドラッグする操作により、開発者自身が想定しているアスペクトを容易に生成することができる。
（２）アスペクトを生成した場合に、その生成したアスペクトが、どのクラスのいずれのメソッドに織り込まれるかをクラス図中にグラフィカルに明示することにより、どのクラスのどのメソッドおよびフィールドが、生成したアスペクトの影響を受けるかを把握することができ、影響を受ける織り込み対象範囲を確認しながら、開発者自身が想定しているアスペクトを生成することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の一実施の形態を図面を参照して詳細に説明する。
図１は、本発明のアスペクト織り込み装置を実現するコンピュータのハードウェア構成例を示したブロック図である。
図１に示すコンピュータ（１０１）は、中央演算装置（CPU）（１０２）とメモリ（１０３）を備え、マザーボード（１０４）により接続されている。また、マザーボードに接続された磁気ディスク装置（ＨＤＤ）（１０５）とグラフィックカード（１０６）を持ち、グラフィックカード（１０６）は外部のディスプレイ装置（１０７）と接続されている。
入力装置として、マウス（１０８）とキーボード（１０９）を備え、これらはマザーボード（１０４）に接続されている。
【００１５】
図２は、図１のハードウェア構成においてアスペクト織り込みを実現する構成を機能的に示した機能構成図であり、本発明のアスペクト織り込み装置（２０１）は、クラス情報解析部（２０２）、クラス蓄積部（２０３）、アドバイス解析部（２０４）、アドバイス蓄積部（２０５）、アスペクト生成部（２０６）、アスペクト蓄積部（２０７）、ユーザインターフェース管理部（２０８）で構成される。
クラス情報解析部（２０２）、アドバイス解析部（２０４）、、アスペクト生成部（２０６）、ユーザインターフェース管理部（２０８）は、具体的には、メモリ（１０３）内に格納されたプログラムによって構成されるものである。
ユーザインターフェース管理部（２０８）は、ディスプレイ装置（１０７）と入力装置（２１０）を構成するマウス（１０８）とキーボード（１０９）に接続されている。
【００１６】
クラス情報解析部（２０２）は、クラス蓄積部（２０３）およびユーザインターフェース管理部（２０８）と接続され、アドバイス解析部（２０４）はアドバイス蓄積部（２０５）とユーザインターフェース管理部（２０８）と接続されている。アスペクト生成部（２０６）は、アスペクト蓄積部（２０７）とユーザインターフェース管理部（２０８）と接続されている。
クラス蓄積部（２０３）、アドバイス蓄積部（２０５）、アスペクト蓄積部（２０６）は、磁気ディスク装置（１０５）上で実現される。
【００１７】
開発対象のプログラム内で使用されているモジュールあるいはクラスに共通する処理（あるいは機能）をアスペクトとして切り出し、アスペクト句内に定義するためには、アスペクトとして切り出すモジュールあるいはクラスの処理を把握する必要がある。本発明では、アスペクトの生成に当たって、まず、開発対象のプログラム内で使用されているモジュールあるいはクラスの構造を解析し、そこで使用されているメソッドのシグネチャを取得する。具体的には、クラス蓄積部（２０３）に蓄積されているプログラムのクラス図を取得し、そのクラス図中で使用されている各クラスの構造をクラス情報解析部（２０２）で解析し、各クラスで定義されているメソッドのシグネチャを取得する。
図３は、本発明で扱うクラスのメソッド情報のデータフォーマットの例を示す図であり、１つのメソッド情報は、ID（３０１）、クラス名（３０２）、メソッド名（３０３）、引数（３０４）、戻り値（３０５）で構成されている。クラスにあるメソッドひとつに対してひとつのエントリが対応する。同じ名前のメソッドでも引数の型が異なれば別のエントリとなる。
【００１８】
図４は、クラスのフィールド情報のデータフォーマットの例を示す図であり、１つのフィールド情報は、ID（４０１）、クラス名（４０２）、フィールド名（４０３）で構成されている。
前述のように、アスペクトには、そのアスペクトが行う処理を記述したアドバイスを定義する必要がある。本発明では、定義するアドバイスの候補がアドバイス蓄積部（２０５）に予め蓄積されており、ここに蓄積されているアドバイスの候補のデータ構造をアドバイス解析部（２０４）で解析し、アドバイスの候補としてグラフィカルユーザインターフェース画面にメニュー形式で表示し、その中から、切り出すアスペクトに定義するアドバイスを選択させる。
図５は、アドバイス蓄積部（２０５）に蓄積されているアドバイス情報のデータフォーマットの例を示す図であり、１つのアドバイス情報は、ID（５０１）、名前（５０２）、ターゲット（５０３）、タイプ（５０４）、実装（５０５）で構成されている。名前（５０２）はそのアドバイスを認識できる任意の文字列となる。ターゲット（５０３）はメソッドもしくはフィールドである。タイプ（５０４）はaround、before、afterのいずれかである。実装（５０５）は、そのアドバイスのプログラムコードとなる。
【００１９】
図６は、アスペクト蓄積部（２０７）に蓄積されるアスペクトのプログラムコードであり、１つのアスペクトのプログラムコードは、アスペクト定義（６０１）、ポイントカット定義（６０２）、アドバイス定義（６０３）で構成されている。
アスペクト定義（６０１）には、そのaspect句によるアスペクト宣言とそのアスペクトの名前が記述される。
ポイントカット定義（６０２）には、pointcut句とポイントカット名、AspectJの文法によるポイントカット指定が記述される。
アドバイス定義（６０３）には、アドバイスの戻り値、アドバイスのタイプ、対応するポイントカット名、実装コードが記述される。
【００２０】
図７は、本実施形態のアスペクト生成装置のグラフィカルユーザインターフェース画面の一例を示す図であり、大別して、クラス図（７０１）とアドバイスツールボックス（７０７）の表示領域で構成される。
クラス図（７０１）は、クラス蓄積部（２０３）に格納されたプログラムを構成するクラスの構造（７０２）とそれぞれの関連を表す図であり、各クラスのクラス名（７０３）、フィールド（７０４）、メソッド（７０５）を図中に表現する。また、クラスの継承関係がある場合は、そのクラス同士を矢印（７０６）で結びつけて表示する。
クラス図（７０１）は、ユーザインターフェース画面を表示する際に、Java言語で記述されたクラスファイルをクラス蓄積部（２０３）から読み込み、クラス情報解析部（２０２）にて解析し、図３のメソッド情報および図４のフィールド情報に変換し、その情報をユーザインターフェース管理部（２０８）に送ることにより表示される。
【００２１】
アドバイスツールボックス（７０７）は、アドバイス蓄積部（２０５）に蓄積されているアドバイスの一覧を表示する領域であり、メソッドに対するアドバイスを表示する領域（７０８）とフィールドに対するアドバイスを表示する領域（７０９）で構成される。
アドバイスツールボックス（７０７）は、グラフィカルユーザインターフェース画面を表示する際に、図５のアドバイス情報の形式でアドバイス蓄積部（２０５）に蓄積されているアドバイスを読み込み、アドバイス解析部（２０４）にて解析し、その情報をユーザインターフェース管理部（２０８）に送ることにより表示される。
【００２２】
図８は、クラス図のクラスのメソッド上（８０１）に“Debug”というアドバイス（８０２）のアイコンをドラッグした際に表示されるメニュー（８０３）の例を示す図である。ここには、生成可能なクラス名のパターンが選択可能候補として表示される。
選択可能なクラス名のパターンには、例えば、「*」、「Login*」、「*Dao」、「LoginDao」がある。これらの選択可能なクラス名のパターンは、後述の図１４で説明する処理により、クラス図中に使用されているクラス名を幾つかに分割して生成したものである。クラス図中に使用されているクラス名が「LoginDao」であった場合に、これを「Login」、「Dao」という文字列に分割し、これら文字列の前方、後方に「*」を付加したクラス名候補文字列を生成することにより、例えばクラス名の前方に「Login」という文字列が存在するクラス名のクラスの処理を共通のアスペクトとして定義することが可能になる。
【００２３】
図９は、図８で表示されるメニュー（８０３）のクラス名のパターン（８０３）のうちの１つの上にアドバイス（８０２）をドラッグした際に表示されるメニュー（９０４）の例を示す図である。ここには設定できるメソッド名のパターンが選択可能候補として表示される。
この選択可能なメソッド名のパターンも、前記のクラス名のパターンと同様に生成されたものである。
【００２４】
図１０は、図９で表示されるメニューのメソッド名のパターン（１００４）のうちの１つの上にアドバイス（８０２）をドラッグした際に表示されるメニュー（１００５）の例を示す図である。ここには設定できるメソッドの引数のパターンの候補が表示される。この選択可能なメソッドの引数のパターンも、前記のクラス名のパターンと同様に生成されたものである。
【００２５】
図１１は、図１０で表示されるメニュー（１００５）のメソッドの引数のパターンのうちの１つの上にアドバイス（８０２）をドラッグした際のグラフィカルユーザインターフェース画面の全体を示した図である。このときに、クラス名、メソッド名、メソッド引数のパターンが決定するため、これを組み合わせてポイントカットに指定するメソッドシグネチャのパターンが決定できる。
メソッドの戻り値のパターンは、クラス名、メソッド名、メソッド引数にワイルドカードが含まれる場合は「*」、含まれない場合は、特定されたメソッドの戻り値となる。
このグラフィカルユーザインターフェース画面に表示されているクラス図内において、選択されたポイントカットに指定するメソッドシグネチャのパターンに適合するメソッドがハイライト（図１１の網掛け表示部分）されて表示される。
【００２６】
図１２は、メソッドのシグネチャが選択された後にグラフィカルユーザインターフェース画面に表示されるメソッドのポイントカットの種別を選択するダイアログの例を示す図であり、選択可能なポイントカットの種別が表示されて、その中の１つをラジオボタンを用いて選択する。メソッドに対するポイントカット種別は、そのメソッドの実行(execution)とそのメソッドの呼び出し(call)の２種類がある。
【００２７】
以下、以上のように構成されたアスペクト生成装置の動作を図１３〜図１５に示すフローチャートを参照して説明する。
図１３は、アスペクト生成過程におけるユーザの動作を示すフローチャートである。
ここでは、メソッドに対してアスペクトを生成する際の動作を説明する。
まず、ユーザは、図７のアドバイスツールボックス（７０７）のアドバイス表示領域（７０８）からアドバイスの１つのアイコン（８０２）を選択し、それをクラス図のメソッド上にドラッグする(ステップ１３０１)。
すると、図８に示したように、生成可能なクラス名のパターンがメニュー（８０３）上に表示されるので、その１つの上にアドバイス（８０２）のアイコンをドラッグする（ステップ１３０２）。
すると、図９に示したように、生成可能なメソッド名のパターンがメニュー（９０４）上に表示されるので、その１つの上にアドバイス（８０２）のアイコンをドラッグする（ステップ１３０３）。
すると、図１０に示したように、生成可能なメソッド引数のパターンがメニュー（１００５）上に表示されるので、その１つの上にアドバイス（８０２）のアイコンをドラッグする（ステップ１３０４）。
【００２８】
この状態でアドバイス（８０２）を適用するメソッドのシグネチャのパターンが特定されるので、グラフィックユーザインタフェース画面に表示されているクラス図中で、前記選択操作によって生成したアスペクトが適応されるメソッドが図１１の網掛け部分で示すようにハイライト表示される。
ここで、メニュー上にアドバイス（８０２）のアイコンをドロップすると（ステップ１３０５）、図１２のダイアログが表示される。
そこで、ポイントカットの種別を選択し（ステップ１３０６）、OKボタン（１２０１）を押下すると、その条件にあった図６に示したアスペクトのプログラムコードが生成されて、アスペクト蓄積部（２０７）の中に格納される。
このとき、アスペクト定義（６０１）に用いられるアスペクトの名前は、選択した「アドバイスの名前＋Aspect＋通し番号」とする。また、ポイントカット定義（６０２）に用いられるポイントカットの名前は、「選択したアドバイスの名前(大文字は小文字に変換)＋通し番号」とする。さらに、アドバイス定義（６０３）の実装コードには、選択したアドバイスの実装フィールドの値を入れる。
【００２９】
次に、ステップ１３０２において、クラス名のパターンの候補を表示する際の処理を図１４のフローチャートを参照して説明する。
この処理は、クラス名の一部と「*」を組み合わせることによってパターンの候補となる文字列を生成する処理である。
この処理は、クラス情報解析部（２０２）が実行する処理である。
はじめに、生成するパターンを格納するための候補配列を初期化する（ステップ１４０１）。
候補配列は単純な文字列の配列になる。この候補配列に、パターンの１つとしてクラス名を追加する（ステップ１４０２）。
ここで、追加するクラス名のパターンはクラス蓄積部（２０３）に格納されたメソッド情報（図３）から取得するものである。
【００３０】
次に、クラス名の文字列を分割する。ここでは、例として大文字を区切りに分割する。例えば、UserDaoImplクラスであれば、“User”、“Dao”、“Impl”の３つの部分に区切る。これを文節配列に格納する（ステップ１４０３）。文節配列は単純な文字列配列である。ここでは、大文字を区切りに文字列を分割したが、これ以外にも、１文字ごとに区切る方法や辞書を使って区切る方法などほかの方法を使うことも可能である。
次に、文節配列の要素と「*」を組み合わせてパターン文字列を生成する。
最初に配列のインデックスとなる整数値nを１に初期化する（ステップ１４０４）。そして、文節配列の先頭からｎ個の文字列を連結し（ステップ１４０５）、その末尾に「*」を付加して（ステップ１４０６）、パターン文字列を生成しそれを候補配列に追加する（ステップ１４０７）。
次に、インデックスｎをインクリメントして（ステップ１４０８）、nが配列の長さよりも小さければ（ステップ１４０９）、１ステップ４０５からの処理を繰り返す。
これを、ｎ−１回繰り返すことにより、後方にワイルドカードがあるパターンが生成される。例えば、前述の例では、User*、UserDao*というパターンが生成される。
次に、インデックスnを再度“１”で初期化する（ステップ１４１０）。そして、文節配列のｎ＋１から末尾までの要素の文字列を連結し（ステップ１４１１）、その先頭に「*」を付加して（ステップ１４１２）、パターン文字列を生成しそれを候補配列に追加する（ステップ１４１３）。
次に、インデックスｎをインクリメントして（ステップ１４１４）、nが配列の長さよりも小さければ（ステップ１４１５）、ステップ１４１１からの処理を繰り返す。
これを、ｎ−１回繰り返すことにより、前方にワイルドカードがあるパターンが生成される。例えば、前述の例では、*DaoImpl、*Implというパターンが生成される。
最後に、候補配列に「*」を追加する。このとき、候補配列に格納されているパターンが、クラスのパターンの選択候補になる。メソッド名やフィールド名に対するパターンも同様に生成することができる。
【００３１】
次に、ステップ１３０４において、クラス名、メソッド名、引数のパターンを確定した際にパターンがマッチするメソッドをハイライト表示する際に、生成したパターンにマッチするメソッドを抽出する処理を図１５のフローチャートを参照して説明する。この処理は、クラス情報解析部（２０２）が実行する処理である。
最初に、クラス蓄積部（２０３）に格納されているJavaクラスファイルを読み込み、クラス情報解析部（２０２）において、各クラスのメソッドを、図３のメソッド情報フォーマットの形式で候補配列に格納する（ステップ１５０１）。
次に、結果を格納する結果配列を空の状態に初期化する（ステップ１５０２）。この配列も図３のメソッド情報フォーマットに従った配列である。
【００３２】
次に、配列のインデックスnを“１”で初期化する（ステップ１５０３）。
次に、候補配列のｎ番目の要素を取り出し、そのクラス名フィールドがユーザによって選択されたクラス名のパターンに適合するか判定する（ステップ１５０４）。適合した場合は、メソッド名フィールドの判定に移る。適合しない場合は、その要素に対する処理を中断する
次に、メソッド名フィールドがユーザによって選択されたメソッド名のパターンに適合するか判定する（ステップ１５０５）。適合した場合は、メソッド引数の判定に移る。適合しない場合は、その要素に対する処理を中断する。
次に、メソッド引数フィールドがユーザによって選択されたメソッド引数のパターンに適合するか判定する（ステップ１５０６）。適合した場合は、その要素を結果配列に追加する。適合しない場合は、その要素に対する処理を中断する。
次に、配列のインデックスｎが配列の長さよりも小さい、もしくは等しいかを判定し（ステップ１５０８）、小さい、もしくは等しい場合はｎに１を加え（ステップ１５０９）、次の要素への処理に移る。大きい場合は、処理を終了する。
このとき、結果配列に格納されているメソッドデータがパターンにマッチしたものになる。これをユーザインターフェース管理部（２０８）に送る。
ユーザインターフェース管理部（２０８）では、この情報を元にクラス図上の対応するメソッドをハイライト表示（強調表示）する。
【００３３】
上記の処理を図１６に示したデータ例を用いて説明する。
図１６（ａ）の候補配列に対し、メソッド情報（１６０１）を図３に示した形式で格納する。
次に、候補配列の1番目の要素を取り出し、クラス名フィールドのデータとクラス名パターン（１６０２）とを照合する。クラス名パターンは「*Dao」であり、これは、「Dao」という文字列で終わる任意の文字列であることを示す。ここでこのデータのクラス名が「LoginDao」であるため、このパターンに当てはまる。
次に、メソッド名フィールドのデータとメソッド名パターン(１６０３)を照合する。
メソッド名パターンは「find*」であり、これは、「find」という文字列で始まる任意の文字列であることを示す。ここでこのデータのメソッド名が「findUser」であるため、このパターンに当てはまる。
【００３４】
次に、引数フィールドのデータと引数パターン（１６０４）とを照合する。引数パターンは「(..)」であり、これは任意の引数とマッチすることを示す。このパターンはすべての引数の形式にマッチするため、このデータもマッチする。このデータはすべてのパターンにマッチしたため、このデータを結果配列（１６０５）に格納する。
２番目のデータも同様にすべてのパターンにマッチするため、結果配列（１６０５）に格納する。
３番目のデータは、クラス名が「LoginService」であるが「Dao」で終わる文字列ではないため、クラス名パターン「*Dao」にマッチしない。そのため、このデータはこれらのパターンにマッチするデータではないため、結果配列（１６０５）には格納されない。
４番目のデータは、クラス名が「OrderDao」であるため、クラス名パターン「*Dao」にマッチするが、メソッド名が「getOrder」でありfindで始まる文字列ではないため、メソッド名パターン「find*」にマッチしない。そのため、このデータはこれらのパターンにマッチするデータではないため、結果配列（１６０５）には格納されない。
【００３５】
このように、図１６で示した４つのデータの中から１番目と２番目のデータがこのパターンにマッチしたこととなる。
ここまでで、メソッドに対するアスペクトを設定する手順を説明したが、同様の方法で、コンストラクタに対するアスペクトやフィールドに対するアスペクトも設定することができる。
コンストラクタのデータは、図３のメソッド情報のデータフォーマット形式で格納されている。この際、メソッド名および戻り値はそのクラス名となる。コンストラクタに対するアスペクトは、メソッドに対するアドバイスをアドバイスツールボックスから選択し、クラス図のクラス名が表示されているフィールド（７０３）にドラッグすることによって設定する。この際、クラス名のパターンのメニューとメソッド引数のパターンのメニューが表示され、これを選択すると、ポイントカット種別を選択するダイアログが表示される。
【００３６】
コンストラクタのポイントカット種別は、メソッドに対する設定と同様のポイントカット種別に加えて、オブジェクトが初期化されたとき(initialization)とオブジェクトが初期化される前(preinitialization)がある。これを選択することにより、コンストラクタに対するアスペクトが生成される。
フィールドのデータは、図４のフィールド情報のデータフォーマットで格納されている。フィールドに対するアスペクトは、フィールドに対するアドバイスをアドバイスツールボックスから選択し、クラス図のフィールド名が表示されているフィールド（７０４）にドラッグすることによって設定する。この際、クラス名のパターンのメニューとフィールド名のパターンのメニューが表示され、これを選択すると、図１２のダイアログと同じフォーマットかつフィールドに対するポイントカット種別を列挙したダイアログが表示される。
フィールドに対するポイントカット種別には、フィールドへの読み込みアクセスgetとフィールドへの書き込みアクセスsetの２種類がある。これを選択することにより、フィールドに対するアスペクトが生成される。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施に用いるコンピュータのハードウェア構成図である。
【図２】本発明のアスペクト生成装置の機能構成図である。
【図３】クラスのメソッド情報のデータフォーマットを表す図である。
【図４】クラスのフィールド情報のデータフォーマットを表す図である。
【図５】アドバイスデータのデータフォーマットを表す図である。
【図６】アスペクトのプログラムコードを表す図である。
【図７】アスペクト設定装置の画面構成図である。
【図８】クラス名パターンメニューを表す図である。
【図９】メソッド名パターンメニューを表す図である。
【図１０】メソッド引数パターンメニューを表す図である。
【図１１】パターン設定時の画面を表す図である。
【図１２】ポイントカット種別を選択するダイアログを表す図である。
【図１３】ユーザの処理の概要を示すフローチャートである。
【図１４】クラス名パターンを生成する処理のフローチャートである。
【図１５】マッチするメソッドを抽出する処理のフローチャートである。
【図１６】マッチするメソッドを抽出する処理で用いるデータの例を表す図である。
【符号の説明】
【００３８】
２０１  アスペクト生成装置
２０２  クラス情報解析部
２０３  クラス蓄積部
２０４  アドバイス解析部
２０５  アドバイス蓄積部
２０６  アスペクト生成部
２０７  アスペクト蓄積部
【図１】
2007213487.tif 000003
【図２】
2007213487.tif 000004
【図３】
2007213487.tif 000005
【図４】
2007213487.tif 000006
【図５】
2007213487.tif 000007
【図６】
2007213487.tif 000008
【図７】
2007213487.tif 000009
【図８】
2007213487.tif 000010
【図９】
2007213487.tif 000011
【図１０】
2007213487.tif 000012
【図１１】
2007213487.tif 000013
【図１２】
2007213487.tif 000014
【図１３】
2007213487.tif 000015
【図１４】
2007213487.tif 000016
【図１５】
2007213487.tif 000017
【図１６】
2007213487.tif 000018