OOPの次はAOPだそうですね?
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGOOPも、満足にやってないうちに、その次が出てきてしまいました。
われわれはどこへ向かっているのでしょうか?
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNGみんな、関数ライブラリじゃなくクラスライブラリ使ってるぞ。
0004デフォルトの名無しさん
NGNGぷ。
クラスライブラリ使って、オブジェクト指向のつもりだって。
0005デフォルトの名無しさん
NGNG眼鏡のおばちゃん。javaよりCが好きだと。
0006デフォルトの名無しさん
NGNG”Java よりは C 言語のほうが好きですね。変形していくところとか、
アスペクトオリエンテッドなところとか。C 言語のほうがいいですね。
それに、Java は遅くていやです(笑)。でも、Java と UML がなかった
ら、日本のオブジェクト指向は影も形もなくなっていたかも知れませんよね。”
ふ〜ん
0007デフォルトの名無しさん
NGNGOO信者の平均レベルはその程度じゃんか 藁
0008デフォルトの名無しさん
NGNGくるかも。歴史は繰り返すっていうし。
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG藁。CACMに出てたんだけど。
0012デフォルトの名無しさん
NGNG投資情報に流さないと動かないよ−ん。
0013デフォルトの名無しさん
NGNGするとC++++が出てくるな。
0014デフォルトの名無しさん
NGNG数字はトレンドバージョン
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG普通かけもちじゃないか?
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGハゲオリエンテッド?
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG>“OMT”と“GoF”が2万部で、酒匂さんの訳されたMeyerさんの「 オブジ
>ェクト指向入門 」(アスキー出版)が1万部だそうですよ、正確には知り
>ませんがそういう噂です。
専門書ってこんなに厳しいのか・・・。
00221
NGNGは、新しいパラダイムとか考えてないの?輸入には熱心だけど。
00231
NGNG3000部でいくら入るの?印税って1割?だと、300x3000で30マソか。
2割でも60マソだから、どっちみち少ないね。
0024デフォルトの名無しさん
NGNG日本産は国内で無視されるかアメリカに因縁つけられて終わりだ
0025デフォルトの名無しさん
NGNGルビ房発見!
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGネットゲー板 逝け
00291
NGNGhttp://dolphin.c.u-tokyo.ac.jp/~kazu0/aspectj-primer/primer-fornewcomers/node1.html
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG誰か、そのページを200字以内に要約して発表してくれ。
0032デフォルトの名無しさん
NGNGhttp://www.race.u-tokyo.ac.jp/~yoshimi/AOP/index-j.html
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG00351
NGNG私の現状の理解だけど。OOPの短所は、クラスを横断するような
グローバルな動作や処理を局所化し、適切にドメイン単位の処理を
分離することが難しい。例えば、点や線、矩形などのグラフィクス
オブジェクトを考えてみると、これらをある特定の画像表示ハードウェア
で表示するための処理は、個々のクラスにそれぞれ埋め込むような
書き方に(OOの必然?)なってしまうか、または情報の隠蔽を無視する
ような汚い方法になってしまう(ようである)。
AOPは、このような短所を克服するための、複数のクラスを横断するような
処理を局所化する機能をOOPに追加するものである。
簡単に言えば、いわゆる業界人のよく使う言葉だが、クラス構造を
複数クラス横断的な”切り口”で見て、その切り口に対する処理を明示的に一個所
に書けるということだと思う。
で、どうかな。
0036デフォルトの名無しさん
NGNGアーキテクチャパターンのレイヤーパターンで終りでは。
0037デフォルトの名無しさん
NGNG確実に10年以上かかります。
君らは、そのときに覚えればいいよ。
00381
NGNG私はAOPの布教者ではありません。
基本的にはどのパラダイムを使っても、ある特定の仕様を満たすシステムは
作れますよね。AOPでは、特にソースコードの保守性や視認性、わかりやすさ
の向上をめざしているようです。
0039デフォルトの名無しさん
NGNG可能っていうのはイイ。Radみたいな環境を想定して、
機械的に生成されたコードを全く見なくても済むならイイんだが。
0040デフォルトの名無しさん
NGNGほうほう。
だが、簡単に言われたところが、さっぱり分からん(ウトゥ
0041デフォルトの名無しさん
NGNG00421
NGNGかと。
>>40
もっと簡単に言うならトリガー指定のグローバル関数が書けるってことだと。
>>41
Decoratorパターンて、デザインパターン関係ですか?勉強してないのでわかり
ません。
0043デフォルトの名無しさん
NGNG例のHelloWorldのサンプルで、
HelloWorldを継承したクラスでprintouts()をオーバーライドして
その中からHelloWorldのprintouts()を呼び出した場合、
before(): printouts()やafter(): printouts()は、
いつ呼ばれるんだ?
継承したクラスのprintouts()呼び出しの前後にも呼び出されるのか?
それともその中から呼び出されたHelloWorldのprintouts()
の前後にだけ呼び出されるのか?
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG自分でなんかやれっつーの。
ただの翻訳機械かよ
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGかなり攻撃とかされてるぞ。
C++なんかもその一つだ。
0048デフォルトの名無しさん
NGNG00491
NGNGAspectjを使ったことがないので推測しかできないですが、
スーパークラスのprintouts()の呼び出し前後が正解だと思います。
正確なジョインポイントでの起動が前提になっていると思いますね。
開発中にデバッグ用のトレースを入れて、リリース時にトレースを
はずすようなことが簡単にできそうです。aspectj開発者も、そういう
ところから導入してほしいと言っているようです。
>>45
おっしゃる通り。いわゆる禿同です。
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG>OOPも、満足にやってないうちに、その次が出てきてしまいました。
さしあたり、OOPの拡張と認識しておいて良いと思います。
そもそもOOPを駆逐するような性質のものでは全くないので、
やはり過渡期においては「いいとこ取り」が健全かと思われ。
通常のOOPLでは難しいリファクタリングの延長として
捉えてみるのも良いと思います。
とりあえず、メソッドの本質と関係の薄いコードを
コピペする様な状況を回避するには便利です。
あと、デザパタの実装としてAOPを採用するのは、個人的には
時期尚早と思います。(非常に小規模のチームであれば別ですが。)
AOPの利点としてDPが挙げられていますが、
当分は別々に考えて良いと思います。
# お節介ですが、AOPよりデザパタの方が業界的にも重要かと思われ、
# そちらを優先されてはいかがかと。。。
0053デフォルトの名無しさん
NGNG>機械的に生成されたコードを全く見なくても済むならイイんだが。
AspectJとJUnit併用している者ですが、
JUnitのメッセージはajc生成コードの方を参照しているので
ちょっと面倒になります。
0054デフォルトの名無しさん
NGNG細かいようですが、printouts()はpointcutなので、
「呼び出す」と言った類のものではありません。
1さんの言葉を借りると「トリガー指定」って感じです。(>>42参照)
おそらくprintouts()ではなくてprintMessage()と仰りたかったと思います。
そうだとしてお答しますが、オーバーライドしたprintMessage()においても、
before、afterの実行は一度ずつです。
# 念のため言っておくと、before、afterも勝手に実行されます。
# プログラマが「呼び出す」必要はありません
# HelloWorld派生クラスの各printMessage()実装に対して、
# ajcが自動的にbeforeとafterを実行するコードを付加してくれます。
>どちらにせよ初期化処理と終了処理のような事には使えないというわけか。
具体的にどのような処理なのかにもよりますが、
初期化/終了にも使えるのでは?
#ただし、AspectJの場合C++のデストラクタのような
#タイミングは無理ですけど。あたりまえですね。
00551
NGNGJUnit使ってますか。結構使えるって聞いてるけど、実感としてどうですか?
00561
NGNGデザパタですか。う〜ん、一人で隅でごりごり書いているような人間
にはどうなんですか?ま、とにかく私のの要求はシンプルで、ただ
1つ「楽したい」だけですね。だからつけはずしの出来るトレース
機能なんてすごく魅力あるんですね。
00571
NGNG0058デフォルトの名無しさん
NGNGクラスやメソッドを書くのは塗り絵の枠を書くみたいで精神的に楽。
インターフェースの変更も、中身の修正も閉じてるから楽。
0059デフォルトの名無しさん
NGNGあったけれど、それでも最初の一歩としてはいいんじゃないですかね。
システム標準の、例えばStringクラスとかを使いこなしていけば、汎用性のある
良いクラスとは何を対象にどのように作れば良いか判ってくると思うのだ。
C++の初心者が陥りがちな、関数を取り合えずメソッドにしてみました、
みたいなプログラムよりOOコンポーネントを使いこなした
構造化プログラミングレベルのコーディングの方が優れてると思うのだが。
0060デフォルトの名無しさん
NGNGこれ書いたのは学生だから放置で良いYO!
自分がその次(この場合オブジェクトベースOOP)を知ってることを誇示したいだけ。
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGn. 一側面, 様相; 光景; 顔つき;
【文法】 (動詞の)相; 方向, 向き;
【占星】 星位.
0064デフォルトの名無しさん
NGNGうーん。あんまカコヨクナイ
0065デフォルトの名無しさん
NGNGOOPを補完するだけみたいな感じだし。
0066デフォルトの名無しさん
NGNGhttp://www.ag.wakwak.com/~hepafil/
0067デフォルトの名無しさん
NGNGオブジェクト指向なんか、流行り始めた頃は
よく分かってもいないくせにマンセーな奴ばかりで、
ちょっとでも疑問を差し挟めば叩かれまくった。
ちゃんと実体が理解され始めてから今度は
継承に疑問を差し挟んだら叩かれまくった。
今じゃ継承ってあんまり使わん方がいいって感じだもんね。
00691
NGNGそうなんですかぁ。ちらっとデザパタのスレ読みましたけど、なんか勉強量が多そう
ですね。E.Gammaって名前よく出てきますね。昔ACMのOOPSLAに一度行った時に講演
聞きました(ET++に関して)。スェーデンだかスイスだかフィンランドだかの寒い
とこの人ですね。ま、冷やかしで一回行ったきりなんですが、90年ごろか。長髪で
いい意味でのハッカーぽいかっこいい人でしたね。ヨーロッパ人はOOが好きですね。
007053
NGNG>JUnit使ってますか。結構使えるって聞いてるけど、実感としてどうですか?
1年前にRMIと組み合わせてServlet用のユニット作って以来、愛用してます。
すごく良くできてます。っていうか、さすが美しいです。
ただし、大人数のプロジェクトに導入するのは慎重にした方が良いかも。
VB厨かき集めて頭数合わせたようなプロジェクトだったらお勧めしません。
最低限のOOPスキル持ってない人には、やっぱテストコード書くのも無理。
(もちろんレベル高いVB使いなら話は別ですが。)
あと人海戦術しか知らんCOBOLERくずれが実権握ってるプロジェクトでも
用心されたし。
「全てのメソッドに条件網羅でテストコード書け!」とか
言い出しかねないんで、ヤブ蛇が懸念されます。
まあ、お一人で組んでらっしゃるそうなので、杞憂ですね。
(うらやましい…)
ってことでお勧めです。
「楽」できますよ。
007152
NGNG>>58さんが良い事言いました。
「楽」で、尚且つ「楽しい」です。(と私も思いました。)
GoFの本、読まれましたか?
ある程度OOPLでの開発経験があれば面白いですよ。
寝転んでヒマ潰しに読むくらいのスタンスでもそれなりに有益だと思います。
入り口の段階では、とりあえずOOA/OODの知識はそれほど必要ないです。
後になってリファクタリングなんかとの関連もだんだん分ってきます。
学習初期に陥りやすいのは、フレームワークとの混同などでしょうか。
スレ違いですね。この辺にしときます。
>>52で書いたことと逆になっちゃいますが、
お一人で組んでるのであれば、AOPLでデザパタを実装するのも
アリかと思います。
もちろん、ある程度融通の効く開発でなければ危険ですが。
まあ、備えあれば憂いなしってことでAO、DP共にお勧めします。
007254
NGNGこんな寛治?
---------------- HelloWorld.java ----------------
package ajtest.helloworld2;
import java.io.*;
class HelloWorld {
PrintWriter pw;
void printMessage() {
pw.println("Hello world!");
}
public static void main(String[] args) {
new HelloWorld().printMessage();
}
}
---------------- Trace.java ----------------
package ajtest.helloworld2;
import java.io.*;
aspect Trace {
pointcut printouts(HelloWorld hw):
instanceof(hw) && receptions(void printMessage());
before(HelloWorld hw): printouts(hw) {
try {
hw.pw = new PrintWriter(new FileWriter("temp.txt"));
} catch (IOException ioExcp) {}
}
after(HelloWorld hw): printouts(hw) {
hw.pw.flush();
hw.pw.close();
}
}
--------------------------------------------
血がってます?(だったらスマソ。)
007368
NGNGそうそう、それで(Javaはあんまり詳しくないんだが)
class GoodbyWorld extends HelloWorod {
void printMessage() {
super.printMessage();
pw.println("Goodby world!"); //←こういうのには使えないって事?
}
}
0075デフォルトの名無しさん
NGNGコンピュータに関しては英語圏が中心だからしょうがないよ。
日本語で論文書いても日本人しか cite しない。
cite してもらうには IEEE や ISO/IEC などに英語で書かないとだめ。
理論を盛り上げるには多くの研究者を巻き込まないといけないので、
もっとも研究が盛んなアメリカでやらないと見向きもされない。
少なくとも向こうに共同研究者がいないと話にならない。
W3C に慶応大学の名があっても日本語のページはないし、
日本語の Technical Report 提出されないしねえ。
(「日本語」を「英語以外」に置き換えても可だね)
007673
NGNG73の例の GoodbyWorld.printMessage() を呼び出した時
before(GoodbyWorld hw): printouts(hw) -> 開く
before(HelloWorld hw): printouts(hw) -> また開く?
HelloWorld.printMessage()
after(HelloWorld hw): printouts(hw) -> 閉じる
GoodbyWorld.printMessage() // これは可能?
after(GoodbyWorld hw): printouts(hw) -> また閉じる?
こうなるって事か?
カウンターを使って開いた回数を数えていれば問題なさそうだが、
すべての場合で使えるとは限らないような気がするなぁ・・・
0077デフォルトの名無しさん
NGNGAOPはデザパタで言うところのVisitorパターン?
0078デフォルトの名無しさん
NGNG007974
NGNGトホホ。。。
テストしたときのmain()がご質問の趣旨と血がってた。
↓正しくはこう。
before ←ファイル開く
Hello world! ←基底クラスのメソッド
Good-by world! ←派生で追加した分
after ←ファイル閉じる
'super.printMessage();'
の前後のbefore/after実行はありません。無駄なく一度ずつ呼ばれます。
(詳しいことはajc生成ソースを見てね。暇な時にでも。)
低能技術者は俺です。
腹かっさばいて逝って来まーっす!
0080デフォルトの名無しさん
NGNGあとconstructorとかcatchまわりも指定できますね。(pointcut)
このpointcutごとの挙動を定義するのがadviceらしいです。
0081デフォルトの名無しさん
NGNGGoF本のVisitorパターンみると、「目的」の記述に
"クラスに変更を加えずに、新しいオペレーションを加える。"
という一文があるんで一見当てはまりそうだけど、違う気がする。
オペレーションの追加がありそうな部分を見抜いて、予め「仕掛け」を
作っておくのが多くのパターンに共通するやり方で、それらうち
二重に折り返した多態を使うのがVisitorパターンではないだろか…
少なくともこのスレで挙げられた例には、「仕掛け」も「多態」
も見あたらない。aspect側から一方的にロジックを追加している。
0082デフォルトの名無しさん
NGNGどうなんでしょう?
0083デフォルトの名無しさん
NGNG名無しさん#さんがサンプル作ってるよ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=12
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=13
0084デフォルトの名無しさん
NGNG仕組みを作のが面倒臭いが。
0085デフォルトの名無しさん
NGNGなるほど、目的は似てるけど実装方法がずいぶん違うようだ
Visitorは
1.オペレーションの追加を予測し、visitorを受け入れる仕掛けを
前もって、用意しなければいけない
2.オペレーションが追加される側のオブジェクト構成が変化すると、
visitorも変化させなければならない
という欠点があるからねぇ
0086デフォルトの名無しさん
NGNG面白かった。ありがとね。
AspectJと比べるとかなり面倒なソースだけど、
素のC#で使えるのは良いですね。
もしかして、この辺りからアスペクト指向も普及してくんですかね。
0087デフォルトの名無しさん
NGNGAOのアナパタ、デザパタ、イディオムとか。
あと、AOの問題をOO的に解決するパターンとか。
0088デフォルトの名無しさん
NGNG聞きたいんだけど、AspectJってコンテキスト(JoinPoint)にこちらから
情報を追加することはできるのかな?WebでAPIリスト見た感じ、getterしか
ないからできなさそうなんだけど。
で、C#のContextAttributeでは、コンテキスト独自のプロパティを
管理できるんだよね。単に実行前後で呼び出されるってだけじゃなくてさ。
だからAspectJに比べるとコード量がぜんぜん違うんだと思うんだけど。
0089名無しさん♯
NGNGContextAttributeは、本来Remotingで使うものよん。
AOPを意図した機能とは言いがたいかも。
処理の前後でインターセプションができるからこんなお遊びもできるよ、
という程度で作ったのが >>83 のサンプルね。
0090デフォルトの名無しさん
NGNGおっしゃる通り、JoinPointはread onlyです。
ただしJoinPointに相当するのはIMessageSinkだと思います。
コンテキストに近いのはどちらかと言うとaspectの方ではと思います。
(どちらにしても、少しこじ付け気味ですが。)
だとするとintroductionってのを使えば、ご要望の処理は可能です。
例えば>>83の例をもとにして言うと、DepositやWithdrawの
実行に通し番号をつけてBankAccountのインスタンス毎に管理するような
処理を、BankAccountの変更無しに追加できます。
>>89
C#って食わず嫌いだったけど、結構楽しそうだね。
0091デフォルトの名無しさん
NGNGあー、♯さん、やっぱり自分で書いてておわかりでなかったんですね。
Remotingで使うものですよ、もちろん。でもRemotingのRemoteっていうのは
Context外って意味なんですよ、.NET Frameworkでは。で、それは実は
.NET Framework new!ではなくて、MSはMTSのときにすでに実装しているんです。
ですから、コンテキスト属性は、AOPを意図したもの「です」。MSはCOM+の
ときから、Aspectって言葉使ってましたよ。
↑だからえらいなんて言いたいわけじゃないです。AOPを意識しているって
ことを説明したいだけ。
>>90
なるほどなるほど。AspectJ、なかなかやりますね。aspectj.org、もうちょっと
漁ってみよう。
ContextAttributeって書いちゃったからだめだったんですね。あそこは
コンテキスト属性って書けばよかった。
0092デフォルトの名無しさん
NGNG>>14
++をたてに並べるからC#なんだってさ。
++
音楽で少し高いって意味もあるらしいけど。
0093デフォルトの名無しさん
NGNGVisual C++のことを、出る前にC#と呼んでたのが懐かしい。
0094デフォルトの名無しさん
NGNG薄っぺらなトンデモ系っぽい本だが
Agent Oriented ProgrammingがOOPの次に来るとか
書いてあるやつを持ってる。
http://www.amazon.co.jp/exec/obidos/ASIN/4797305754/ref%3Db%5Fbr%5Fl%5F8%5F2/250-1168776-9396231
Aspectとはぜんぜん違って、AIとか遺伝的アルゴリズムとか
そっち系みたいな感じだったけどね。
個人的にはAspectの方に共感を覚えるかな。
>>93
詳細をキボンヌ。
0095デフォルトの名無しさん
NGNG> AIとか遺伝的アルゴリズムとか
だったっけ?
0096デフォルトの名無しさん
NGNGエージェント指向はどちらかというとアーキテクチャレベルの話だからねえ。
自律的(って何?)なプログラムをエージェントと呼び、
人間に代わってエージェントプログラムが色々面倒な作業をやってくれるといいなあ、という感じ。
実装で有名なのはこれくらいかな。
plangent , beegent - 東芝
aglet - IBM
0097名無しさん♯
NGNG> でもRemotingのRemoteっていうのは
> Context外って意味なんですよ、.NET Frameworkでは。
それは知りませんでした。ありがとうございます。
マシン境界としか考えてなかった...。
漏れがふだん見ているMLでも、1年以上も前から議論になっていた...。(;´Д`)
http://discuss.develop.com/archives/wa.exe?A2=ind0007&L=dotnet&F=&S=&P=9965
0098デフォルトの名無しさん
NGNGこの自律性を、三角形が自分自身を描画したり、台帳と伝票が
語り合ってしまう程まで過激に取り込んだのがオブジェクト指向。
…かな?
0099デフォルトの名無しさん
NGNG現在、Bee-gentダウンロード中。
plangentはキャラクターが可愛くないからダメだ。
agletは、なんか今alphaworksつながらないんで、また今度にする。
0100デフォルトの名無しさん
NGNGそんな事は関係無くトレンド転換するのがソフト業界。
0101デフォルトの名無しさん
NGNGhttp://www.fipa.org/
'The Foundation for Intelligent Physical Agents'
だってさ。エージェント界のOMGみたいなもんかな。
って、エージェント技術のスレってなかったっけ?
■ このスレッドは過去ログ倉庫に格納されています