リフレクションという用語の由来は何ですか?それは内省のようです。なぜそれと呼ばれないのですか?
内省 :内向き。具体的には、自己検査の行為またはプロセス。
反射 :
リフレクションに関するフランス語版ウィキペディアの記事に興味深い答えがあります( ここ )
反射は2つの部分に分解できます。
したがって、リフレクションは内省よりも「強力な」特性です。そのため、実行時に型を知る機能について type introspection と言います(そしてそれらを変更することは別のアクションです:変換/キャスト)。
編集:実際、私は最初の答えがまさにそれを言っていることに気づきました^^。自分のプラグを抜く時間...
リフレクションは、「自己検査、自己修正、自己複製」という考えから生まれ、変化を目的として自分自身を振り返ります。プログラミングでは、リフレクションを使用して、プログラムを単に調べるのではなく、それを使用するコンテキストでプログラム自体の構造を調べます。返されるのは、プログラムが動作するデータではなく、プログラムを変更するために使用できるプログラムの表現です。
詳細については、 ウィキペディアの記事を参照してください。 。
実行時にオブジェクトのタイプを判別する機能を指すタイプイントロスペクションと呼ばれる別の概念があります。
編集:あなたの質問は言語に依存しないことを意図していたと思いますが、Javaでは、リフレクションはオブジェクトが持つメンバーを識別するために使用されますが、イントロスペクションはオブジェクトが持つJavaBeansプロパティを識別することができるため、イントロスペクションクラスが含まれていますJava.beansパッケージ。ただし、他の言語での用語の正確な違いはわかりませんが、
リフレクションという用語は、ブライアン・キャントウェル・スミスの1982年のPHD論文に由来します。この論文は、 http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf にあります。
リフレクションと呼ばれるようになったのは、多くの場合、単なる内省、つまりメタデータへのアクセスです。スミスのリフレクションの要件には、メタデータからのcausal接続が含まれ、これは通常、欠落しているコンポーネントです。リフレクションを想像する1つの方法は、実装へのアクセスであり、計算の新しいインスタンスの実装だけでなく、そのown実装への計算のアクセスです。確かに、Javaの元のリフレクションAPIは、この意味でリフレクティブではなかったため、誤った名前が付けられました。
.Netでは、リフレクションという用語は、検査されるタイプ自体ではなく、コードのマニフェストであり、説明にすぎないため、非常に適切だと思います。
定義3と4の意味での反省は、内省的である可能性があります。つまり、内省は自分自身への反省です。 Wordはより具体的であるため、内省はコード自体を分析する行為に使用するのに適したWordだと思いますが、反省は完全に不適切ではないと思います。