株式会社ラクス  ITエンジニア総合支援サイト スタックアスタリスク フルマネージド専用サーバー エクスユニット
ITエンジニアとして 知る 学ぶ
 
Java
.NET
PHP
プログラミング一般
DataBase
システム/サーバ構築
システム/サーバ運用
技術系一般知識
そのまま使えるシリーズ
J2EE TIPS
 
The Apache Ant Project
Sun MicroSystems
The Apache Jakarta Project
Caucho Technology
eclipse.org
>IT技術情報>Java>初めてのAspect指向プログラミング第1回:Aspect指向とは
【連載 】初めてのAspect指向プログラミング

第1回:Aspect指向とは

 
近頃、「Aspect指向プログラミング」という言葉を見かける事が多くなりました。
では、Aspect指向、そしてAspect指向プログラミングとはどの様なものでしょうか。連載第1回では、アスペクト指向とはどの様な物かご紹介させていただき、Javaでアスペクト指向プログラミングを行うための開発環境として、AspectJというツールのインストール方法をご紹介させていただきます。

岸本 貴行
株式会社アイティーブースト
2004/11/22
 

【 目次 】
1.はじめに
2.Aspect指向とは
3.AspectJのインストール
3.1 AspectJのダウンロード
3_2.AspectJのインストール
3_3 環境変数PATHの設定
3_4 動作確認
4.初めてのAspect指向プログラミング
4.1サンプルソースコード
4.2コンパイル
4.3実行
4.4検証
5. 最後に

【実行環境】
OS WindowsXP
JDK j2sdk1.4.2_05
ツール aspectj1.2

1.はじめに

 近頃、各種雑誌やWeb上の記事で「Aspect指向」という文字を見かける事が多くなってきました。皆様の中でも「聞いた事がある」「気になっている」とおっしゃられる方が多いと思われます。では、Aspect指向、またそれをシステム開発に取り入れたAspect指向プログラミング(AOP)とはどの様なものでしょうか。連載第1回では、アスペクト指向とはどの様なものから始まり、AspectJというツールをインストールし、JavaでAOP開発を行うための開発環境の構築方法をご紹介させていただきます。
そして、構築した環境を用いて簡単なAOPを行い、その動作確認を行っていきます。

2. Aspect指向とは

 Aspect指向は、現在主流であるオブジェクト指向の欠点を補完することが出来る考え方です。ではオブジェクト指向の欠点とはどの様なものでしょうか?オブジェクト指向は継承や抽象を用いることにより、システムにおける各種機能をクラス単位でモジュール化(関心事の分離)でき、その結果コードの見通しや保守性の向上が実現されます。
 しかし、オブジェクト指向では、この「関心事」を「きれいに分離できない状況」が生まれてしまいます。 この「きれいに分離できない状況」とはどのような状況でしょうか。ここでは、ユーザー登録処理の一部を例に具体的にご説明させていただきます。
 ユーザー情報をデーターベースに登録する場合、一般的には以下の様な流れになります。(コード1)

 1: 	public class UserDAO {
 2: 	/**
 3: 	    * ユーザー情報をDBに登録する
 4: 	    * @param user User ユーザー情報
 5: 	    */
 6: 	    public void regist(User user){
 7: 	    
 8: 	    //ユーザー登録処理
 9: 	    
10: 	    }
11: 	}

 コード1:ユーザー情報登録サンプル1

 コード1において、registメソッドの関心事は「ユーザー情報をDBに登録する」です。コード1の状態であれば「registメソッドは関心事の分離が出来ている」と言えるでしょう。しかし、この処理の前後でログ出力をしなければいけなくなった場合どうなるでしょう?registメソッドが多くのオブジェクトから参照されている場合、コード2の様な実装になるかと思われます。(コード2)

 1: 	public class UserDAO {
 2: 	    public void regist(User user){
 3: 	        FileLogger.log("ユーザー登録開始");
 4: 	    
 5: 	        //ユーザー登録処理
 6: 	    
 7: 	        FileLogger.log("ユーザー登録終了");    
 8: 	    }
 9: 	}
10: 	
11: 	public class FileLogger {
12: 	    /**
13: 	    * 引数の文字列をログファイルに書き出す.
14: 	    * @param message String
15: 	    */
16: 	    public static void log(String message){
17: 	        //ログファイルへの書き出し処理
18: 	    }
19: 	}



 コード2:ユーザー情報登録サンプル2

 コード1とコード2のregistメソッドを見比べてみると、コード2のregistメソッドの関心事は「ユーザー情報をDBに登録する」だけでは無くなってしまいました。本来行わなければいけないユーザー登録という処理以外にログ出力という処理が増え、明らかに「関心事の分離」が崩れていると言えます。
 また、今回の例のように、ログ出力という処理はシステム全体に於いても様々な箇所で何度も行われます。このような処理をAspect指向では「横断的な関心事」と言います。この横断的な関心事が多くなるほど、システム全体において煩雑なコードが増え、コードの見通しや保守性が低下してしまいます。
 上記のようなObject指向の欠点を補完するのがAspect指向です。Aspect指向では「横断的な関心事をシステム本来の関心事から分離する」ことを目的としています。
Aspect指向では、横断的な関心事(コード2におけるlogメソッド)を「いつ、どこで」利用するかは、それを利用する側(コード2におけるregistメソッド)に定義されるのではなく、呼び出される側(logメソッド)に定義されます。
ユーザー登録処理(registメソッド)とユーザー検索処理(selectメソッド)を例に上げると、図1のようなイメージになります。

図1:Aspect指向のイメージ図

 「registメソッド、selectメソッド側に実際のログ出力の呼び出しは一切含まれません。」これにより、各メソッドでは本来関心しなければならない記述のみに専念することが出来ます。ではどの様な仕組みで実際にログ出力が行われるのかをご説明します。
図1のようにアスペクト指向を用いて「関心事の分割」を行ったものはアスペクトウェーバーというツールを用いてコンパイルすることにより、クラスファイル内で1つにまとめることが出来ます。アスペクトウェーバーを用いてソースファイルをコンパイルすると、図2に示す様な内容でクラスファイルが生成されます。

図2:アスペクトウェーバーの動作イメージ
 
 図2をご覧いただくとお分かりいただけるように、アスペクトウェーバーにより生成されたクラスファイルは、ログ出力の呼び出し処理が組み込まれた形で生成されます。
 本稿では、Java言語に於けるアスペクトウェーバーとして現在最も人気のあるAspectJというツールを利用し、アスペクト指向プログラミングの開発開発環境の構築方法をご紹介させていただきます。次章ではAspectJのインストール方法をご紹介させていただきます。

>>次のページへ


【 ページ 】 | 1 | 2 | 3 |


▼Java や Linux を体系的に学びましょう!▼
Stack*のラクスが、
新学習方式のカリキュラムを開発しました!
14700円から(*1)、Java や Linux を体系的に学べます!!
(*1 テキスト代のみの税込料金です)



サイト内全文検索
スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。


簡単レンタルメールフォーム
300メガ1000円〜 XBitのレンタルサーバー
500メガ1995円〜 電話サポート/PostgreSQL/専用SSLなどにも対応!お客様のニーズを網羅したレンタルサーバ
ホームページ制作のアシストウェブ
STACK* 執筆の講師陣から習得する!! ITエンジニアスクール アイティブースト
統合メールサポートシステム 〜MailDealer(メールディーラー)〜
システム開発,IT教育 〜株式会社アイティーブースト(ITBoost)〜
簡単 営業支援/顧客管理ツール Easy Sales
  利用規約 お問い合わせ・ご意見 スタックアスタリスクについて 運営会社について 
  レンタルサーバー ホスティング 専用サーバー メールフォーム ショッピングカート メール共有 ITエンジニア派遣 Linux講座 Java講座 メール配信 レンタルサーバー Webデータベース 検索サービス
CopyrightcRAKUS Co.,Ltd. All Rights Reserved.  メール管理・共有 顧客管理(CRM)もできるメール対応サポートシステム JAVA LINUX CISCO 技術者派遣 育成事業 株式会社ラクス