(57)【要約】【課題】アスペクト指向プログラミングの環境において、１つ以上のアスペクトがウィービングされているベースシステム内の動的な変化を処理する。【解決手段】  ウィーバを用いてベースシステムへとウィービングされるべきアスペクトを実行するアスペクトシステムを含むアスペクト指向プログラミング環境におけるベースシステム内の変化に適応する方法は、前記ベースシステム内のある変化に応じて、前記ベースシステム内の前記変化の重要性を評価するステップと、前記評価により前記変化に重要性があると判明した場合、前記変化を補償するために適応動作を行うステップとを含む。【選択図】図１Ｂ
2011170884.tif 000002
【特許請求の範囲】
【請求項１】
ウィーバを用いてベースシステムへとウィービングされるべきアスペクトを実行するアスペクトシステムを含むアスペクト指向プログラミング環境におけるベースシステム内の変化に適応する方法であって、
前記ベースシステム内のある変化に応じて、前記ベースシステム内の前記変化の重要性を評価するステップと、
前記評価により前記変化に重要性があると判明した場合、前記変化を補償するために適応動作を行うステップと
を含む方法。
【請求項２】
前記変化の重要性を評価するステップは、
前記ベースシステム内の変化の後、前記ベースシステム内の変化前のジョインポイントまたはジョインポイントシャドーが、前記ベースシステム内の変化後のものと異なっているかどうかを決定するステップ
を含むものである、請求項１に記載の方法。
【請求項３】
あるアスペクトまたはアドバイスについて前記重要性の評価を個々に実行するステップと、
前記変化に重要性があると判明した前記あるアスペクトまたはアドバイスについて個々に適応動作を行うステップと
をさらに含む請求項１または２に記載の方法。
【請求項４】
前記適応動作は、
あるアスペクトを前記ベースシステムに全体的または部分的に再ウィービングするステップと、
あるアスペクトに関連付けられたアドバイスを全体的または部分的に再ウィービングするステップと、
あるアスペクトを全体的または部分的にアンウィービングするステップと、
あるアスペクトに関連付けられたアドバイスを全体的または部分的にアンウィービングするステップと
のうちの２つ以上を含む複数の適応動作から選択されるものである、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記アスペクト指向プログラミング環境は、前記ベースシステムおよび前記アスペクトシステムに加えて適応システムを含むものであり、
前記適応システム、前記ベースシステムおよび前記アスペクトシステムは、互いに独立して修正および実行できる別個のエンティティーである、
請求項１〜４のいずれか一項に記載の方法。
【請求項６】
前記ベースシステム、前記アスペクトシステムおよび前記適応システムは、直接または間接呼出しを通して相互に作用するものである、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
前記ベースシステム内に変化が生じた場合、前記ベースシステム、前記アスペクトシステムおよび前記適応システムを含んだ全体的なシステムの要素に対し、前記ベースシステム内の変化を通知するステップをさらに含むものであって、前記要素は、
前記ベースシステムの変化に関する評価を開始することと、
前記ベースシステムの変化を評価することと、
前記評価に基づいて適応動作を開始することと、
前記評価に基づいて適応動作を実行することと
のうちの１つ以上を行うことができるものである、
請求項１〜６のいずれか一項に記載の方法。
【請求項８】
前記要素は、
アスペクトと、
アドバイスと、
ウィーバと、
ポイントカットと、
全体的なシステムの任意の他の要素と
のうちの１つである、請求項７に記載の方法。
【請求項９】
前記要素に前記ベースシステム内の変化を通知するステップは、
前記ベースシステム内に変化が生じた場合、対応する通知を前記要素に送ることにより前記要素に自動的に通知するステップと、
前記ベースシステム内に何らかの変化が発生しているかどうかについて前記ベースシステムを監視するために、前記要素により前記ベースシステムをポーリングするステップと
のうちのいずれかまたは両方を含むものである、請求項７または８に記載の方法。
【請求項１０】
前記ベースシステム内の何らかの変化に関する通知を受けるために、前記アスペクトシステムの１つ以上の要素を登録するステップを含む請求項１〜９のいずれか一項に記載の方法。
【請求項１１】
前記ベースシステムの変化を評価するステップは、
前記変化の後、あるアスペクトとアドバイスとのうちのいずれかまたは両方について、一連の全てのジョインポイントと一連の全てのジョインポイントシャドーとのうちのいずれかまたは両方を決定するステップ
を含むものである、請求項１〜１０のいずれか一項に記載の方法。
【請求項１２】
前記変化の後に決定された前記一連のジョインポイントと前記一連のジョインポイントシャドーとのうちのいずれかまたは両方を、前記変化の前の対応する一連のものと比較するステップと、
前記一連のものが異なる場合、前記変化を補償するために適応動作を行うステップと
をさらに含む請求項１〜１１のいずれか一項に記載の方法。
【請求項１３】
行われる適応動作ストラテジーとして複数の可能な適応動作を提供するステップと、
前記評価に応じて、前記複数の適応動作から１つ以上を選択するステップと
をさらに含む請求項１〜１２のいずれか一項に記載の方法。
【請求項１４】
前記重要性を評価するステップは、
前記評価結果に基づいて、前記適応動作のいずれを行うべきかを決定する一連のルールを評価するステップ
をさらに含むものである、請求項１〜１３のいずれか一項に記載の方法。
【請求項１５】
前記重要性を評価するステップは、ランタイム中に発生する事象または動作を考慮に入れるものであり、
前記事象または相互作用は、
ユーザとの対話と、
ランタイム中の機能またはモジュールの評価と
のうちの１つ以上である、
請求項１〜１４のいずれか一項に記載の方法。
【請求項１６】
前記ベースシステムの変化は、前記ベースシステムの要素の追加、取外しまたは修正のうちの１つ以上を含むものである、請求項１〜１５のいずれか一項に記載の方法。
【請求項１７】
請求項１〜１６のいずれか一項に記載の方法を実行するためのコンピュータ実行可能なコードを含むコンピュータプログラム。
【請求項１８】
請求項１７に記載のコンピュータプログラムを含み、または具体化するデータ記憶媒体。
【請求項１９】
ウィーバを用いてベースシステムへとウィービングされるべきアスペクトを実行するアスペクトシステムを含むアスペクト指向プログラミング環境におけるベースシステム内の変化に適応する装置であって、
前記ベースシステム内のある変化に応じて、前記ベースシステム内の前記変化の重要性を評価する手段と、
前記評価により前記変化に重要性があると判明した場合、前記変化を補償するために適応動作を行うための手段と
を備える装置。
【請求項２０】
前記変化の重要性を評価する手段は、
前記ベースシステム内の変化の後、前記ベースシステム内の変化前のジョインポイントまたはジョインポイントシャドーが、前記ベースシステム内の変化後のものと異なっているかどうかを決定する手段
を備えるものである、請求項１９に記載の装置。
【請求項２１】
あるアスペクトまたはアドバイスについて前記重要性の評価を個々に実行する手段と、
前記変化に重要性があると判明した前記あるアスペクトまたはアドバイスについて個々に適応動作を行うための手段と
をさらに備える請求項１９または２０に記載の装置。
【請求項２２】
前記適応動作は、
あるアスペクトを前記ベースシステムに全体的または部分的に再ウィービングするステップと、
あるアスペクトに関連付けられたアドバイスを全体的または部分的に再ウィービングするステップと、
あるアスペクトを全体的または部分的にアンウィービングするステップと、
あるアスペクトに関連付けられたアドバイスを全体的または部分的にアンウィービングするステップと
のうちの２つ以上を含む複数の適応動作から選択されるものである、請求項１９〜２１のいずれか一項に記載の装置。
【請求項２３】
前記アスペクト指向プログラミング環境は、前記ベースシステムおよび前記アスペクトシステムに加えて適応システムを含むものであり、
前記適応システム、前記ベースシステムおよび前記アスペクトシステムは、互いに独立して修正および実行できる別個のエンティティーである、
請求項１９〜２２のいずれか一項に記載の装置。
【請求項２４】
前記ベースシステム、前記アスペクトシステムおよび前記適応システムは、直接または間接呼出しを通して相互に作用するものである、請求項１９〜２３のいずれか一項に記載の装置。
【請求項２５】
前記ベースシステム内に変化が生じた場合、前記ベースシステム、前記アスペクトシステムおよび前記適応システムを含んだ全体的なシステムの要素に対し、前記ベースシステム内の変化を通知する手段をさらに備えるものであって、前記要素は、
前記ベースシステムの変化に関する評価を開始することと、
前記ベースシステムの変化を評価することと、
前記評価に基づいて適応動作を開始することと、
前記評価に基づいて適応動作を実行することと
のうちの１つ以上を行うことができるものである、
請求項１９〜２４のいずれか一項に記載の装置。
【請求項２６】
前記要素は、
アスペクトと、
アドバイスと、
ウィーバと、
ポイントカットと、
全体的なシステムの任意の他の要素と
のうちの１つである、請求項１９〜２５のいずれか一項に記載の装置。
【請求項２７】
前記要素に前記ベースシステム内の変化を通知する手段は、
前記ベースシステム内に変化が生じた場合、対応する通知を前記要素に送ることにより前記要素に自動的に通知する手段と、
前記ベースシステム内に何らかの変化が発生しているかどうかについて前記ベースシステムを監視するために、前記要素により前記ベースシステムをポーリングする手段と
のうちのいずれかまたは両方を備えるものである、請求項２５または２６に記載の装置。
【請求項２８】
前記ベースシステム内の何らかの変化に関する通知を受けるために、前記アスペクトシステムの１つ以上の要素を登録する手段を備える請求項１９〜２７のいずれか一項に記載の装置。
【請求項２９】
前記ベースシステムの変化を評価する手段は、
前記変化の後、あるアスペクトとアドバイスとのうちのいずれかまたは両方について、一連の全てのジョインポイントと一連の全てのジョインポイントシャドーとのうちのいずれかまたは両方を決定する手段
を備えるものである、請求項１９〜２８のいずれか一項に記載の装置。
【請求項３０】
前記変化の後に決定された前記一連のジョインポイントと前記一連のジョインポイントシャドーとのうちのいずれかまたは両方を、前記変化の前の対応する一連のものと比較する手段と、
前記一連のものが異なる場合、前記変化を補償するために適応動作を行うための手段と
をさらに備える請求項１９〜２９のいずれか一項に記載の装置。
【請求項３１】
行われる適応動作ストラテジーとして複数の可能な適応動作を提供する手段と、
前記評価に応じて、前記複数の適応動作から１つ以上を選択する手段と
をさらに備える請求項１９〜３０のいずれか一項に記載の装置。
【請求項３２】
前記重要性を評価する手段は、
前記評価結果に基づいて、前記適応動作のいずれを行うべきかを決定する一連のルールを評価する手段
をさらに備えるものである、請求項１９〜３１のいずれか一項に記載の装置。
【請求項３３】
前記重要性を評価する手段は、ランタイム中に発生する事象または動作を考慮に入れるものであり、
前記事象または相互作用は、
ユーザとの対話と、
ランタイム中の機能またはモジュールの評価と
のうちの１つ以上である、
請求項１９〜３２のいずれか一項に記載の装置。
【請求項３４】
前記ベースシステムの変化は、前記ベースシステムの要素の追加、取外しまたは修正のうちの１つ以上を含むものである、請求項１９〜２２のいずれか一項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアスペクト指向プログラミング（ＡＯＰ）に関し、特に変化するベースシステムにアスペクトをウィービング（ｗｅａｖｉｎｇ）する方法および装置に関する。
【背景技術】
【０００２】
本発明は、アスペクト指向プログラミング（ＡＯＰ）の分野に関する。ＡＯＰは、「アスペクト（ａｓｐｅｃｔ）」と呼ばれる新しいモジュール構造を使用する。
アスペクトは、ソフトウェアシステムの主要なモジュール化をクロスカットする要素を提供する。アスペクト指向のプログラミング言語またはシステムは、システムのプログラミングアスペクトの要素を用いて従来のプログラミング言語およびシステムを拡張する。このような要素は、少数の特別なプログラムモジュールに関連する部分のクロスカットの実行をローカライズすることができ、主要なプログラムモジュール全体に関して実行するわけではない。
【０００３】
アスペクトのクロスカット性をとらえるために、この特別なプログラムモジュールは、カプセル化についての従来からのルールを決まりに従ったやり方で変化させる。これら特別なプログラムモジュールは、主要なモジュールの明確な同意がなくても主要なモジュールの実行に影響を与えることができる。さらに、それらは幾つかの主要なモジュールに対して同時に影響を与えることができる。
【０００４】
アスペクト指向プログラミング（ＡＯＰ）は、プログラムが利用できる表現機能を拡張するため、多くの設計上の決定を局所的に表現することができる。ＡＯＰのプログラマは、基本となるプログラムを従来のプログラミング言語で記述し、さらにアスペクトコードの一部を記述する。その各々は、ベースプログラムのある部分に記述されている実行に影響する。
【０００５】
このようにしてアスペクトコードは、幾つかのモジュールにおいて幾つかの設計要素を実行することができるものであり、これらのパターンのフィールドおよび方法をクラス全体に広げるわけではない。その次に例えば、幾つかのモジュールの中の複合システムのためのトレーシング、デバッギングおよび組み込みの支援を取り込み、単一モジュール内の幾つかのクラスを含むエラー処理プロトコルを取り込み、クラス全体にわたって絡む複数のコードの一部としてではなく、単一モジュール内の幾つかのクラスを含むアルゴリズムを共有するリソースを得ることができる。
【０００６】
プログラミングアスペクトに対する特別なプログラムモジュールは、クラスなどのより伝統的なモジュール方式の構成体のモジュールを合理的にクロスカットすることによって、これを可能にする。従って、これらの特別なプログラムモジュールの１つは、クリーンである決まりに従ったやり方で幾つかのクラス（または単一のクラスの中の幾つかの方法）の実行に影響することがある。アスペクトとオブジェクトの相互作用は、オブジェクトとオブジェクトの相互作用および他の従来のプログラミングの実例とは異なる。その相違点は、従来の方式においてオブジェクトの全ての動作は、オブジェクトクラスの定義の中の直接的な実行、または他のオブジェクトの動作（例えば、メソッド呼出し）を使用するためにオブジェクトクラスの定義の中でコード化された要求、または他のオブジェクトクラスの実行を再利用（例えば、継承）するためにオブジェクトクラスの定義の中の要求のうちのいずれかとして、オブジェクト自身の中にカプセル化されるということである。このため、これらの従来の方法では、オブジェクト動作の全ての制御は、オブジェクト自身に依存する。他方でＡＯＰの環境においては、オブジェクト動作の一部は、オブジェクトが多少なりとも動作を要求することなく、オブジェクトの外部のアスペクトの中で定義することができる。そのためオブジェクト動作の一部は、アスペクトによりオブジェクトに対して透過的に強制されると言うことができる。さらに、１つのアスペクトがことによると異なるクラスの複数のオブジェクトに対してその動作を強制できるという点で、アスペクトはより全体的な効果を有する。
【０００７】
アスペクト指向プログラミング（ＡＯＰ）は、非特許文献１において紹介されている。ＡＯＰは、論理的にはある問題に属するものの、基本となるプログラミング言語および環境の限定された構成機構のためにモジュール化できないコード部分を処理する。結果として得られるコードは、極めて複雑に入り組んでいて散漫なものである。そのように複雑になってしまう原因となる問題は、クロスカット問題（ｃｒｏｓｓｃｕｔｔｉｎｇ  ｃｏｎｃｅｒｎｓ）と呼ばれている。アスペクト指向は、アスペクトと呼ばれる異なるモジュールへとクロスカット問題をモジュール化することに関するものである。
【０００８】
アスペクトモジュールをアプリケーションと一体化するための機構は、ウィービングと呼ばれている。ウィーバは、全てのアスペクトをアプリケーションに加える役割がある。そのような一体化を規定するために、アスペクト指向はジョインポイント（ｊｏｉｎ  ｐｏｉｎｔ）と呼ばれる概念を利用する。Ｋｉｃｚａｌｅｓらの文献（非特許文献１）では、ジョインポイントはプログラムの実行における合理的なポイントとして導入されている。ジョインポイントの典型的な例は、メソッド呼出しである。
【０００９】
従来、ウィービング処理は、開発者によって、ある所定の時点で、一体化されるべき複数のアスペクトについて開始される。さらにウィービング処理は、ランタイムにおいて潜在的にまたは確実にアスペクト特有のコードを実行する必要があるジョインポイントを表すベースシステム内の全ての位置を決定し、それに適応する。ランタイム中にジョインポイントを表す、適応された位置は、ジョインポイントシャドーと呼ばれる。あるジョインポイントシャドーに適応するということは、ある修正が実行されることを意味する。この修正により、ジョインポイントシャドーに到達すると、アドバイスコードの呼出しまたは実行が可能になる。これは、実際にこの位置で実行されるコード（「アドバイスコード」）を挿入、または「ラッパ（ｗｒａｐｐｅｒ）」を用いることによって行うことができる。このラッパは、アスペクトによって与えられた「アドバイス」を検討または実行するように、ラッピングされた方法（ｗｒａｐｐｅｄ  ｍｅｔｈｏｄ）を動作させる。ジョインポイントがジョインポイントシャドーへとこのように「適応（ａｄａｐｔａｔｉｏｎ）」することは、ウィービング処理によって行われる。
【００１０】
アスペクト自体は、実行されるアドバイスコードおよび一連のジョインポイント記述の組合せから成る。このジョインポイント記述は、ベースシステム（アスペクトなしのシステム）内のジョインポイントを、アドバイスコードを実行すべきベースシステム内のポイントとして表している。一連のジョインポイント記述は、「ポイントカット」と呼ばれる。次に、特殊な編集処理と見なすことができるウィービング処理は、アドバイスコードの実行が一旦それに関連付けられたジョインポイントに到達すると可能になるようにベースシステムを修正するものである。このことは、アスペクトのベースシステムへのウィービング、「アスペクトのインストール」、または「アドバイスのインストール」と呼ばれることもある。ウィーバにより、ランタイムにおいてアスペクト特有のコードを実行することが可能となっている位置は、ジョインポイントシャドーと呼ばれる。アスペクトをベースシステムへとウィービングすることにより、ウィービング処理は、ジョインポイントシャドーにおけるアドバイスコードの呼出しを可能にする。
【００１１】
従来、ウィービング処理は、アスペクトがウィービングされるべきベースシステムが変化する可能性を考慮していない。従来のウィービングに対するアプローチにおいて、ウィービングされるアスペクトに関連付けられる一連のジョインポイントシャドーは、ベースシステムのある構成を有するある時間（アスペクトをウィービングする時間）で一旦決定され、次にアスペクトおよびベースシステムの持続時間と同じ間存続する。これは、ウィービングの後、アスペクトに対して特異的なコードを実行しうるものであるそのアプリケーションの中の全てのシャドーが、ベースシステム内のいかなる変化も考慮せずにアスペクトがベースシステムの中にウィービングされたときの特定の構成を持つベースシステムに適応されることを意味する。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】Ｋｉｃｚａｌｅｓ，Ｇ．、Ｌａｍｐｉｎｇ，Ｊ．、Ｍｅｎｄｈｅｋａｒ，Ａ．、Ｍａｅｄａ，Ｃ．、Ｌｏｐｅｓ，Ｃ．、Ｌｏｉｎｇｔｉｅｒ，Ｊ．−Ｍ．、Ｉｒｗｉｎｇ，Ｊ．、「Ａｓｐｅｃｔ−Ｏｒｉｅｎｔｅｄ  Ｐｒｏｇｒａｍｍｉｎｇ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｅｕｒｏｐｅａｎ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｏｂｊｅｃｔ−Ｏｒｉｅｎｔｅｄ  Ｐｒｏｇｒａｍｍｉｎｇ  （ＥＣＯＯＰ）、ＬＮＣＳ  １２４１、  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ、１９９６年、ｐ．２２０−２４２
【発明の概要】
【発明が解決しようとする課題】
【００１３】
従って、本発明の目的は、アスペクト指向プログラミングの環境に適していて、１つ以上のアスペクトがウィービングされているベースシステム内の動的な変化を処理することができる方法および装置を提供することである。
【課題を解決するための手段】
【００１４】
本発明の１つの実施形態によれば、ウィーバを用いてベースシステムの中にウィービングされるべきアスペクトを実行するアスペクトシステムを含むアスペクト指向プログラミング環境の中で前記ベースシステム内の変化に適応させる方法が提供される。前記方法には、前記ベースシステム内の変化に応じて、前記ベースシステム内の前記変化の重要性を評価するステップと、前記変化に対する前記評価が、重要性があると判明すれば、前記変化を補償するために適応動作を行うステップとが含まれる。
【００１５】
システムの変化を評価し、必要な場合にはアスペクトの構成システムについて適応動作を行うことによって、基礎となるベースシステムはベースシステム内のどのような変化にも柔軟に対処することができる。このため、ベースシステムの変化から生じたアスペクトとベースシステムとの間の不整合を補償し解決するように、ベースシステム内の変化（要素の変更、追加または除去）を補償することができる。
【００１６】
１つの実施形態によれば、重要性の評価には、ベースシステム内の変化の前のジョインポイントまたはジョインポイントシャドーが、ベースシステム内の変化の後のこれらのものと異なっているかどうかを、ベースシステム内の変化の後で決定するステップが含まれている。これにより、システムの変化の前にベースシステムへとウィービングされるアスペクトにより生じる構成システム内のジョインポイントまたはジョインポイントシャドーが、修正されたベースシステムに対して実行するウィービング処理から結果として生ずるものと異なっているかどうかを、ベースシステム内の変化の後で決定することができる。このことは、例えば、システムの変化の前後のアスペクトおよびアドバイスに対するポイントカットを比較することによって行うことができ、それらが異なっている場合は、その変化は重要性があると判明する。この比較は、システムの変化の前後のポイントカットまたは一連のジョインポイントもしくはジョインポイントシャドーを直接比較することによって行うことができる。１つの実施形態によれば、２つの一連のものは、それらの要素の数を単に比較して行い、その数が異なる場合は重要な変化があると判断することができる。別の実施形態によれば、一連の要素を個別に、すなわちシステムの変化の前の全てのジョインポイントまたはジョインポイントシャドーをシステムの変化の後のものと比較することによって比較を行うことができ、この個々の比較が異なることが判明すると、ベースシステムの中で重要性がある変化が発生していると決定できる。
【００１７】
１つの実施形態によれば、前記アスペクト指向プログラミングの環境は、前記ベースシステムおよび前記アスペクトシステムに加えて、適応システムを含む。ここで、前記適応システム、前記ベースシステムおよび前記アスペクトシステムは別個の存在であり、互いに独立して修正および実行を行うことができる。これにより、適応システムに加えてアスペクトシステムにも大きな柔軟性を持たせることができるため、システム全体を同様により柔軟に設計することができる。
【００１８】
１つの実施形態によれば、前記ベースシステム、前記アスペクトシステムおよび前記適応システムは、例えば機能呼出し、メソッド呼出し、メッセージの送信などの直接または間接の呼出しを通して互いに作用する。これにより、システム全体のこれら３つの部分は互いに独立となる。
【００１９】
１つの実施形態によれば、適応動作には、下記、すなわち全体的または部分的に前記アスペクトを前記ベースシステムの中に再ウィービングする動作、前記アスペクトに関連付けられたアドバイスを全体的または部分的に再ウィービングする動作、全体的または部分的に前記アスペクトをアンウィービングする動作、または前記アスペクトに関連付けられたアドバイスを全体的または部分的にアンウィービングする動作の中の１つ以上の動作が含まれる。
【００２０】
本発明の実施形態による方法には、ベースシステムの中で変化が生じた場合、ベースシステムおよびアスペクトを含む全体的なシステムの要素にベースシステム内の変化を通知するステップが含まれ、前記要素が下記のステップ、すなわち、ベースシステムの変化の評価を開始するステップと、ベースシステムの変化を評価するステップと、前記評価に基づいて、適応動作を開始するステップと、前記評価に基づいて、適応動作を実行するステップとのうち１つ以上のステップを行うことができる。
【００２１】
システムの要素に通知することにより、システムの変化を評価した後で、適切な動作が確実に行われるようになる。通知されたシステムの要素は、ベースシステムおよびアスペクト、アドバイスから分離された要素とすることができる。システムの変化に関する通知を受け取り、次にこの変化の評価を開始することを委託することができる。このシステムの要素が評価を実行するように設計し、または評価を実行するように他の要素をトリガまたは駆動し、これによって評価を開始することができる。
【００２２】
評価に基づいて、システムの要素はこの時、比較結果に鑑みて必要な適応動作をそれ自体が実行するか、または可能ないずれかの他のシステムの要素がそのような動作を行うことを開始させることができる。そのために、システムの要素はいずれかの別のシステムの要素にメッセージを送って、評価結果に鑑みて、行うことが必要であるとシステムの要素が認めた適応動作をトリガすることができる。
【００２３】
システムの変化を受け取り、評価の開始と実行とのうちのいずれかまたは両方を行い、適応動作の開始と実行とのうちいずれかまたは両方を行うことを担うシステムの要素は、アスペクト、アドバイス、ポイントカット、ウィーバ、または通知を評価して適応動作を開始するための他の（別個の）要素のうちの１つとすることができる。
【００２４】
ある実施形態によれば、前記要素に対してベースシステム内の変化を通知するステップには、ベースシステムの中に変化が生じた場合、対応する通知を前記要素に送ることにより自動的に前記要素に通知するステップと、ベースシステムの中に何らかの変化が発生しているかどうかに関して前記ベースシステムを観察するために前記要素が前記ベースシステムをポーリングするステップとのうちのいずれかまたは両方が含まれる。
【００２５】
１つの実施形態によれば、アドバイス、ポイントカットまたはアスペクト自身などのアスペクトシステムの１つ以上の要素は、ベースシステム内の何らかの変化について通知を受けるように登録される。これにより、これらの登録されたアスペクト、アドバイスまたはポイントカットは、システムの変化を確実に通知される。この登録方式により、そのような通知を受け取るように登録されていないシステムの要素には通知しないことによって、効率の良い通知が可能になる。
【００２６】
ある実施形態によれば、前記評価には、前記変化の後のあるアスペクトについて一連の全てのジョインポイントとジョインポイントシャドーとのうちのいずれかまたは両方を決定するステップが含まれる。これにより、あるアスペクトまたはアドバイスに対するシステムの変化の重要性を確認できる。
【００２７】
ある実施形態によれば、この方法は、前記変化の後に決定された一連のジョインポイントとジョインポイントシャドーとのうちのいずれかまたは両方を、前記変化の前の対応する一連のものと比較するステップと、両者が異なる場合には前記変化を補償するために適応動作を行うステップとをさらに含む。これにより、この比較結果に基づいて、とりうる適応動作の一群の中から１つを適切に選択する可能性が与えられる。これにより、システムの変更の後に組み込まれているべき全てのジョインポイントシャドーが実際に組み込まれているか否かを検査できるようになる。次に、結果に応じて、とりうる複数の適応動作のうちの１つが選択される。評価に重要性があると認められたアスペクトまたはアドバイスについてのみ適応動作を行うことによって、すなわち評価により適応動作が必要であると認められたこれらのアスペクトのみを再ウィービングまたはアンウィービングすることによって、適応動作を効率的に実行することができる。
【００２８】
１つの実施形態によれば、本発明には、前記評価結果に基づいて、前記適応動作のどれを利用すべきかが決定される一連のルールを評価するステップが含まれる。これにより、評価結果が確実そして適切に考慮されるようになり、また特定のシステムの変化に適当な適応動作が確実に選択できるようになる。このルールは、ランタイム、例えばユーザとの対話または任意の機能またはモジュールを評価する間に発生する事象または状態をも考慮に入れる。
【００２９】
ある実施形態によれば、前記ベースシステムの変化には、下記すなわちベースシステムの要素の追加、除去または修正の中の１つ以上が含まれる。
【００３０】
ある実施形態によれば、本発明の実施形態の１つに基づいて方法を実行するためのコンピュータが実行可能なコードを含むコンピュータプログラムが提供される。
【００３１】
さらに別の実施形態によれば、ウィーバを用いてベースシステムへとウィービングされるべきアスペクトを実行するアスペクトシステムを含むアスペクト指向プログラミングの環境において前記ベースシステム内の変化に適応する装置が提供され、この装置は、前記ベースシステム内の変化に応じて、前記ベースシステム内の前記変化の重要性を評価する手段と、前記評価により前記変化に重要性があると判明すると、前記変化を補償するために適応動作を行うための手段とを備える。
【００３２】
このような装置は、ソフトウェアまたはハードウェアまたは両方の組合せとして実現することができる。さらに別の実施形態によれば、本発明は、本発明の実施形態による方法で定義されている機能を実現する手段を備える。そのような手段は、ソフトウェアまたはハードウェアまたは両方の組合せとして実現することができる。
【図面の簡単な説明】
【００３３】
【図１Ａ】従来技術に基づいて、ウィーバを用いるアスペクトおよびベースシステムの構成を概略的に示す図である。
【図１Ｂ】従来技術のシステムでシステムの変化が生じた場合に生じる可能性がある問題を概略的に示す図である。
【図２】本発明の実施形態による方法を概略的に示す図である。
【図３】本発明のさらに別の実施形態による方法を概略的に示す図である。
【図４】本発明の実施形態に基づいて、通知を行うための基本的な構成を概略的に示す図である。
【図５】本発明の実施形態による別の方法を概略的に示す図である。
【図６Ａ】本発明のさらに別の実施形態によるシステムを概略的に示す図である。
【図６Ｂ】本発明のさらに別の実施形態によるシステムを概略的に示す図である。
【図６Ｃ】本発明のさらに別の実施形態によるシステムを概略的に示す図である。
【図６Ｄ】本発明のさらに別の実施形態によるシステムを概略的に示す図である。
【図７】本発明による実施形態を実行するためのプログラムコードの典型的な実施例を示す図である。
【図８】本発明の実施形態によるシステムを概略的に示す図である。
【図９】本発明のさらに別の実施形態による方法を概略的に示す図である。
【発明を実施するための形態】
【００３４】
図１Ａは、個別のモジュールＭ１，Ｍ２，Ｍ３，．．．，Ｍｎを含むベースシステム１００を概略的に表している。これらのモジュールは、ソフトウェアモジュール、特定のソフトウェアモジュールに関連したハードウェアモジュール（例えば、ハードウェア用のドライバ）などである。例えばネットワークの場合では、要素Ｍ１〜Ｍｎは、端末、ルータ、スイッチ、それらの対応するドライバ部品などネットワークの個々のハードウェア部品を意味する。他方、要素は、例えば全体のシステム、またはユーザに与えられた特定の機能などのある種の機能性を表すかまたは可能とするソフトウェア部品とすることもできる。
【００３５】
図１Ａの右側に、アスペクトＡ１〜Ａｋが円１１０として概略的に示されている。「アスペクト」という用語は本明細書では、アスペクト指向プログラミングの環境において使用するアスペクトのことを指すもの、すなわちベースシステムの中でクロスカットを実行するために使用する特定のモジュールとして理解する必要がある。このために、これらのアスペクトはウィーバ（ｗｅａｖｅｒ）１２０によってベースシステム１００にウィービングされ、雲（ｃｌｏｕｄ）１３０として概略的に示されているようにベースシステムのランタイム構造を生み出す。この雲１３０では、特定のジョインポイントシャドー、すなわち図１Ａで点として示されるいわゆる適応されたジョインポイントシャドーにおいて、１つ以上のアスペクトＡ１〜Ａｋに関連付けられたアドバイスコードが呼び出される。適応されるべきジョインポイントシャドーは、それぞれアスペクトＡ１〜Ａｋに関連付けられ、またベースシステム１００内で適応動作が行われる一連のジョインポイントシャドーを意味するポイントカット（ベースシステム１００内のジョインポイント記述）に依存している。適応されるべきジョインポイントシャドーを記述することによって、いわゆる適応されたジョインポイントシャドーにおいてアドバイスコードが呼び出されてベースシステム内でクロスカット問題をインプリメントするように実行されるように、ポイントカットによりウィーバがベースシステムを修正できるようになる。このことは、図１Ａでは雲１３０として概略的に示されている構成されたシステム１３０（ウィービング後のシステム）を結果として生ずる。この図では、適応されたジョインポイントシャドーは点として示されている。ベースシステム１００が変化する場合に何が起こるかを説明するために、次に図１Ｂを参照する。
【００３６】
図１Ｂの場合、ベースシステム１００の１つの要素すなわち要素Ｍ２が、ベースシステムから取り除かれている。これは、特定のソフトウェアモジュールまたはネットワーク内の端末などの特定のハードウェア要素を外すことを示している。さらに、（新しい）モジュールＭｎ＋１が図１Ｂのベースシステムに加えられている。
【００３７】
ここで、それぞれのアスペクトＡ１〜Ａｋはそれぞれ、ベースシステムの中で自身のそれぞれのポイントカットを通るジョインポイント（対応するジョインポイントシャドーを意味する）と呼ばれることに注意しなければならない。しかしながら、ここでモジュールＭ２を取り外すことは、ベースシステムに存在していたモジュールが削除されたため、幾つかのジョインポイントがベースシステムには実際にはもはや存在しないという事実をもたらす。これが事実の場合、図１Ａのランタイム構成１３０は、もはや実際に存在しないベースシステム内の要素（この実施例ではモジュールＭ２）を表す適応されたジョインポイントシャドーを含む。このことは、図１Ｂでランタイムシステム１３０’の中で除かれている適応されたジョインポイントシャドーによって概略的に示されている。これらのジョインポイントシャドーは、ベースシステム内の対応するモジュール（モジュールＭ２）がベースシステムから取り除かれているという事実によって不要になったものである。
【００３８】
さらに、新しいモジュールＭｎ＋１をベースシステム１００に加えることにより、アスペクトＡ１〜Ａｋが、新たに加えられたモジュールＭｎ＋１に対応する付加的な適応されたジョインポイントシャドーを実際に含むべきランタイム構成１３０’に対応するという事実がもたらされる。しかしながら、ウィービングを行うときにはモジュールＭｎ＋１はベースシステムには存在しないので、このモジュールに対応するジョインポイントシャドーはウィービング時には適用されておらず、このモジュールＭｎ＋１は実際には存在しない。このことは、図１Ｂの要素１３０’内の空円によって概略的に図示されている。これは、特定の時点で構成されたウィービングシステムは、システムの変化がベースシステム内で発生すると、実際のベースシステムおよびその対応するアスペクトを対応するジョインポイントおよびジョインポイントシャドーを用いても、もはや正確には反映できないことを意味する。これは、システム全体の実行時および動作時に不整合またはエラーをもたらす可能性がある。
【００３９】
この欠点を克服するために、図２に関連して例示した本発明の１つの実施形態を提供する。図２は、本発明の１つの実施形態による方法を例示するフローチャートを示している。ステップ２００では、ベースシステムの中に何らかの変化、すなわち図１Ａおよび図１Ｂに関連して例示したような変化が発生する。そのような変化に基づいて、ステップ２１０では、ベースシステムへとウィービングされている１つ以上のアスペクトについてこの変化についての重要性を評価する。次に、その後のステップ２２０では、ステップ２１０で評価されたシステムの変化の重要性に基づいてシステムの変化に適応させるために適応動作が行われる。
【００４０】
ベースシステム内のシステムの変化の重要性を評価する動作２１０には、例えばあるアスペクトおよびそのポイントカット（またはそのジョインポイント記述）について、システムの変化の後でこのアスペクトにより追加され参照されたジョインポイントまたはジョインポイントシャドーにおいて変化があるかどうかを評価することから成る。これは、図３に関連してさらに説明するように行うことができる。
【００４１】
図３は、本発明のさらに別の実施形態によるフローチャートを概略的に示している。図３では、特定のアスペクトが特定の時点でベースシステムの中にウィービングされる（ステップ３００）。次に、ステップ３１０において、図１Ａおよび図１Ｂに関連して既に前に説明したようなシステムの変化が発生する。次に、ステップ３２０において、システムの変化の後のアスペクトおよびベースシステムの組合せに対応する一連のジョインポイントとジョインポイントシャドーのうちのいずれかまたは両方が計算または決定される。これにより、各アスペクトについて、アスペクトが確実に正しくベースシステムへとウィービングされるために適応動作を行う必要がある一連のジョインポイントとジョインポイントシャドーとのうちのいずれかまたは両方が結果として生まれる。次にステップ３３０において、特定のアスペクトについて、ステップ３２０で生じた一連のものを、アスペクトがウィービングされた時点で決定または計算された同じ一連のジョインポイントまたはジョインポイントシャドーと比較する。換言すると、システムの変化の前の一連のものとシステムの変化の後の一連のものとを比較する。次にステップ３４０において、２つの一連のものが異なると判断した場合には、システムの変化がこのアスペクトについて重要であり、またシステムの変化およびそのアスペクトに対する影響を補償するために、何らかの適応動作（ステップ３５０）を行う必要がある。適応動作を行う１つの方法は、アスペクトを再ウィービングすること、換言するとステップ３００に戻ってアスペクトをもう一度、今変化したベースシステムへとウィービングすることである。しかしながら、ベースシステムには実際にはもはや存在しない（対応しない）ジョインポイントまたはジョインポイントシャドーをアスペクトが参照することがステップ３４０にてわかった場合には、ベースシステム内のアスペクトを再ウィービングする（再インストールする）ことに代えて、このアスペクトを削除する（ｗｉｔｈｄｒａｗ）（取り外す（ｄｅｉｎｓｔａｌｌ）またはアンウィービングする）ことができる。つまり、この場合に行われる適応動作は、このアスペクトを（部分的または全体的に）削除、取り外しまたはアンウィービングすることである。
【００４２】
一連のものの比較（ステップ３３０）は各アスペクトについて実行され、その結果に基づいて幾つかのアスペクトが再ウィービングされ、幾つかはアンウィービングされ、また幾つかについてはいかなる操作も行う必要がない。
【００４３】
図４を参照して、本発明の実施形態によるシステムの変化に関する通知について説明する。ベースシステム４００が変化すると、システムの変化に関する通知が、好ましくは自動的にシステム要素４１０に送られる。要素４１０は、システムの変化を評価し適切な適応動作を開始できるような任意の要素とすることができる。１つの特定の実施形態によれば、システムの要素４１０は、任意のベースシステムに関連付けられアスペクトまたはアドバイスがベースシステム内の何らかの変化に関して通知されるような、ベースシステムに登録されたアスペクトまたはアドバイスとすることができる。通知を受けるためのこのような登録は、例えばプログラミング言語であるスモールトーク言語で容易に実行できる。このプログラミング言語スモールトークは、システムが変化する場合に通知を受けるために、ベースシステムに登録するためのフレームワークを提供する。その結果そのような情報に関係しているとして自身が登録されているアスペクトまたはアドバイスが通知され、次にそのポイントカットを再評価して、既に前に説明したように一連のジョインポイントまたはジョインポイントシャドーを決定し、システムの変化の前の一連のジョインポイントまたはジョインポイントシャドーとの相違が判明すると、アスペクトまたはアドバイスは適応動作、例えばアスペクトまたはアドバイスの再ウィービングを開始する。ある実施形態によれば、アスペクトについて関係する特定の変化（システムの特定の部品またはモジュールにおける変化）などのシステムの変化についてアスペクトまたはアドバイスを登録することは、一般的なものまたは特定のものとすることができる。
【００４４】
しかしながら、要素４１０は、アスペクトをベースシステムへとウィービングする役割を果たすウィーバとすることもできる。このウィーバは次に、システムの変化がそれに重要性があるかどうかを評価し、重要性があると判明すると、１つ以上のアスペクトまたはアドバイスを再ウィービングするなどの適応動作を開始する。
【００４５】
しかしながら、要素４１０は、通知を受け取り（ことによると最初だけ）評価を行う役割を果たすような特定のシステム要素によって形成することもできる。次に、この要素は、どのアスペクトまたはアドバイスがシステムの変化によって影響を受けるかを決定し、次に適応動作を開始するためにアスペクトおよびアドバイスとウィーバとのうちのいずれかまたは両方にメッセージを送る。
【００４６】
システム要素４１０に対する（自動的な）通知は、「プッシュモデル」と見なすことができるが、システム要素が何らかの変化が起こっているかどうかについて積極的にベースシステムをポーリングすることもできる。これは、「プルモデル」と見なすことができる。そのようなプルモデルの１つの具体的な実施形態が、図５に概略的に示されている。ベースシステムは、ベースシステムの中にインストール、ウィービングまたは構成されている１つ以上のアスペクトに関連付けられた一連のジョインポイントまたはジョインポイントシャドーを変化させる可能性があるシステム要素を追加、取外しまたは修正するようなシステムの変化が発生しているかどうかを（連続的に）監視またはポーリングする（図２のステップ２００）。ステップ５１０において、これが認められると、システム要素４００（図４を参照のこと）に通知される。一旦、システム要素（これはアスペクト、アドバイス、特定の要素またはウィーバとすることができる）が通知を受けると、システム全体のそれぞれのアスペクトまたはアドバイスについて別個に、システムの変化の重要性に関する評価（ステップ４３０）を実行する。システムの変化に重要性があると判明すると、既に前述されたように適応動作が行われる。システムの変化が発生する場合は、変化の通知に関係するこれらの要素がシステムの変化について自動的に通知されるように、ベースシステムの監視が行われる（ステップ４００〜４２０）。これは「プッシュモデル」と見なすことができる。この場合、アスペクトは何らかのシステムの変化について通知されるようにシステムに登録する。または別のいわゆる「プルモデル」を用いる場合は、アスペクトは何らかのシステムの変化を見つけるためにベースシステムを能動的にポーリング（ｐｏｌｌ）する。プッシュモデルとプルモデルとの任意の組合せも考えることができる。
【００４７】
１つの特定の実施形態によれば、本発明は、コンピュータ言語「スモールトーク（Ｓｍａｌｌｔａｌｋ）」またはその方言の１つで「スクウィーク（Ｓｑｕｅａｋ）」と呼ばれる言語を用いて実行することができる。この言語「スクウィーク」を用いるアスペクト指向プログラミングの説明は、例えばＲ．Ｈｉｒｓｃｈｆｅｌｄ、「ＡｓｐｅｃｔＳ  −  Ａｓｐｅｃｔ−ｏｒｉｅｎｔｅｄ  ｐｒｏｇｒａｍｍｉｎｇ  ｗｉｔｈ  Ｓｑｕｅａｋ」、Ａｋｓｉｔ、Ｍｅｚｉｎｉ、Ｕｎｌａｎｄらによる「Ｏｂｊｅｃｔｓ，  Ｃｏｍｐｏｎｅｎｔｓ，  Ａｒｃｈｉｔｅｃｔｕｒｅｓ，  Ｓｅｒｖｉｃｅｓ，  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｆｏｒ  ａ  Ｎｅｔｗｏｒｋｅｄ  Ｗｏｒｌｄ」、ＬＮＣＳ  ２５９１、Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ、２００３年に記載されている。
【００４８】
前述したように、言語スクウィークまたはスモールトークは、実行されるベースシステム内のアスペクトおよびその対応するジョインポイントまたはジョインポイントシャドーに影響する可能性がある何らかのシステムの変化の監視を比較的容易に行うために使用できるシステムの変化および変化の通知を行うためのインフラストラクチャーを提供する。そのために、アスペクトに関連付けられたアドバイスは、種類または方法の追加、修正または取外しなどのシステムの変化の事象に対して登録することができる。
【００４９】
変化が生ずると、こうした変化を通知するように登録されたアドバイス、アスペクト、ウィーバ、ポイントカットまたはシステム全体の他の任意の要素などのシステム要素は、この変化に関して通知される。前述の実施例では、情報は種類または方法の追加、修正または取外しにのみ関係している。１つの実施形態によれば、通知はシステムの変化が発生する「直前」に行うこともできる。
【００５０】
既に前述したように、システムの変化に関する情報により特定のアスペクトについてシステムの変化の重要性を評価することがトリガされ、重要性があることが判明すると、適応動作が前述したように実行される。
【００５１】
システムの変化の重要性を確認するために、１つの実施形態によれば、システムの変化の後のアスペクトまたはアドバイスの一連のジョインポイントまたはジョインポイントシャドーを、アスペクトが最初にインストールし、ウィービングし、組み立てが行われたときまたは以前の重要な変化の事象に応じて前に適応動作が行われたときの一連のものとの比較が実行される。換言すると、システムの変化の後の新しい一連のジョインポイントまたはジョインポイントシャドーが、アスペクトに現在関連付けられている一連のジョインポイントまたはジョインポイントシャドーと比較される。実際にアスペクトと関連付けられた一連のジョインポイントシャドーが実際にアスペクトとに関連付けられる必要がある一連のものと異なっているように、この比較が両方のリストすなわち一連のものが相違しているという結果に至った場合は、適応動作が行われる。
【００５２】
１つの実施形態によれば、重要性があると判明したシステムの変化が生じた場合に行われる適応動作には、代わりにまたは組み合わせて行う幾つかの動作が含まれる。このような動作には、ソフトウェアのインストールまたはアンインストール、コンポーネントの起動と停止とのうちのいずれかまたは両方、モジュールのロードとアンロードとのうちのいずれかまたは両方、または交換、およびアスペクトとアドバイスとのうちのいずれかまたは両方の再ウィービングまたはアンウィービングが含まれる。
【００５３】
本発明による実施形態のさらに別の実施例は、図６Ａ〜図６Ｄに関連して説明する。図６Ａは、特定の言語すなわちスクウィークで実行され、AspectSと呼ばれるスクウィークを用いるアスペクト指向プログラミングに対する一般的な方式による、従来のアスペクトのウィービングを概略的に示している。この言語を用いるアスペクト指向プログラミングの詳細については、R. Hirschfeldによる前述した文献を参照されたい。その中に、図６Ａのさらに詳細な説明も記載されている。
【００５４】
AspectSの方法によれば、アスペクトには１つ以上のアドバイスが含まれている。アドバイスはそれぞれ１つ以上のポイントカットを含み、ポイントカット自身はベースシステムの中にジョインポイントを設定するためのジョインポイント記述を含む。ジョインポイント記述子は、セレクタ（方法）およびジョインポイントを定義するためにセレクタを実行する（受信機の）クラスを（アドバイスを受信するクラスとして）特定する。アドバイスは１つ以上のアドバイス識別子をさらに含み、これにより、アドバイスに関連したポイントカットの動的な属性を記述できるようになる。さらにアスペクトは、アドバイスを実行するためのコードを含む。このため、AspectSは、アドバイスを実行するためのコードを表すクラスブロックコンテキストのインスタンスであるブロックを使用する。図６Ａの上半分は、AspectSの環境におけるアスペクトを概略的に示しており、図６Ａの中央には、ウィーバが概略的に示されている。このウィーバは、図６Ａの上半分に例示されたアスペクトを、ベースシステム（図示せず）にウィービングする。アスペクトをベースシステムの中にウィービングするために、AspectSはいわゆるブロックメソッドラッパの位置を、アスペクトによってアドバイスされた様々なジョインポイントの中に記載された受信機のクラスのメソッドディクショナリの中に置く。これは、図６Ａの下半分に概略的に例示されている。これにより、図６Ａのボトムラインに示しているようにウィーバは、アスペクトがベースシステムへとウィービングされている構成システムを生み出す。AspectSは、アスペクトによってアドバイスされた種々のジョインポイントの中で記載された受信機のクラスのメソッドディクショナリの中にブロックメソッドラッパを配置する。
【００５５】
ウィーバによって構成された構成システムのランタイムと同等なものが、図６Ｂに概略的に示されている。アドバイス、ポイントカットおよびその関連付けられたジョインポイント記述子に基づいて、メソッドラッパが使用され、対応するブロックコンテクスト計算によってアドバイスコードの実行が可能になる。前述した内容のより詳細な説明は、上記のR. Hirschfeldの文献の中にある。
【００５６】
AspectSに関する従来の方式を説明したので、ここで例えばAspectSを実行する場合の本発明による実施形態を、図６Ｃおよび図６Ｄを参照して説明する。図６Ｃは、本発明に基づいて、どのようにアスペクトおよびその対応するアドバイスがベースシステム内の変化に対処するように修正されるかについて概略的に示している。図６Ｃからわかるように、アドバイス識別子は適応動作ストラテジー（これは、ブロックコンテクストの実行にも対応する）を参照する。これにより、前述したように、本発明による実施形態の動作が実行される。適応動作ストラテジーには、何らかのシステムの変化について評価するステップと、行うべき適切な動作を決定するステップと、そのような動作を開始するステップとが含まれる。環境（システムの変化に対する評価）に基づいて、図６Ｃに概略的に示されているように、アスペクトもしくはアドバイスの再ウィービング、またはアスペクトもしくはアドバイスの削除などの種々の反応を実行できる。
【００５７】
システムの変化を評価し必要な場合に適応動作をトリガするために、既にウィービングされた（「アクティブな」）システムの中で使用および実行されるような、一連のジョインポイントまたはジョインポイントシャドーに対応し、またはそれらを反映する「アクティブなポイントカット」が提供される。システムの変化が発生した後で、変化したシステムに対する（新しい）ポイントカットまたは対応する一連のジョインポイントまたはジョインポイントシャドーが評価され、既に存在するポイントカット（「有効なポイントカット」）またはその対応する一連のジョインポイントまたはジョインポイントシャドーと比較される。（重要性がある）相違が存在すると判明すると、適切な適応動作が行われる。
【００５８】
このことは、図６Ｄに示されているブロック図の中でさらに詳細に説明する。この図６Ｄでは図６Ｃに加えて、本発明の実施形態に基づいて実行する個々のステップも示されている。システムの変化（事象ａ）に関するアドバイスが通知される。アスペクトまたはアドバイスの代わりに、図６Ｄのａ＊で示されているようにアスペクト以外の他のシステム要素も同様または代わりに通知される。通知されるシステム要素は、重要性の確認および適応動作のいずれかを実行できる要素である必要があり、または重要性の確認および適応動作を開始できなければならない。ここで、図４および対応する要素４１０を説明する。
【００５９】
次に、システム要素は、変化と重要性がありそうなアスペクトまたはアドバイスに通知する。次に、重要性の確認および修正の開始が行われる（ステップｂ）。これにより、次に、一連のジョインポイント、ジョインポイントシャドーとしてポイントカットの計算を開始する（ステップｃ）。次に結果が、実際に動作中のポイントカット、すなわちシステムの変化の前、または現在の（ウィービングされた）システムの中で使用されているようなポイントカットまたはその対応する一連のジョインポイント、ジョインポイントシャドーと比較される（ステップｄ）。動作中のポイントカットとシステムの変化の後の新しいポイントカットとの間に何らかの相違が存在すると判明すると、適応動作ストラテジーが呼び出されて（ステップｅ）、これによりシステムの変化に対処またはそれを補償するために適応動作が行われる。
【００６０】
以下、本発明による実施形態の特定の具体例の実施例を説明する。この例証的な具体例は、スモールトークの方言であって当業者には周知のプログラミング言語であるスクウィークに基づいている。スクウィークによるアスペクト指向プログラミングの概念に関する説明は、上記のR. Hirschfeldによる文献の中にある。
【００６１】
図７は、プログラムコードの要素であるＣ０１、Ｃ０２およびＣ０３を示している。Ｃ０１およびＣ０２はそれぞれ、「adviceMouseEnter」および「adviceMouseLeave」と名付けられている、マウスの動きに関係するアスペクトに対応したアドバイス用のプログラムコードを示している。Ｃ０１は、マウスが入力されたときに実行するアドバイス用のプログラムコードを定義し、Ｃ０２は、マウスが放置されたときにアドバイスを実行するためのプログラムコードを示している（それぞれマウスを入力することまたは放置することに対応するマウスの事象の場合）。ポイントカットには、モーフ（Morph）（例示的なクラス）および全てのそのサブクラスにおいて、方法（またはセレクタ）「mouseEnter」（adviceMouseEnterの場合）および「mouseLeave」（adviceMouseLeaveの場合）が実行される位置などのジョインポイント記述が含まれる。
【００６２】
Ｃ０３は、AsMorphicMousingAspectと呼ばれるこれら２つのアドバイスに属するアスペクトをウィービングするための例示的なコードを示している。
【００６３】
実施例Ｃ０１およびＣ０２で示されているプログラムコードは、マウスの入力およびマウスの放置に対してアドバイスを実行する従来の実施例である。Ｃ０１およびＣ０２は、根底にあるベースシステムにおけるどのようなシステムの変化にも対処できない。
【００６４】
ブロックＣ０４に示しているプログラムコードは、このアドバイスによって実行されるベースシステム内のどのような変化も処理することができるアドバイスの実施例を与えている。Ｃ０４はマウスの入力イベントに対するプログラムコードの実施例を与え、Ｃ０５はマウスの放置に関連したアドバイスに対するプログラムコードの実施例を与えている。
【００６５】
アドバイスが識別子を含むことが分かる。このような識別子により、アドバイスまたはアスペクトに関連したジョインポイントまたはジョインポイントシャドーの組の動的な属性の記述（例えば、ポイントカットによって記述される）が可能になる。このような識別子の機能に関するより詳細な説明は、上記のR. Hirschfeldによる文献の中にある。ブロックＣ０４およびＣ０５の識別子は従来のコードのものとは異なり、すなわち、それらは適応動作モジュール（「アダプテーション」と呼ばれる）およびアドバイスを再インストールするモジュール（「アドバイスの再インストール」と呼ばれる）を参照することを含むことが分かる。
【００６６】
「アダプテーション」は、システムの変化に関してシステムを監視し、これらのシステムの変化を評価するためにシステム要素を参照して、このシステムの変化に重要性があると判明すると、「アドバイスの再インストール」を実行するコードまたは要素が変化に対処するために呼び出される。この識別子を用いて、ブロックＣ０４およびＣ０５で与えられるアドバイスは、システムの変化の後に、必要な場合、アドバイスを再インストールすることによってどのようなシステムの変化にも対処することができる。
【００６７】
本発明の１つの実施形態によれば、本発明に基づいてシステムを実行するために３つの異なるエンティティーがある。１つのエンティティーはベースシステムであり、これはベースシステムを形成するモジュールまたは要素を備えている。アスペクトモデル（これはアスペクト要素またはアスペクトシステムと呼ばれることもある）は、ベースシステムとは異なり、それから分離している。このアスペクトモデルは、アスペクト、アドバイスまたはポイントカットなどを実行する要素またはモジュールによって形成され、またはそれらを備えることができる。ベースシステムとともにアスペクトモデルまたはアスペクトシステムは、ベースシステムおよびクロスカットの問題をベースシステムの中で実行するアスペクトモデルまたはアスペクトシステムによって形成される全体のシステムを形成する。
【００６８】
全体のシステムの一部を形成する第３のエンティティーは、ベースシステム内の変化に適応的な方法で反応する可能性を提供する適応システムまたは適応動作要素である。
【００６９】
３つのシステム（ベースシステム、アスペクトシステム、適応システム）は別個のものであり、各システムが分離したエンティティーであるという意味で互いに切り離されている。１つの実施形態に基づいた各エンティティーは、そのエンティティーを実行または設計するルールおよび対応する表現（プログラミング言語など）のフレームワークを用いて構築される。各エンティティー（ベースシステム、アスペクトシステム、適応システム）は、個別のモジュールまたは要素を備えている。このことは、図８に概略的に示されている。この図では、ベースシステムがボックス８１０として概略的に示されている。この図のベースシステムは、図１Ａにも示されたベースシステムに対応しており、１つの実施形態では、より汎用的なコンピュータ言語スモールトークの方言であるコンピュータ言語スクウィークの中で実行することができる。
【００７０】
ベースシステムに加えて、異なった別のエンティティーとして別のモデル、アスペクトシステム８２０（図８を参照のこと）が存在する。１つの実施形態では、このアスペクトシステム８２０は、アドバイスコードを呼び出す必要がある、ベースシステム８１０の中のジョインポイントシャドーを選択するアドバイス要素（図示せず）およびポイントカット（図示せず）を含むアスペクト８２５を備えている。
【００７１】
アスペクトシステムは、別個のエンティティーであり、またベースシステムに関係なく実行および修正することができるという意味で、ベースシステムから分離されている。
【００７２】
ウィーバ８３５を通して、アスペクトシステムの中で定義されたアスペクトまたはアドバイスはベースシステム８１０の中にウィービングされ、これにより実行の準備ができた構成システム８４０を形成する。本発明の実施形態によれば、構成システム（またはベースシステムまたはアスペクトシステム）の中のどのような変化にも適応することが必要となる。
【００７３】
システムの変化に適応できるようにするために、全体的なシステムのさらなる要素（第３の要素）、適応システム８６０が提供される。１つの実施形態による適応システムは、ベースシステム内の何らかの変化に関する通知を受け取り、次にその変化を評価する要素を含む。アダプテーションシステムはさらに、１つの実施形態に基づいて、動作の選択を実行するアクションセレクタを備える。このアクションセレクタは、どの種類のシステムの変化またはどの種類の評価結果がどの種類の行うべき適応動作に導く必要があるかを定義するための一連のルールである。それはさらに、アクションセレクタによってなされた決定に基づいて必要であることが判明した適応動作を開始または実行のいずれかを行うための要素を備える。次に、適応システムは、適応動作を実行するために、ウィーバに動作を行わせることができる。これには、アスペクトシステム８２０のアスペクトまたはアドバイスの再ウィービングが含まれ、またアスペクトまたはアドバイスのアンウィービングも含まれる。
【００７４】
前述したように、ベースシステム、アスペクトシステムおよび適応システムは別個のエンティティーである。これらのエンティティーは、適当なインターフェース、一般的には手順、方法または機能の直接または間接呼出しを通して相互作用を行う。これにより、これら３つのエンティティーを互いに独立に実行および修正することが可能となるため、大きな柔軟性が得られる。
【００７５】
適応システム９００について、図９を参照しながらさらに説明する。オブザーバ９１０は、ベースシステム内の変化に関する通知を受け取る。次に、オブザーバに接続されたエバリュエータ９２０は、システムの変化に重要性があるかどうかを評価する。重要性がある場合は、アクションセレクタ９３０がどの適応動作を実際に行う必要があるかを決定または選択する。そのために、アクションセレクタ９３０は、評価結果に基づいて、それがどのように決定されるかまたどの適応動作を行うべきか（「適応動作ストラテジー」と呼ばれることもある）を定義するために一連のルールを実行する。次に、アクションセレクタは、全体的または部分的な再ウィービング、全体的または部分的なアンウィービングなどの複数の可能な適応動作ストラテジーがあるプール９５０から、この動作すなわち適応動作ストラテジーを選択する。次に、選択された適応動作ストラテジーは転送されて、実行するウィーバ９６０によって使用される。これにより、結果として変化された構成モデル９７０が生ずる。構成モデルまたはベースシステム内に何らかの別の変化が生じる場合、オブザーバ９１０から始まる全体の手順を再度トリガすることになることは容易に理解されよう。
【００７６】
ここで、別の実施形態によるシステムの変化に関する評価について、さらに詳細に説明する。エバリュエータ９２０は、ベースシステム内の変化に関する通知をオブザーバ９１０から受け取る。前述したように、次にこの変化が評価され、幾つかの可能な評価結果の１つをもたらす。この結果として例えば、システムの変化の後で、システムモジュールを追加する場合は、より多くのジョインポイントシャドーをウィーバがウィービングするべきであり、システムモジュールを取り外す場合は、より少ないジョインポイントシャドーをウィーバがウィービングするべきであるといったことがポイントカットにより示される。このことは、前の実施形態に関連して既に説明したものである。
【００７７】
評価結果に基づいて、アクションセレクタ９３０は次に、どの動作（適応動作ストラテジー）を実際に行う必要があるかを決定する。下記の特定のルールによって、アクションセレクタ９３０は、使用すべき適応動作ストラテジーを決定する。例えば、システムの変化の後でより多くのジョインポイントシャドーをウィービングする必要がある場合は、可能な方法の集まりであるプール９５０から選択される適応動作ストラテジーは、アスペクトをベースシステムへとウィービングするということである。
【００７８】
別の場合における評価の結果は、システムの変化の後で、より少ないジョインポイントシャドーをウィービングする必要があるということである。このとき、適応動作ストラテジーに基づいて選択される動作は、アスペクトがベースシステムからアンウィービングされることである。次に、ウィーバは、適応モジュールからアンウィービングが実行されるべき旨の通知を受ける。
【００７９】
ベースシステム、アスペクトモデルおよび適応動作モデルが３つの別個のエンティティーであることは、前に説明した。しかしながら、特定の実施形態によれば、適応システムの幾つかの部分は、アスペクトモデルの要素または部分として実行することができる。例えば、オブザーバ９１０は、既に前に説明したように、例えばシステムの変化についてアスペクト、アドバイスを登録することによって、アスペクトまたはアドバイスの一部として実行することができる。ここで、アスペクト、アドバイスがシステムの変化に関する通知を受け取ると、それは評価を開始するか（例えば、機能呼出しによって）または自分で評価を実行する。アスペクト、アドバイスが特定のポイントカットに関連付けられているため、この特定のアスペクト、アドバイスについてシステムの変化に重要性があるかどうかを確認することができる。このことは、前述したように、システムの変化の前後のポイントカットを評価することによって行うことができる。これにより、特に個々のアスペクト、アドバイスに対する評価を実行することが可能になる。ベースシステム内のある種の変化は全てのアスペクト、アドバイスについて必ずしも重要性があるというわけではないため、これは好都合である。機能または手順の呼出しを通してアスペクト、アドバイス自体が実行した評価の後で、アクションセレクタが次に呼び出されて、適当な適応動作ストラテジーを決定する。この実施形態では、オブザーバおよびエバリュエータがアスペクトシステムの一部として実行され、次に適当な適応動作ストラテジーを選択して実行を開始するために、アスペクトシステムは評価の後に適応システムを呼び出す。
【００８０】
前の実施形態によれば、オブザーバおよびエバリュエータ（図９内の要素９１０および９２０）はアスペクトシステムの一部であるが、別の実施形態によれば、これらの要素はその代わりにウィーバの一部を形成する。例えば、ウィーバはシステムの変化に関する通知を受けて、そのシステムの変化を評価するか、または（機能呼出しを通して）評価を開始する。ウィーバ自身がシステムの変化を評価する場合、ウィーバは評価結果を適応システムに転送する。適応システムのアクションセレクタは、適応動作を選択する役割があるため、適当な適応動作を選択してその実行を開始する。
【００８１】
このため、前の実施形態によれば、図９に示したオブザーバ９１０およびエバリュエータ９２０は、適応システムの一部ではなくてアスペクトシステムまたはウィーバの一部である。ここでも適応システム、アスペクトシステムおよびベースシステムは、直接または間接呼出しを通して通信する３つの別個のエンティティーのままである。
【００８２】
前述したように、アクションセレクタの中で実行される適応ルールは、システムの変化またはそれらの評価と行う必要がある適応動作（選択された適応動作ストラテジー）との間の対応関係を反映する。プログラマが例えばプログラミング時に、例えばどのシステムの変化が行うべき特定の適応動作（デフォルトの適応動作）をもたらすかを定義することによって、この対応関係を定義することができる。別の実施形態によれば、適応動作を行うという決定は、その決定が例えば他のモジュールまたは機能の評価、またはユーザの入力内容（ランタイムの間の）の評価などの、ランタイムの間に決定されるパラメータに依存するように実行される。例えば、新しいシステム要素を追加する場合は、このシステム要素を例えばロギングまたは追跡手順によって観察する必要があるかどうかをユーザは尋ねられ、その必要がある場合は、ユーザの肯定応答に反応して、適切な適応動作ストラテジーが選択され、これは例えば再ウィービングが実行されることを意味する。
【００８３】
適応動作ストラテジーの選択は、アクションセレクタで実行されるルールを参照することによって、一般にランタイムの間に行われ、またこれらのルールは、望ましい適応動作能力を実現するために設計者の好みに基づいて実行することができる。
【００８４】
上記の実施形態に関連して本発明を説明してきたが、これらは具体例の目的のみに使用されるものであり、本発明を限定すると解釈するべきではなく、また本発明の精神および範囲から逸脱することなく修正することができることは、当業者は容易に理解されよう。特に、本発明はソフトウェア、ハードウェア、または両方の組合せの中で実行できることは明らかである。本発明の要素は、ハードウェア、ソフトウェアまたは両方の組合せによって実現できる。説明の中で特定のプログラミング言語について言及したが、任意の好適なコンピュータおよび任意の好適なプログラミング言語を使用して本発明を実現できることを理解されたい。さらに、例示的なプログラムコードは、本発明の原理を説明するためにのみ例示的に使用されると理解すべきであり、このため本発明を限定すると理解してはならない。本発明の実施形態は、ソフトウェア、ハードウェア、または両方の組合せの中で実現することができる。
【００８５】
例えば、ある実施形態によれば、本発明の実施形態を実行する装置は、本発明の前の実施形態に関連して説明した機能を実行できるように適応動作が行われ、またコンピュータまたはコンピュータシステムに取り付けられるウィーバを備えている。別の実施形態によれば、本発明の実施形態を実行する装置は、本発明の以前の実施形態に関連して説明された機能を実行できるように適応動作が行われ、またコンピュータまたはコンピュータシステムに取り付けられるアスペクトシステムを備えている。本発明のさらに別の実施形態によれば、本発明の実施形態を実現する装置は、本発明の１つ以上の前述の実施形態に関連して説明したように、コンピュータまたはコンピュータシステムが機能できるようにするソフトウェアが組み込まれている任意のコンピュータまたはコンピュータシステムとすることができる。
【図１Ａ】
2011170884.tif 000003
【図１Ｂ】
2011170884.tif 000004
【図２】
2011170884.tif 000005
【図３】
2011170884.tif 000006
【図４】
2011170884.tif 000007
【図５】
2011170884.tif 000008
【図６Ａ】
2011170884.tif 000009
【図６Ｂ】
2011170884.tif 000010
【図６Ｃ】
2011170884.tif 000011
【図６Ｄ】
2011170884.tif 000012
【図７】
2011170884.tif 000013
【図８】
2011170884.tif 000014
【図９】
2011170884.tif 000015
【手続補正書】
【提出日】平成23年6月7日(2011.6.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ウィーバを用いてベースシステムへとウィービングされるべきアスペクトを有するアスペクトシステムと、前記ベースシステムとを含むアスペクト指向プログラミング環境において、前記ベースシステム内の変化に適応する方法であって、
前記アスペクトが、実行される一連のアドバイスコードと、前記ベースシステムにおいて前記アドバイスコードが実行されるポイントとして前記ベースシステムにおけるジョインポイントを記述する一連のジョインポイント記述とを有しており、
前記ウィーバが前記アスペクトを前記ベースシステムへとウィービングしてランタイムを生成し、ここで前記ランタイムにおけるジョインポイントシャドーにおいて当該アドバイスコードの呼出しが可能であり、前記ジョインポイントシャドーとは、前記ランタイムにおいて当該アドバイスコードを実行できる位置のことであり、
前記ベースシステム内のある変化に応じて、前記アスペクトシステム内のエバリュエータが前記ベースシステム内の変化の重要性を評価するステップと、
前記評価により前記変化に重要性があると判明した場合には、前記変化を補償するために前記ウィーバが適応動作を行うステップと
を含み、
前記エバリュエータによる前記変化の重要性を評価するステップが、
前記ベースシステム内の変化の後に、前記ベースシステム内の変化前のジョインポイントまたはジョインポイントシャドーが、前記ベースシステム内の変化後のものと異なっているかどうかを決定するステップ
を含み、
前記適応動作が、
前記評価の結果、前記ウィーバにより前記ランタイムに組み込まれることとなるジョインポイントシャドーが前記システム変化の前よりも多いことが判明した場合には、アスペクトを前記ベースシステムに再ウィービングすることと、
前記評価の結果、前記ウィーバにより前記ランタイムに組み込まれることとなるジョインポイントシャドーが前記システム変化の前よりも少ないことが判明した場合には、アスペクトをアンウィービングすることと
を含んだ複数の適応動作のうちから選択されるものである、方法。
【請求項２】
前記エバリュエータが、あるアスペクトまたはアドバイスに対応する前記一連のジョインポイントまたは前記一連のジョインポイントシャドーについて重要性の評価を個々に実行するステップと、
前記ウィーバが、前記変化に重要性があると判明した前記アスペクトまたはアドバイスについて個々に適応動作を行うステップと
をさらに含む請求項１に記載の方法。
【請求項３】
前記アスペクト指向プログラミング環境は、前記ベースシステムおよび前記アスペクトシステムに加えて適応システムを含むものであり、
前記適応システム、前記ベースシステムおよび前記アスペクトシステムは、互いに独立して修正および実行できる別個のエンティティーである、
請求項１または２に記載の方法。
【請求項４】
前記ベースシステムの変化の重要性を評価するステップが、
前記変化の後、あるアスペクトとアドバイスとのうちのいずれかまたは両方について、一連の全てのジョインポイントと一連の全てのジョインポイントシャドーとのうちのいずれかまたは両方を決定するステップ
を含むものである、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記ベースシステムの変化は、前記ベースシステムのソフトウェアモジュールの追加、取外しまたは修正のうちの１つ以上を含むものである、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
請求項１〜５のいずれか一項に記載の方法を実行するためのコンピュータ実行可能なコードを含むコンピュータプログラム。
【請求項７】
請求項６に記載のコンピュータプログラムを記憶したデータ記憶媒体。
【請求項８】
ウィーバを用いてベースシステムへとウィービングされるべきアスペクトを有するアスペクトシステムと、前記ベースシステムとを含むアスペクト指向プログラミング環境において、前記ベースシステム内の変化に適応する装置であって、
前記アスペクトが、実行される一連のアドバイスコードと、前記ベースシステムにおいて前記アドバイスコードが実行されるポイントとして前記ベースシステムにおけるジョインポイントを記述する一連のジョインポイント記述とを有しており、
前記ウィーバが前記アスペクトを前記ベースシステムへとウィービングしてランタイムを生成し、ここで前記ランタイムにおけるジョインポイントシャドーにおいて当該アドバイスコードの呼出しが可能であり、前記ジョインポイントシャドーとは、前記ランタイムにおいて当該アドバイスコードを実行できる位置のことであり、
前記ベースシステム内のある変化に応じて、前記ベースシステム内の前記変化の重要性を評価するエバリュエータと、
前記評価により前記変化に重要性があると判明した場合には、前記変化を補償するために適応動作を行うウィーバと
を備えており、
前記エバリュエータが、前記ベースシステム内の変化の後に、前記ベースシステム内の変化前のジョインポイントまたはジョインポイントシャドーが、前記ベースシステム内の変化後のものと異なっているかどうかを決定するものであり、
前記適応動作が、
前記評価の結果、前記ウィーバにより前記ランタイムに組み込まれることとなるジョインポイントシャドーが前記システム変化の前よりも多いことが判明した場合には、アスペクトを前記ベースシステムに再ウィービングすることと、
前記評価の結果、前記ウィーバにより前記ランタイムに組み込まれることとなるジョインポイントシャドーが前記システム変化の前よりも少ないことが判明した場合には、アスペクトをアンウィービングすることと
を含んだ複数の適応動作のうちから選択されるものである、装置。
【請求項９】
前記エバリュエータが、あるアスペクトまたはアドバイスについて前記重要性の評価を個々に実行し、
前記ウィーバが、前記変化に重要性があると判明した前記アスペクトまたはアドバイスについて個々に適応動作を行う、請求項８に記載の装置。
【外国語明細書】
2011170884.tif 000016
2011170884.tif 000017
2011170884.tif 000018
2011170884.tif 000019
2011170884.tif 000020
2011170884.tif 000021
2011170884.tif 000022
2011170884.tif 000023
2011170884.tif 000024
2011170884.tif 000025
2011170884.tif 000026
2011170884.tif 000027
2011170884.tif 000028
2011170884.tif 000029
2011170884.tif 000030
2011170884.tif 000031
2011170884.tif 000032
2011170884.tif 000033
2011170884.tif 000034
2011170884.tif 000035
2011170884.tif 000036
2011170884.tif 000037
2011170884.tif 000038
2011170884.tif 000039
2011170884.tif 000040
2011170884.tif 000041
2011170884.tif 000042
2011170884.tif 000043
2011170884.tif 000044
2011170884.tif 000045
2011170884.tif 000046
2011170884.tif 000047
2011170884.tif 000048
2011170884.tif 000049
2011170884.tif 000050
2011170884.tif 000051
2011170884.tif 000052
2011170884.tif 000053
2011170884.tif 000054
2011170884.tif 000055
2011170884.tif 000056
2011170884.tif 000057
2011170884.tif 000058
2011170884.tif 000059
2011170884.tif 000060
2011170884.tif 000061
2011170884.tif 000062
2011170884.tif 000063