Почему отражение называется отражением, а не самоанализом?

79

Каково происхождение термина «отражение»? Это больше похоже на самоанализ. Почему это так не называется?

Самоанализ : взгляд внутрь; в частности, акт или процесс самоанализа.

Отражение :

  1. акт отражения или состояние отражения.
  2. картинка; представление; двойник
  3. фиксация своих мыслей на чем-либо; тщательное рассмотрение
  4. мысль, возникающая при размышлении или медитации.
tvanfosson
источник
вообще-то это интересный вопрос. Я больше не уверен, что вижу разницу: p
Johannes Schaub - litb
Добавлено определение, если не нравится, можете его удалить.
mmcdole
1
По крайней мере, в TCL, похоже, нет никакой разницы
jk.
@ JohannesSchaub-litb: это обязательный / отличный вопрос. Я просто был на грани публикации, если не нашел, что об этом спрашивали раньше. Это только показывает, как много мы делаем в жизни, не обращая внимания на малейшие детали вокруг.
Veverke

Ответы:

63

Есть интересный ответ во французской статье в Википедии для Reflection ( здесь )

Отражение можно разложить на две части:

  • самоанализ: программа может исследовать себя.
  • ходатайство: программа может изменять свое состояние / значение.

Итак, размышление - это «более сильное» свойство, чем самоанализ. Вот почему вы говорите самоанализ типа для способности знать типы во время выполнения (и их изменение - это еще одно действие: преобразование / приведение).

РЕДАКТИРОВАТЬ: на самом деле я только что понял, что первый ответ говорит именно об этом ^^. Пора отключиться ...

Петр Лесницкий
источник
2
Читая статью в французской Википедии, я понял, что во французском языке термин «отражение» может быть более тесно связан, чем в английском языке, с идеей «рефлексивности» - чего-то, действующего на себя. Кажется, это правильный способ понять этот термин применительно к языкам программирования.
Ян Хеттих
Я до сих пор не могу понять, как это отвечает на вопрос: действительно, Википедия помогает дифференцировать интроспекцию типов тем, что она «удовлетворяет» себя только получением информации, без ее изменения (хотя, опять же, насколько это актуально ... как много раз мы используем отражение для создания экземпляров типов на ходу - и так, где же здесь произошло изменение? у нас не было в первую очередь вновь созданного объекта, никаких других изменений не происходило, если только вы не рассматриваете «появление» как изменение, хотя изменение не
касалось
Итак, рефлексия - это «процесс», который включает больше шагов, чем «самоанализ». А где еще убедительный аргумент в пользу рефлексии ?! Самоанализ как слово идет рука об руку с тем, что этот термин представляет в контексте программирования - тогда как «отражение» - каким образом акт отражения инструкции / типа ближе к «модификации», чем «самоанализ»?
Veverke
27

Рефлексия исходит из идеи «самоанализа, самомодификации и самовоспроизведения», отражения самого себя с целью изменения. В программировании вы используете отражение, чтобы изучить структуру самой программы в контексте ее использования, а не просто исследовать ее. Вы получаете представление программы, которую вы можете использовать для ее изменения, а не данные, с которыми она работает.

Более подробную информацию можно найти в статье в Википедии. .

tvanfosson
источник
Вы вообще не ответили на его вопрос. Самоанализ: взгляд внутрь; в частности, акт или процесс самоанализа.
mmcdole
@Simucal, извини, я не стал более понятным. Я отредактировал ответ, чтобы указать, что это проверка с целью действия.
tvanfosson
Он сделал. Он утверждает, что термин «отражение» используется в соответствии со способностью программы отражать изменения, модифицируя себя.
Филип Дупанович,
1
@kRON, мой первоначальный ответ был не таким конкретным.
tvanfosson
Я до сих пор не могу понять, как это отвечает на вопрос: действительно, Википедия помогает дифференцировать интроспекцию типов тем, что она «удовлетворяет» себя только получением информации, без ее изменения (хотя, опять же, насколько это актуально ... много раз мы используем отражение для создания экземпляров типов на ходу - и так, где же здесь произошло изменение? у нас не было в первую очередь вновь созданного объекта, никаких других изменений не происходило, если только вы не рассматриваете «появление» как изменение, хотя изменение не
касалось
4

Существует еще одна концепция, называемая интроспекцией типа, которая относится к способности определять тип объекта во время выполнения.

изменить: я понимаю, что ваш вопрос был задуман как независимый от языка, но в Java отражение используется для определения членов объекта, тогда как интроспекция позволяет вам определить, какие свойства JavaBeans имеет объект, поэтому класс интроспекции находится в пакет java.beans. Я не уверен, в чем точная разница между терминами на других языках, однако,

данкавалларо
источник
4

Термин «отражение» взят из диссертации Брайана Кантуэлла Смита 1982 г., которую можно найти по адресу http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf.

То, что стало называться отражением, часто является просто интроспекцией, то есть доступом к метаданным. Требования Смита к отражению включали причинно-следственную связь с метаданными, и это обычно отсутствующий компонент. Один из способов представить отражение - это доступ к реализации, а не просто реализация некоторого нового экземпляра вычисления, но доступ вычислений к его собственной реализации. Конечно, исходное api отражения Java было неправильно названо, поскольку оно не было отражающим в этом смысле.

Эд Пакетт
источник
1

В .Net я думаю, что термин «Отражение» очень уместен, потому что исследуется не сам тип, а манифест кода, который является только описанием.

Guge
источник
1

Рефлексия в смысле определений 3 и 4 может быть интроспективной. То есть самоанализ - это отражение самого себя. Я думаю, что интроспекция - лучшее слово для обозначения самого акта анализа кода, потому что это слово более конкретное, но я не думаю, что размышление совершенно неуместно.

Грег Грэм
источник