トップページ⇒tech
985コメント346KB

↑↑↑アスペクト指向とは何か↓↓↓

■ このスレッドは過去ログ倉庫に格納されています
0001→NGNG
アスペクト指向とは何か?
0357山崎 渉NGNG
俺的には、アスペクト指向の歴史的位置付けは、下記にあると考える。
まだまだ発展途上だが、磨けば光る原石だと思う。

1. 「プリプロセス」「ポストプロセス」への、オブジェクト指向意味論の付与

 「プリプロセス」「ポストプロセス」は、
 Lisp, C, UNIX等で存分に活用されてきた。
  例:・CommonLispのマクロ機能
    ・Cのプリプロセッサ
    ・UNIXのsed, diff, patch類
 しかし、オブジェクト指向言語では意味論や扱いが定まらず、
 使用を避けるべきだと考えられてきた。
 アスペクト指向は、上記に一定の解を与え、積極的な使用方法を提案した。
0358山崎 渉NGNG
2. 型継承と実装継承の分離

 これまでのオブジェクト指向は、実装継承を型継承の下位機能と見なし、
 「実装継承と型継承を一体化」する事で、概念の単純化を図ってきた。
 例えば、
    ・ 型継承と同時に、実装継承     ・・・ クラス
    ・ 型継承と同時に、部分的実装継承・・・ 抽象クラス
    ・ 型継承のみ              ・・・ インターフェース
 というのはあっても、
    ・ 実装継承のみ
 という選択肢がなかった。

 アスペクト指向は、実装継承のみという選択肢を与える事で、
 本来別々のものである、実装継承と型継承を明確に分離して扱う事を、
 可能にした。

3. 「実装の単継承vs多重継承」 問題の解決

 多重継承を、「実装継承と型継承を一体」という視点で実現する場合、
 「選択的な実装多重継承」が必要になる。
 しかし、型のセマンティクスと、実装のセマンティクスは異なるため、
 両者を同じ視点で扱うと、混乱が生じ易かった。

 上記の混乱の回避策は、「実装多重継承の排除」だった。
 実装単継承の元で、実装多重継承の提供機能を実現するには、
    ・型の多重継承              ・・・ インターフェース
    ・メソッド実装の委譲
 を使用する。
 但し、メソッド実装の委譲は、実装レベルのコードで実現する必要があった。

 アスペクト指向は、上記「メソッド実装の委譲」を、
 静的に(宣言的に)取り扱う事を、可能にした。
0359山崎 渉NGNG
補足: アスペクト指向出現の背景には、
    近年、統合開発環境/ツール類の技術が飛躍的に進歩し、
    上記項目2.、項目3. を事実上提供するツールが現れつつある、
    事も関係していると思う。
■ このスレッドは過去ログ倉庫に格納されています