AOP

Contextual Polymorphism?

最もよく知られているポリモーフィズムの形は、オブジェクト指向のもの。この場合、メソッドの振る舞いは、どのオブジェクトかに依存して決まる。最近、Mezini らの Caesar 言語によって、AOP 言語における新しいポリモーフィズムの形が提案されている。簡単…

Aspectual Polymorphism

まだまだマイナな単語だと思うけど「Aspectual Polymorphism」についての覚書(なので or なのだけど、読者を限定した書き方になってしまうかも&用語とか適当に使う)。いつかどこかにちゃんとした形でまとめるかもしれないけど。"Polymorphism" という用語…

Inner Advice

AOP

微妙なアイデアだけど、メソッド内でアドバイスを定義できるとしたら? public class MyClass { public void method() { { methodA(); methodB(); } after() : call( void method*() ) { // ログとか } before() : call( void method*() ) { // ログとか } }…

AOP の貢献?

AOP

AOP が貢献したことって何だろう? 多くの人は、プログラミングに直接影響を与えるような部分を強調するかもしれない。たとえば、横断的関心事をうまくモジュールできるようになったとか。 でも、最近僕が感じているのは、もっと精神的というか意識的という…

Annotation and Inter-type Declarations or Retroactive Abstraction

AOP

時には、あるアノテーション(@)を定義しているかどうかで、クラスの構成を自動的に決めたい場合がある。 たとえば、メソッドをアドバイスとして定義したら、そのクラスは、Aspect の interface を実装するなど: public class Logging implements Aspect {…

アスペクト指向: 取り組む問題と解決するための技術

AOP

まず、僕自身がアスペクト指向を十分に理解しているとも、僕が言うことが正しい、とかも主張するつもりもない、ということに注意してもらって、以下の話。 アスペクト指向(or AspectJ)に触れ始めてからまだ2年(もう2年?)だけども、アスペクト指向研究者…

AspectJ による GoF デザインパターンの実装

クエッション: どのくらいの AspectJ ユーザが、AspectJ を使って GoF のデザインパターンを再実装しようと試みた? 短いアンサー: ほとんどなし 長いアンサー: Jan Hannemann さんと、Gregor Kiczales さんの「Design Pattern Implementation in Java and A…

アスペクト思考

AOP

「指向」の間違いじゃなく、アスペクトなプログラム「思考」の話。 アスペクト指向が取り組む問題は、横断的関心事のモジュール化にある(僕が決めたんじゃなくて、一般的な話)。横断的関心事は、一般的には、二つの状況を表す: コードのちらばり: ある機能…

Pointcut Overriding

AOP

どうやってポイントカットの定義を拡張する? たとえば、以下のようなコードがあったとして: public aspect MyAspect { pointcut mypc() : call( (MyClassA || MyClassB).myMethod() );}MyClassA と MyClassB に加えて、MyClassC を追加したいとしたら? 最…

再利用性

AOP

あたりまえっぽいけど、あるクラスを再利用 してもらえる かどうかは、誰が再利用するのかに依存する。 たとえば、以下のような Point クラスと: public class Point { private int x; private int y; public void setX(int x) { this.x = x; } public int g…

Type-Safe Pointcut Extension

AOP

タイプセーフかどーかは知らないけど、現在の AspectJ での抽象ポイントカットの仕組みは、やや安全ではないと思う。 たとえば、次のような抽象アスペクトがあるとする: public abstract aspect SetLogging { protected abstract pointcut targetClass(); be…

Predicate Dispatch and Named Advice

AOP

(named advice は公式な用語でないと思うけれど・・・) Predicate Dispatch と名前のついたアドバイスとの関係は? 何か関係がありそうな気がする。ネタ元(といっても関係の答えが書いているわけでなく predicate dispatch の話が書いている): Todd Millst…

beforeadviceexecution, afteradviceexecution, and aroundadviceexecution

AOP

すげえ読みにくいけど、BeforeAdviceExecution, AfterAdviceexEcution と AroundAdviceExecution のこと。現在の AspectJ では、adviceexecution だけしか用意されていない。これは、なかなか面倒なことになりうると思う。詳しくは僕もまだもやもやしてるの…

Advice Reusability and Named Advice

AOP

名前つきアドバイスはなぜ必要か? たとえば: public class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } }public as…

Inter-type Pointcuts

AOP

inter-type 宣言(or オープンクラス [1])が面白いのは、外部から、特定のモジュールを変更できること。AspectJ では、たとえば、外部からあるクラスにあるインタフェースを implements させたり、あるいは、外部からクラスに特定のメソッドやフィールドを…

Prametric Pointcuts

AOP

どうやってポイントカットの再利用性を向上させる? or どこでポイントカットのコードの重複が起こる? or ポイントカットの変化点はどこ? 一つは、メソッド名に関連するものがあげられるきがする: public aspect PointLogging { before() : call(void Poin…

Aspects, Unplugability, Extension, and Dependency

AOP

ソフトウェア開発にアスペクトを導入しようとする場合、少なくともアンプラグ可能なアスペクトとそうでないアスペクトの二種類があると思う。 ロギングだけを考えてみても、単にログを取りたいからロギングアスペクトを導入してみる、という一時的なケース(…

Development-Level Crosscutting Concerns

AOP

言語レベルだけじゃなく、ソフトウェア開発全体に影響する Crosscutting Concerns が存在するかも? そしそうだとしたら、どうすれば? たとえば、ある要求が、コードと Ant のビルドファイルに同時に影響する場合。要求 A と要求 B があって、どちらかをや…

Observer and Around Advice

AOP

Observer パターン実装のために、around アドバイスが必要になることはあるか? after アドバイスや before アドバイスはある気がする。

A Family of Aspects

AOP

タイトルはちょっと大げさ(あるいは間違ってるかも)だけど、機能的にみると、アスペクトにはどんな種類が? 暗黙に適用されるアスペクト(AspectJ におけるアスペクト) オブジェクトに対して作られるアスペクト(AspectJ における per-object アスペクト…

Inter-type Implicit Variable or Inter-type Local Variable

AOP

inter-type 宣言の種類の一つとして、暗黙の(or 特殊な)変数を宣言できると便利かもしれない。たとえば、this とか super とか thisJoinPoint とかに相当する変数を新たに宣言できるようにしたい。 考えられるスコープとしては、クラス単位とメソッド単位…

Explicit JoinPoints or JoinPoint Class

AOP

AspectJ における一つの制限(ただし、欠点とは限らない)は、あらかじめ決められたジョインポイントのみが存在すること。したがって、プログラマが望むすべてのジョインポイントとなりうるポイントが、ジョインポイントとは限らない。たとえば、ローカル変…

Aspects, Policies, and Configurations

AOP

特定のメソッドによっては、引数の値(true とか false)によって、そのメソッドの振る舞いが変化するのようなものが存在する。 アプリケーションによっては、常に特定の構成(常に true でいいとか、あるいは、false でいいとか)でかまわない場合があるか…

Aspect-Oriented Design Patterns

AOP

AspectJ を使ってデザインパターンを再実装しようという試み*1を続けて、もうすぐ2年が経つ。しかし、まだ、完成しそうにない。ので、少し、現状を書きとめておきたいと思う。 そう、この試みから、僕は何を学んだのか? なぜいまだに完成しないのか? そし…

Simplifying Pointcut Definitions

AspectJ におけるポイントカットの定義を、もっとシンプルにできるか? 一つの方法は、もし、あるアスペクトが特定のクラス(or アスペクト)にしか興味がないのであれば、クラスの指定を省くことで、ポイントカットの定義をもっとシンプルに書ける。 たとえ…

Object-Oriented Refactoring vs. Aspect-Oriented Refactoring

オブジェクト指向なリファクタリングと、アスペクト指向なリファクタリングは、コンフリクト*1するか? 微妙にあるかもしれない、と思い中。オブジェクト指向な設計(or クラスの分け方とか)とアスペクト指向な設計もコンフリクトするかもしれない。 コンフ…

Aspectual Overriding

AOP の特徴の一つは、メソッドの呼び出しなどのインターセプトができること。オーバーライドは、継承する側が継承される側のメソッドを同じシグネチャを元にして書き換えること(正確な定義は知らない)。 そう、この二つ(インターセプトとオーバーライド)…

Self-Activation/Deactivation

AOP

もしアスペクトの機能(アドバイス)をオンやオフにできるとしても、すべての 機能がオンやオフになって欲しいということにはならないかもしれない。 そのような、つねにアクティブ(オン)なイベント反応としては、特定のイベント(ジョインポイント)が発…

Aspects as Properties of Objects

英語怪しいけど・・・ インスタンス(オブジェクト)単位でアスペクトを適用できるとして、さらに、そのインスタンスに適用できるアスペクトが一つだけだと仮定すると、アスペクトは、オブジェクトのプロパティと見なせるかもしれない。 メソッドやフィール…

(Aspect Group == Aspectual Polymorphism) ?

前にも 書いた と思うけど、、、ある crosscutting concernを考えたときに、その concern に関して、同じ目的をもった複数のアスペクトが存在しているケースがあるように思える。 たとえば、ゲームのモード(レベル)なんかは、たぶん、crosscutting concern…