トップページ⇒tech
643コメント210KB

OOPの次はAOPだそうですね?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
今度はAOP(アスペクト オリエンテッド プログラミング)だそうです。
OOPも、満足にやってないうちに、その次が出てきてしまいました。
われわれはどこへ向かっているのでしょうか?
0159デフォルトの名無しさんNGNG
>>158
なんか、OPEN-R(AIBOのアプリケーション層)みたいだな。
0160157NGNG
サンクス。
しかし、切り口ってのはなんなのか、まだピンと来ず。
みんな判ってる?
0161デフォルトの名無しさんNGNG
>>158

ビューアがディペンデンシ・マネージャに必要な機器を要求。
(もしくはディペンデンシ・マネージャがビューアに問い合わせ。)
ディペンデンシ・マネージャがビューアに機器ををラッピングしたクラスのインスタンスを渡す。
ビューアはそれを使って機器を制御。

ビューアは同じインターフェースのディペンデンシ・マネージャがあれば他機種にも流用可能。

デザインパターンのビルダーだかファクトリーだかって感じ?
まだOOばっかな俺・・・。
0162デフォルトの名無しさんNGNG
ちゃんと理解してないけど、なんか汚いと言うか、
もう一皮むけて洗練されて言語に練りこまれないといけない気がする。
スコープとか、OOとの整合とか。それに、
メソッドの前後だけ(と思ってる)っちゅうのは
いかにも取って付けたって感じ。
もっとシステマティックな理論の整備がほしい。
0163デフォルトの名無しさんNGNG
>>157
リンク先みたけど、friendを洗練させたってこと?
しかし、モジュールごとにひとつのオブジェクト(クラス)の意味っつーか、
定義が変わっていくのはいかがなものか。
すなおに子クラスとかで必要なinterfaceを多重実装したほうが判りやすいのでは?
0164デフォルトの名無しさんNGNG
これって、オブジェクト指向に対する話じゃなくて、
構造化に対する話じゃないのか?
0165デフォルトの名無しさんNGNG
オブジェクト指向でも
template method パターンや decorator パターンには
素直に適用できますね。
0166_NGNG
>>164
オブジェクト指向とは直行する概念。確かAspectC(非oo)ってあったような。
うーん行番号時代のコードにも一応weaveできそうだから構造化にも直行するかも。
0167デフォルトの名無しさんNGNG
こんなのもあったね。まあココまでするかなぁって気もしたけど(w
http://www-6.ibm.com/jp/developerworks/java/020719/j_j-aspectj2.html
0168デフォルトの名無しさんNGNG
英語質問で質問できるか!萎え>>都内某所
0169ageNGNG
age
0170デフォルトの名無しさんNGNG
書くべき事も持たずにageないように(笑
0171名無しさん@XEmacsNGNG
AOPについて勉強すれ、と言われたので色々見てました。
AspectJはなんか便利そうだったけど、OOPの拡張って
感じでいまいちAOPの概念がつかめません。
他にAspect Orientedな言語の実装とかはないんでしょうか?
0172デフォルトの名無しさんNGNG
OOP と AOP は直行している概念だぞ。。。
0173171NGNG
けどC言語とかLispでのAOPとか見ると
OOでないAOPはできる感じがした。
AOPはOOPの延長上にあるわけじゃなくて、
全く別のパラダイムじゃないの?
0174名無しさん@EmacsNGNG
直行直行って、本当は直交じゃないのかと問いたい。
0175デフォルトの名無しさんNGNG
「アスペクト」という概念がようわからん。
どっかいいサイトない? …できれば日本語で(ヨワ
0176デフォルトの名無しさんNGNG
アスペクトage
0177デフォルトの名無しさんNGNG
なんかくだらねーな。AOP とか言ってる間にさえずらず何かプログラム作れや。
0178デフォルトの名無しさんNGNG
>>177
そうだな。
OSとか、コンパイラとか、
構造化プログラミングとか、オブジェクト指向とか言ってる間に
みんななにかプログラム作ってれば良かったな。機械語で。
そうすれば楽しい世界になってただろう(w
0179デフォルトの名無しさんNGNG
アナル・おまんこ・プレイを推奨する
0180デフォルトの名無しさんNGNG
>>177 はカイジ厨。
0181デフォルトの名無しさんNGNG
アスペクト指向に向いていることっていうのは、つまり、
オブジェクト間のやりとりがやたら多い場合に便利、ってことでよろしいか。

MT:G や遊戯王をゲーム化しようってときに便利な気がする。
あるカードの効果を起動しようとしたら、割り込むカードがまたいくつかあって
カードの起動が終った後も、割り込むカードがいくつかある。(その組み合わせで
またいろんな割り込みが続く)

EventListener を沢山使えばいいんだろうけど、アスペクト指向プログラミング
やってりゃさらにスッキリ書ける。


という認識でいい?
0182デフォルトの名無しさんNGNG
>>181
詳しい説明キボンヌ。
0183デフォルトの名無しさんNGNG
>>181
あー、それはいいかも。
ログ取る以外のまっとうな使い方だね。
0184デフォルトの名無しさんNGNG
>>181
どういうの?
わかるようで、いまいちイメージが沸かない。
(カード)ゲームだけに使える話?
0185デフォルトの名無しさんNGNG
>EventListener を沢山使えばいいんだろうけど、ア
ヤヴァイよ。
OO最初からやり直して
0186デフォルトの名無しさんNGNG
AOPはアプリケーション間の連携に影響が出そうな気がする。
0187デフォルトの名無しさんNGNG
183>>184

例えば普通のシミュレーションゲームを想定して、
・攻撃可能対象を検索
・目標設定
・命中率計算
・命中したならダメージ計算
みたいなフローがあるとしようさ。
で、命中率に修正があるようなカードが存在する場合、
命中率計算の前に命中率修正メソッドを割り込ませる、
というふうに使えるのではないかと。
フローが複雑にならないと手間のオーバーヘッドが大きくなってしまいそうかな?
0188デフォルトの名無しさんNGNG
>>185
OOによる解があったとしても、より優れた別の方法論があるのなら、
OOでの解に拘泥する必要はない。
そして、ここはその より優れた(希望的観測)別の方法論 を語るスレだ。
0189デフォルトの名無しさんNGNG
なんか、理系板の人混じってますけどー。
AspectJの親玉のアメリカンジョーク聞かしてやりたかったな。
0190デフォルトの名無しさんNGNG
>>189
聞かせて
0191183NGNG
>>187
説明サンクス。
なんとなく適用箇所がわかってきたような気がする。
けどそれをスマートにやるにはAspectJとかじゃあ無理だよなぁ。
0192デフォルトの名無しさんNGNG
>>191
無理なの?
てきとーにメソッド切ってやりゃ簡単にできそうな気がするが。
0193183NGNG
普通にメソッド単位でやってちゃあ
AOじゃないような気がする・・・ってのは違うの?
0194デフォルトの名無しさんNGNG
複数の命中率修正が発動してると、
修正順序とかコントロールする必要あるよね?
あるいは片方が無効になったり。
どうやるの?
0195デフォルトの名無しさんNGNG
あ、193宛てではないです。
0196192NGNG
>>193
ああ、OO の持ってる構造で引っかけるだけじゃ AO じゃないってことか。
確かに純粋な AO からすると、AspectJ は貧弱らしい。
でも実用的なツールとして使うには十分でしょ。
0197ファンタジー房NGNG
>>194

そういうプログラム作ったことあるけど、普通にコールバックのためのインターフェース作ってやっても割とすっきり作れた。

interface BattleListener extends EventListener {
..public BattleEvent invokeBefore( BattleEvent e);
..public void invokeAfter( BattleEvent e);
}

みたいなのを作れば、イイんでないの。

(>>194のいう重複、例えば、魔法を食らって「マホカンタ」「マホキテ」どっちを優先するかは、それはそのオブジェクトに優先度の値を持たせて実装すると思う)

>>181 の場合であったとしても、まだ AOP を持ち出すシーンではないような気がする。
AOP で実装するとこんなにスッキリするよ! という実装例は出るかどうかは疑問。
イベントリスナ機構でもコード量は同じくらいなんでないか。
(俺は全く AOP 経験はないが、多分そう。実装例があれば見たい)

AOP が有効なシーンは、ちょっとOOPと離れたところで、限定的にのみ使えるという程度で、あまり大きなパラダイムに成長するかというと、そうは思わない。
特殊機能の一つみたいな感じでないか。
0198ファンタジー房NGNG
「マホキテ」って魔法食らってから発動するもんなのか。
じゃあ例としては適さないな。

(ドラクエやってねーのがバレバレだぁ)
0199デフォルトの名無しさんNGNG
メソッドの前後なにかするだけじゃ、限界がありまくりだよな。
ただのフックだし。もっと強力なweavingはないんか。
0200デフォルトの名無しさんNGNG
Ruby はゴリンゴリンにクラスの再定義できるから、それはアスペクト指向的かなと思った。
0201($∀$)NGNG
>>189
早く聞かせろYO!
0202デフォルトの名無しさんNGNG
>OOPの次はAOPだそうですね?

いえHTTPです。
0203デフォルトの名無しさんNGNG
>>200
Rubyがわからん漏れに説明してくれ。
0204 NGNG
>>199
>ただのフックだし。もっと強力なweavingはないんか。

手放しで賛美するつもりは無いんだけど、ただのフックと捉えてしまうと
本質を見過ごすことになると思われ。
フックの機構をフックされる側のコードと切り離して合理的に一括管理
できるってのは、いくつかある利点の中でもわかり易い部類だと思うんだが。
0205デフォルトの名無しさんNGNG
>>204
漏れは>>199じゃないけど、AspectJの実装を見てると、
「これってAOPなのかなぁ?」
と思ってしまう。
ただスマートにフックできるだけ、って感じがいなめない。

AOPか?という観点を考えなければ大変いいと思うけど。
0206 NGNG
>>205
>ただスマートにフックできるだけ、って感じがいなめない。

例えばC言語とC++があったとして、C++のメソッドのオーバーライドに
ついて「ただの関数ポインタのテーブルじゃん?」って言うのは不毛な
見方だと思うわけ。join pointsとadviceを指して単なるフックって
言うのはそれに近いんじゃないかと。

もう少し言うと、AspectJのフック技法って
・あるアスペクトに属する事柄はまとめて記述する。
・別のアスペクトに属する事柄は別々に記述する。
というようなコンセプトの中で使用されて意味があるわけで、そうでない
場合はむしろ明示的な呼び出しとかTemplateMethodパターンとか既存の
フック技法を使った方が良い場合もあるはず。
(そういう意味で、>>187のような使い方は違う気がする。)

>AOPか?という観点を考えなければ大変いいと思うけど。

上で書いたように漏れの考えは逆。
単なる構文糖として導入したところで、かえってスパゲティ化が促進される
気がする。あくまでもアスペクト指向の実装技術のひとつであることを意識
しないと利便性よりリスクの方が大きいと思う。
0207デフォルトの名無しさんNGNG
AOPでxUnitが変化するのではないか?  とsageでこっそり言ってみる。
0208デフォルトの名無しさんNGNG
>>207
CactusはすでにAspectJ導入してるね。
とsageでこっそ(略
0209デフォルトの名無しさんNGNG
>>208
これって、Cactusのソースで使われてるだけ?
0210 NGNG
>>209
LogAspectとLogManagerAspectってのがあって内部的に使ってる
だけですね。少し物足りない使い方ですが。
0211デフォルトの名無しさんNGNG
結局ログかよ!
0212デフォルトの名無しさんNGNG
なんか書き込め。
0213デフォルトの名無しさんNGNG
結局、簡単な実装例が出てこないあたりで
AOPってだめなんじゃない?

ログのようなケースでしか役に立たないなら、
フレームワークを一つ用意すればいいだけ。
log4jのようにね。
結局プログラミングスタイルとしては成立しないんだよ。
0214デフォルトの名無しさんNGNG
クロスカットの単位がメソッドの前後だけってのが、
パワーを激減させてるんじゃない?
もっとメソッドの中身にも溶け込むようなweavingができれば、
一気に強力になっていろいろできそう。
ついでに、一気にデバッグも大変になりそうだけど。
0215デフォルトの名無しさんNGNG
元論文の、画像処理の方に味噌がありそうなヨカーン.
でも読むのメンドイから、誰か翻訳か解説してちょ。マジで。
0216デフォルトの名無しさんNGNG
劇的な変化はハードウェアとともに

Lispしかり
Smalltalkしかり

Knuthしかり
Dijkstraしかり
0217デフォルトの名無しさんNGNG
>>216
KnuthとDijkstraは、どう言う意味?
つか、単に、昔はマシンが遅かったってだけじゃないの?
0218 NGNG
>>215
元論文ってなに?
Web上で見られるんだったら要約するから教えれ。
0219デフォルトの名無しさんNGNG
よろ!

論文
http://www2.parc.com/csl/groups/sda/publications/papers/Kiczales-ECOOP97/for-web.pdf

関連ページ
http://www.race.u-tokyo.ac.jp/~yoshimi/AOP/index-j.html
0220デフォルトの名無しさんNGNG
ここも面白いよ。AspectJ以外にもAOP関係はいっぱいある。
ttp://staff.aist.go.jp/y-ichisugi/ja/mj/soc.html
0221デフォルトの名無しさんNGNG
「AspectJ以外にも」っつーか、AOP以外にも
似たようなのがいろいろあるみたいね.
0222デフォルトの名無しさんNGNG
>しかし、一般には複数のクラスを横断する形で関連するコードを記述せざるを得ない場合もあります。つまり、現在のオブジェクト指向言語では、 separation of concerns が「できない場合もある」のです。
できない場合が具体的に何なのかを示せれば、
(問題の解決方法が妥当かどうかも重要)
Aspect指向も日の目を見るかもしれないね。

いろいろ、文句を書いてきたけど
AOPを知る努力もしてるんで、AOP研究者の人は
もっと世間に研究成果を公表して欲しい。
0223デフォルトの名無しさんNGNG
>>222
>>219の論文にある例は?
0224デフォルトの名無しさんNGNG
>>223
あの具体例だと意味がわからないんだけど、
もしよければ有効性をわかりやすく書いてもらえるかな?
0225デフォルトの名無しさんNGNG
>>222
>できない場合が具体的に何なのかを示せれば、

上の方にあるレスでフレームワークがあるとAOPLはいらなくなる
事を示そうとしてLog4jが引き合いに出されていたけど、それって逆。

Log4j使ってそれを更にcommons-loggingで抽象化しても
ログ処理の起点となるコードが呼び出し側に残るじゃん。
tangiling in the codeの一番わかりやすい例だと思うんだけど、どう?
Log4jでもできないからAOPを使ってるわけ。
0226非222NGNG
>>225
確かに具体例としては判りやすいけど、
ログ以外に一般的に何かないかと。一般的に。
ログだと、縺れは縺れでも大して困らない気が。
0227225NGNG
>>226
いや、知った風なこと書いてはみたけど情けないことに
俺も良い使い道が思いつかないんよ。
0228デフォルトの名無しさんNGNG
>>227
良い使い道というか、すなわち、良いアスペクトがね。
「ほら、こんなアスペクトを分離したら、コードがこんなにスッキリ!」
みたいな例がたくさんほしいよね。
というわけで、>>218に期待。
0229デフォルトの名無しさんNGNG
メインのコードでは他のアスペクトを意識しなくて良い、
ってのがAOPの利点とすると、
メインコードのメソッドは他のアスペクトの都合なんか考えない単位になる。
AOPがメソッド単位でしかWeavingできないのなら、
アスペクトは都合の悪い単位でしか記述できず、
アスペクトにできることは必然的に非常に限定されることになる。

メソッド単位のAOPはもうダメポ。
0230デフォルトの名無しさんNGNG
前から気になってたんだけど、メソッドの前後にフックするだけじゃ
ないんだが・・・。
(・・・もしかして、釣られてんのか?おれ。)
0231デフォルトの名無しさんNGNG
>>230 どんなの?
条件付フックじゃなくて?
0232222NGNG
>ログ処理の起点となるコードが呼び出し側に残るじゃん。
AOPでも、ログを出力するクラス、しないクラスを
識別するための記述が必要でしょ?
それが一括で(一箇所に)書けるか書けないかの違いじゃないの?
もちろんlog4jも、一ファイルである程度管理する事は可能だけど。

あと具体的にっていうのは、
具体的に一般化して示せれば、
こういうケースでは、こう使えるという手法になりうるけど
非常に特殊なケース(ログとり)でしか使えないなら、
それはプログラミングスタイルにはなりえないと思う。
すなわち、AOP的なロギングコードを記述するための方法にしかならない。

でも、逆にこう考える事もできる。
複雑なプログラムにはログを出力したいケースが多い。
(だからこそlog4jのようなものがあるし、JavaAPIにもある)
ならばそれを言語機能に加えればいいじゃないか。
じゃあ、どうすればいいか?
という事を考えればいいんじゃないかな?
俺はロギングでのAOPの有効性をまだ理解できていないんだけど
それがわかっているなら
言語機能として組み込んでみればいいんじゃないかな?
もちろんAOPという一般的な枠組みではなく、ロギングに特化した方法でね。
実行時にログ出力、非出力を切り替えられるのは
(if文を使わなくて)
Javaを使っている人には魅力的に思えるよ。
0233デフォルトの名無しさんNGNG
アスペクト指向とは違うのかもしれないが、separation of concernsに対しては
MixJuiceやRubyのModuleってのはなかなかいい方向性だと思う。
0234デフォルトの名無しさんNGNG

   Ruby廚さん、出番ですよ!
   モジュールを熱く語って下さい

MixJuiceは >>157
0235 NGNG
去年のレスで.NETも最初からAOPを意識してるとかあったな。
0236デフォルトの名無しさんNGNG
メソッドの属性か。現実にはあの当たりが妥当か?
0237名無しさんNGNG
AspectJの使い方解説
http://www.oucc.org/~tail/aspectj/
0238デフォルトの名無しさんNGNG
ほしゅ
0239デフォルトの名無しさんNGNG
保守sage
0240デフォルトの名無しさんNGNG
一つ思い付いたのは、DBアクセス系のメソッド実行前に
システム利用者の認証が切れてないかを確認するって
いうアスペクトはどうだろう?

システム利用時に入力したIDとパスワードでログイン後、
データアクセス系のサービスを利用するたびに認証情報
が時間切れ等で失効してないか毎回確認後サービス実行。

厳密にユーザ権限の執行をしたいような業務があるか
どうか分からないけど、とりあえず妄想を吐き出しておく。
0241デフォルトの名無しさんNGNG
↑↑↑アスペクト指向とは何か↓↓↓
http://pc3.2ch.net/test/read.cgi/tech/1031056945/43
0242デフォルトの名無しさんNGNG
つーか変な名前つけて意味ぼかしただけで、中身hook-functionだろ。
新しい事なんて何も無い。
0243デフォルトの名無しさんNGNG
また知ったかぶりの馬鹿がひとり・・・>242
0244デフォルトの名無しさんNGNG
>>242 ぷっ。これだから新しい概念についていけないヤシは。
…と突っ込むヤシ、その新しい概念をキチンと説明してください。

0245デフォルトの名無しさんNGNG
MJのモジュールの組み合わせって、どのくらいの自由度なの?
module B(extends A)とmodule C(extends A)は共存できるのでしょうか?
0246デフォルトの名無しさんNGNG
module B' = B - A と
module C' = C - A を作って
A, B', C' を組み合わせる方が
設計的にはかっこよさげ
0247 NGNG
使えれば何でもいいよ・・・。
0248デフォルトの名無しさんNGNG
Rubyのモジュールって要はインクルードマクロじゃん。
0249デフォルトの名無しさんNGNG
>>248
何もわかってない人は来なくていいよ
0250デフォルトの名無しさんNGNG
OO さいこう!!
0251デフォルトの名無しさんNGNG
248がいいこと言った!
0252デフォルトの名無しさんNGNG
251=248
0253251NGNG
>252
違うよ。ばーか。
0254デフォルトの名無しさんNGNG
251=バカ
0255デフォルトの名無しさんNGNG
254=超ウルトラスーパーバカデラックス
0256デフォルトの名無しさんNGNG
255=超ウルトラスーパーバカデラックス 文化包丁と果物ナイフもプレゼント
0257デフォルトの名無しさんNGNG
>>256
バカは、バカっていう奴がバカさ。バーカ。
0258デフォルトの名無しさんNGNG
ネタ切れ?
■ このスレッドは過去ログ倉庫に格納されています