web-dev-qa-db-ja.com

なぜ反射は内省ではなく反射と呼ばれるのですか?

リフレクションという用語の由来は何ですか?それは内省のようです。なぜそれと呼ばれないのですか?

内省 :内向き。具体的には、自己検査の行為またはプロセス。

反射

  1. 反映する行為または反映されている状態。
  2. 画像;表現;カウンターパート
  3. 何かについての考えの修正;慎重な考察
  4. 考慮または瞑想で生じる思考。
77
tvanfosson

リフレクションに関するフランス語版ウィキペディアの記事に興味深い答えがあります( ここ

反射は2つの部分に分解できます。

  • イントロスペクション:プログラムはそれ自体を調べることができます。
  • 執り成し:プログラムはその状態/意味を変更できます。

したがって、リフレクションは内省よりも「強力な」特性です。そのため、実行時に型を知る機能について type introspection と言います(そしてそれらを変更することは別のアクションです:変換/キャスト)。

編集:実際、私は最初の答えがまさにそれを言っていることに気づきました^^。自分のプラグを抜く時間...

60
Piotr Lesnicki

リフレクションは、「自己検査、自己修正、自己複製」という考えから生まれ、変化を目的として自分自身を振り返ります。プログラミングでは、リフレクションを使用して、プログラムを単に調べるのではなく、それを使用するコンテキストでプログラム自体の構造を調べます。返されるのは、プログラムが動作するデータではなく、プログラムを変更するために使用できるプログラムの表現です。

詳細については、 ウィキペディアの記事を参照してください。

27
tvanfosson

実行時にオブジェクトのタイプを判別する機能を指すタイプイントロスペクションと呼ばれる別の概念があります。

編集:あなたの質問は言語に依存しないことを意図していたと思いますが、Javaでは、リフレクションはオブジェクトが持つメンバーを識別するために使用されますが、イントロスペクションはオブジェクトが持つJavaBeansプロパティを識別することができるため、イントロスペクションクラスが含まれていますJava.beansパッケージ。ただし、他の言語での用語の正確な違いはわかりませんが、

4
dancavallaro

リフレクションという用語は、ブライアン・キャントウェル・スミスの1982年のPHD論文に由来します。この論文は、 http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf にあります。

リフレクションと呼ばれるようになったのは、多くの場合、単なる内省、つまりメタデータへのアクセスです。スミスのリフレクションの要件には、メタデータからのcausal接続が含まれ、これは通常、欠落しているコンポーネントです。リフレクションを想像する1つの方法は、実装へのアクセスであり、計算の新しいインスタンスの実装だけでなく、そのown実装への計算のアクセスです。確かに、Javaの元のリフレクションAPIは、この意味でリフレクティブではなかったため、誤った名前が付けられました。

4
Ed Puckett

.Netでは、リフレクションという用語は、検査されるタイプ自体ではなく、コードのマニフェストであり、説明にすぎないため、非常に適切だと思います。

1
Guge

定義3と4の意味での反省は、内省的である可能性があります。つまり、内省は自分自身への反省です。 Wordはより具体的であるため、内省はコード自体を分析する行為に使用するのに適したWordだと思いますが、反省は完全に不適切ではないと思います。

1
Greg Graham