ホームページ >ウェブフロントエンド >jsチュートリアル >yui3_YUI.ExtのAOP(アスペクト指向プログラミング)とOOP(オブジェクト指向プログラミング)関連

yui3_YUI.ExtのAOP(アスペクト指向プログラミング)とOOP(オブジェクト指向プログラミング)関連

WBOY
WBOYオリジナル
2016-05-16 16:01:311271ブラウズ

まず第一に、胸に手を当てて瞑想してください。私は人生に恋をしているのでしょうか、それとも人生に巻き込まれているのでしょうか?

答えはまだ分かりません。次を読んでください。意味論的な観点から見ると、同じものの異なる表現が異なる人々の主観的な視点を反映している可能性があります。哲学的な観点から見ると、世界観は方法論に影響を与え、時には完全に矛盾した結論を導き出し、それが私たちの行動に影響を与えます。メソッドや行動規範は現実世界でも同様であり、カラフルなプログラミング言語ではさらにそうです。プログラミング モデルには、プロセス指向、オブジェクト指向、アスペクト指向など、現実世界のさまざまなシミュレーションが含まれています。プロセス指向とオブジェクト指向については、私たちはすでによく知っていると思いますが、アスペクトを表す英語はアスペクトです (翻訳ではアスペクトを使用した方がアスペクトの意味合いをより適切に表現できると感じます)。

AOP へのリンクについては、ここを参照してください:
http://en.wikipedia.org/wiki/Aspect-ori ... プログラミング

YUI3 のカスタム イベントは AOP を実装します
http://developer.yahoo.com/yui/3/event

スライスとは何ですか?簡単な例を挙げると、私たちは毎日通勤し、地下鉄に乗り、バスに乗り、ガールフレンドとデートし、インターネットカフェでゲームをし、映画館に映画を見に行きます...、私たちはやらなければなりません。一日に多くのことが行われ、誰もがオブジェクトであり、私たちが行うことはすべてこのオブジェクトのメソッドです。たとえば、

甲.上班();<br>乙.坐地铁();<br>丙.看电影();


実際、別の角度から見ることもできます。企業は従業員に出勤してもらう必要があり、鉄道交通機関は全員に乗車してもらう必要があり、映画館は全員に映画を上映する必要があります。これは次のようになります:

公司.need(甲)<br>地铁.carry(乙);<br>电影院.放电影给(丙);


この観点から見ると、個人 A、B、C だけがオブジェクトであるわけではなく、会社、地下鉄、映画館もオブジェクトです。この抽象化が伝統的なアスペクト指向のアスペクトです。 js プログラミングでは、一般的にプログラムは大きくないため、アスペクトレベルの抽象化が必要なレベルに達しない可能性があります。しかし、そのイベント駆動の原理は AOP を容易に思い出させます。js の例は次のとおりです。

someone.dosth();//OOPobject.fire('event',someone);//AOP
コンテキストを無視して見ると、上記のコードは意味的にはまだ現実離れしています。ただ、多くの JS フレームワークはアスペクト プログラミングのエッジ機能をメソッドにカプセル化しているため、人々に多くの誤解を与えています。イベントバインディングなど。関数 foo の実行が終了したら、foo を変更せずに myfoo を実行し、foo の監視を追加します。


var foo = function(){
  //some code here
};

jQuery.aop.after(foo,function(){
  //added code here
});
jquery とプロトタイプの両方が、この単純な関数バインディングを実装します。
jquery の AOP はここにあります

。しかし、yui3 では、AOP はカスタム イベントの内部メカニズムに昇格されており、ソース コードのあらゆる場所で見ることができます。これは、yui3 のコード再利用メカニズムを理解するのに役立ちます。 yui3 のカスタム イベントが非常に強力で柔軟なのは、まさにこの抽象化のおかげです。 OOP と比較した場合、AOP の利点は非侵入的な「装飾」ですが、ほとんどの場合、最初に AOP を使用してコードを記述することはお勧めできません。この例を見てみましょう: 誰もが非常によく似た生活習慣です。例として、学校に行く、学校に行く、女の子を連れて行く、ゲームをするという 4 つの行動があります。それぞれのイベントが発生する確率は非常に普通です。同じように、B はゲームとナンパをするためにネットカフェに行くだけの貪欲な人です。C は勉強が大好きで、女の子をナンパしたりゲームをしたりしない子です。彼は学校に行くとき、女の子を迎えに行くことと、放課後にゲームをすることの2つのことを同時に行っています。ここでは、div を使用して各人物を表し、onmouseover を使用して各イベントをトリガーします。 OOP メソッドを使用すると、プログラム構造は次のようになります:

コードは次のとおりです:

yui_oop.htm

ここでの「変人」が「普通の人々」から継承すると、コードの書き換えによってオーバーロードの目的を達成しますが、これは明らかに非侵入性の原則に違反します。 AOP のアイデアを見てみましょう:

コードは次のとおりです:

yui_aop.htm

ここではイベント リリース ファクトリーが抽象化されており、イベントのリリースを特に処理するために使用されます。これにより生成されたライフ トラック オブジェクトは全員を監視し、全員のさまざまな行動をキャプチャします。ファクトリは、「奇妙な人のライフ トラック」を生成するときに、上記の関数のリスナー バインディングを使用します。このバインディングは非侵襲的であり、ファクトリから適切に分離できます。この例で OOP と AOP を比較すると、この 2 つの複雑さは似ていますが、AOP の方がより広い概念を持ち、コードはより柔軟です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。