@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

アスペクト指向とは?

投稿者投稿内容
まほ
常連さん
会議室デビュー日: 2004/07/30
投稿数: 23
投稿日時: 2004-08-03 18:56
コンパイルについて聞きたいのですが、ajcというのはAspectJと別にjarファイルがあるのですか?ajcというコマンドがあるだけなのですか?
アスペクトとオブジェクトの結合はコンパイル時あるいはリンク時に機械的に行われるということを聞いたことがあるのですがバイトコードにするときにajcが行ってくれるのですよね。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-08-03 19:35
> aclというパッケージの実行する前にチェックを行なう処理で、aclには何も加えなくても
> よく、変更が起こっても、doCheck()だけを変えればいいってことですか?

ちゃんと説明していなかったですが、package.acl.*は、User、Role、Policyなどのアクセス制御用クラスを含んだパッケージで、
> pointcut doCheck() : execution(public *.*(..))&&!within(package.acl.*);
この!within(package.acl.*)は、再帰呼び出しのループにならないように加えただけです。
(その前のpublic *.*(..)は、全publicメソッドの実行時、という意味なので、アクセス制限のモジュール内のpublicメソッドも含まれてしまうため)

> 同じような処理をいろいろな所で行っているのを横断と言い、これをまとめることがアスペクト指向なのかな?

基本はそんなところです。横断的関心をまとめるだけでなく、コアなロジックにそれらを入れないことも重要な要素ですが。
アスペクト指向の変形としては、J2EEコンテナ(アクセス制限やトランザクション制御をビジネスロジックから分離)などがあります。
また、IoC/DIコンテナ(インターフェイスとその実装インスタンスのバインドをコンテナが動的に行うため実装に一切依存しないコードが書ける。例えばspring frameworkや、seasar2など)と呼ばれているものもアスペクト指向の応用例と考えることができます。emacsのhookなんかも似てます。

アスペクト指向のメリットは、
・ 再利用性を向上する
・ コアなロジックの見通しを良くする
・ むらの出やすいロジックが統一できる(単調作業が減る)
・ JUnitなどによるユニットテストがしやすくなる
(例でいうと、コアロジックのテストをするために、setUpでダミーのポリシーファイル
やユーザーを用意する必要がない。)
といったあたりかな。
逆にデメリットは、
・ どのAOPツールも結構Experimental
・ Aspectの定義を変更すると、総合テストやり直し
・ 命名規則に従っていないコードがあると大変
(AspectJでは織り込みはワイルドカードなどで指定するため、事前に定義しておいた
命名規則に従っていないと、アスペクトが埋め込まれなかったり、予期しないところ
に埋め込まれたりする)
といったあたり。
個人的には、Aspect指向は実Projectが直接使うと言うより、J2EEコンテナやフレームワーク、統合開発環境などの提供側が、「スイッチのON/OFFで○○できる」みたいな機能を提供するために使われる方が多いと考えています。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-08-03 19:48
> ajcというコマンドがあるだけなのですか?

AspectJをインストールすると、binの下に、ajc.batというファイルがインストールされますが、それです。

> アスペクトとオブジェクトの結合はコンパイル時あるいはリンク時に機械的に行われると
> いうことを聞いたことがあるのですがバイトコードにするときにajcが行ってくれるのです
> よね。

ソースからコンパイルするときも埋め込みできますが、バイトコードから埋め込んだバイトコードへの変換もできます。
また、AspectJ1.2では、Java実行時の埋め込みもできます。(なぜかコマンドがdoc/examples/ltw/の下にあるので、まだ非公式なのでしょうが。)
まほ
常連さん
会議室デビュー日: 2004/07/30
投稿数: 23
投稿日時: 2004-08-04 10:06
AspectJをインストールしてみました。binの下にajc.batと言うファイルもありました。
ありがとうございます。

言葉の意味なんですけど、
>横断的関心
横断的は今までの話で大体わかりましたが、関心って言うのは
「処理が同じである関係」って事なのですか?
未記入
常連さん
会議室デビュー日: 2004/08/03
投稿数: 21
投稿日時: 2004-08-04 10:34
>また、IoC/DIコンテナ(インターフェイスとその実装インスタンスのバインドをコンテナが動的に行うため実装に一切依存しないコードが書ける。例えばspring frameworkや、seasar2など)と呼ばれているものもアスペクト指向の応用例と考えることができます。

私はspring frameworkを使用してみて(設定はしてないので詳しくないですが)、アスペクト指向を使っているみたいってことで勉強してみようと思ったのです。トランザクションやDB接続などを実装しなくていいのはこういうことだったんですね。
アスペクト指向って理解したら便利そうですが、間違って使ったら大変な失敗になりそう。

t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-08-04 21:11
> 言葉の意味なんですけど、
> >横断的関心
> 横断的は今までの話で大体わかりましたが、関心って言うのは
> 「処理が同じである関係」って事なのですか?

英語ではcross cutting concernで、日本語では横断的関心事と訳されています。
Aspect指向の文献には必ずといって良いほど出てくる言葉なので使っています。
関心事=処理とイメージして差し支えはないかと思いますが、正確なところは
私はあまり理解していません。

> アスペクト指向って理解したら便利そうですが、間違って使ったら大変な失敗になりそう。

要は使いどころでしょう。「できること」と「すべきこと」を識別して使えば、
強力な武器になります。
デバッグ用のログとか、メソッドごとの実行性能取得などは断然Aspect指向に
向いてますし、cacheのようになくても良いけどあれば効果的(かもしれない)
ものも、Aspect指向で実装するのが良いと思います。

スキルアップ/キャリアアップ(JOB@IT)