2013-10-26 20 views
5

Groovyプログラミング言語が新しく、動的な性質と機能を完全に理解しようとしています。私が知っていることは、Groovyで最も基本的なフォームで作成されたすべてのクラスは、GroovyObjectを実装してjavaオブジェクトを拡張しているように見えるということです。GroovyのMetaobject Protocol(MOP)

public class Foo implements groovy.lang.GroovyObject extends java.lang.Object { } 

グルービーオブジェクトもMetaObjectProtocolを拡張MetaClass含ま。 Groovyの動的機能のいくつかを提供するのはこのクラス階層です。これには、自身をイントロスペクションする(getProperties、getMethods)またはインターセプトするメソッド(invokeMethod、missingMethod)が含まれます。

また、Groovyで利用できるさまざまなタイプのメタプログラミングについても理解しています。これにより、実行時またはコンパイル時に機能を追加または上書きすることができます。

  • ランタイム
    • カテゴリー
    • はExpando /メタクラス/ ExpandoMetaClass
  • コンパイル時
    • AST変換
    • Extensionモジュール

ここでは、この質問の肉体に到達できない方法があります。ある人や本がGroovyの "Metaobject Protocol"を参照しているときは、特定のクラスや物事の集合について話しています。私は、定義されていないか、または石で設定されているものを掴むのに苦労します。私の本の1つは、

と定義されています。プロトコルはルールとフォーマットの集合です。 MOP(Meta-Object-Protocol)は、メソッドコールのリクエスト がGroovyランタイムシステムによってどのように処理され、中間層を制御するかについての規則の集合です。プロトコルの「フォーマット」は、それぞれのAPIで定義された ある

私もヴェンカトのプログラミングGroovyの2本を持っており、それには、このメソッド・ルックアップ・プロセスを定義する図が示されています。だから私はこれが(少なくともPOGO、私はPOJOが違うと理解している)メソッドを要求する方法のルールだと推測しています。

enter image description here

はとにかく私は正しい道を下って行くのですが、私はまだその「ahhhaa」瞬間をしないのですように私は感じると思います。誰か私が行方不明に私を記入することはできますか?または、少なくともここに私のおじさんは感覚のいくつかの並べ替えを作った私に教えてください:)ありがとう!

+0

「コンパイル時」のメタ情報に拡張機能を追加する必要があります – Will

+0

拡張モジュールについて知りませんでした。リストに追加しました。ありがとうございました! – cfaddict

+0

私はここで何を答えなければならないのか分かりません。あなたの質問はMOPとは何ですか?同様に、Groovyソースコードのどのクラスがそれを実装していますか? – Will

答えて

4

これは答えです。 Meta-Object-Protocol(MOP)は、メソッドコールのリクエストがGroovyランタイムシステムによってどのように処理され、中間層を制御するかに関するルールの集まりです。このプロセスを理解したら、メソッド呼び出しが行われ、それに付属のAPIがすべて意味をなさないと思います。私はちょうどすべてを考えていた。ありがとう!!