Dlaczego refleksja jest nazywana refleksją zamiast introspekcji?

79

Skąd pochodzi termin refleksja? To bardziej przypomina introspekcję. Dlaczego tak się nie nazywa?

Introspekcja : spojrzenie do wewnątrz; w szczególności akt lub proces samooceny.

Odbicie :

  1. akt odbicia lub stan odbicia.
  2. obraz; reprezentacja; odpowiednik
  3. utrwalenie myśli na czymś; rozważne przemyślenie
  4. myśl pojawiająca się podczas rozważania lub medytacji.
tvanfosson
źródło
właściwie to jest interesujące pytanie. nie jestem już pewien, widzę różnicę: p
Johannes Schaub - litb
Dodano definicję, jeśli nie lubisz, możesz ją usunąć.
mmcdole
1
Przynajmniej w TCL wydaje się, że nie ma żadnej różnicy
jk.
@ JohannesSchaub-litb: to jest pytanie, które trzeba zadać / doskonałe. Byłem bliski opublikowania tego, jeśli nie znalazłem go wcześniej, o co pytano. Pokazuje tylko, jak wiele robimy w życiu, nie zwracając uwagi na najmniejsze szczegóły wokół.
Veverke

Odpowiedzi:

63

Ciekawa odpowiedź znajduje się we francuskim artykule na Wikipedii dla Reflection ( tutaj )

Odbicie można rozłożyć na dwie części:

  • introspekcja: program może sam siebie zbadać.
  • wstawiennictwo: program może modyfikować swój stan / znaczenie.

Zatem refleksja jest „silniejszą” właściwością niż introspekcja. Dlatego mówisz o introspekcji typu aby poznać typy w czasie wykonywania (a ich zmiana to kolejna czynność: konwersja / rzutowanie).

EDYCJA: właściwie właśnie zdałem sobie sprawę, że pierwsza odpowiedź mówi dokładnie to ^^. Czas się odłączyć ...

Piotr Lesnicki
źródło
2
Czytając artykuł z francuskiej Wikipedii, zdałem sobie sprawę, że w języku francuskim termin „refleksja” może być ściślej niż w języku angielskim kojarzony z pojęciem „refleksyjności” - czyli czegoś działającego na sobie. Wydaje się, że jest to właściwy sposób rozumienia tego terminu w odniesieniu do języków programowania.
Jan Hettich,
Nadal nie rozumiem, jak to odpowiada na pytanie: rzeczywiście, wikipedia pomaga w rozróżnianiu introspekcji typu, ponieważ „zadowala się” tylko pobieraniem informacji, bez ich zmiany (chociaż znowu, jak to jest dokładnie istotne ... jak wiele razy używamy odbicia, aby tworzyć instancje typów w ruchu - a więc, gdzie zaszła tutaj zmiana? Nie mieliśmy nowo utworzonego obiektu w pierwszej kolejności, żadna inna zmiana się nie wydarzyła, chyba że rozważasz „powstanie” jako zmianę, chociaż zmiana nie dotyczyła samego badanego tematu (też nie miałaby większego sensu).
Veverke
Zatem refleksja jest „procesem”, który obejmuje więcej kroków niż „introspekcja”. Gdzie jednak jest przekonujący argument przemawiający za refleksją ?! Introspekcja jako słowo idzie w parze z tym, co ten termin reprezentuje w kontekście programowania - podczas gdy „refleksja” - w jaki sposób akt odzwierciedlania instrukcji / typu jest bliższy „modyfikowaniu” niż „introspekcji”?
Veverke
27

Refleksja pochodzi z idei „samokontroli, samomodyfikacji i autoreplikacji”, refleksji nad sobą w celu zmiany. W programowaniu używasz refleksji, aby zbadać strukturę samego programu w kontekście używania go, zamiast tylko go badać. W zamian otrzymujesz reprezentację programu, którego możesz użyć do jego modyfikacji, a nie dane, na których on działa.

Więcej informacji można znaleźć w artykule na Wikipedii. .

tvanfosson
źródło
W ogóle nie odpowiedziałeś na jego pytanie. Introspekcja: spojrzenie do wewnątrz; w szczególności akt lub proces samooceny.
mmcdole,
@Simucal, przepraszam, nie było to bardziej jasne. Zredagowałem odpowiedź, aby określić, że jest to badanie z zamiarem działania.
tvanfosson
On zrobił. Twierdzi, że termin odbicie jest używany w zależności od zdolności programu do refleksji nad zmianami poprzez modyfikowanie samego siebie.
Filip Dupanović
1
@kRON, moja początkowa odpowiedź nie była tak konkretna.
tvanfosson
Nadal nie rozumiem, jak to odpowiada na pytanie: rzeczywiście, wikipedia pomaga w rozróżnianiu introspekcji typu, ponieważ „zadowala się” tylko pobieraniem informacji, bez ich zmiany (chociaż znowu, jak to jest dokładnie istotne ... jak wiele razy używamy odbicia, aby tworzyć instancje typów w ruchu - a więc, gdzie zaszła tutaj zmiana? Nie mieliśmy nowo utworzonego obiektu w pierwszej kolejności, żadna inna zmiana się nie wydarzyła, chyba że rozważasz „powstanie” jako zmianę, chociaż zmiana nie dotyczyła samego badanego tematu (też nie miałaby większego sensu).
Veverke
4

Istnieje inna koncepcja zwana introspekcją typu, która odnosi się do możliwości określenia typu obiektu w czasie wykonywania.

edytuj: Zdaję sobie sprawę, że twoje pytanie miało być niezależne od języka, ale w Javie refleksja służy do określenia, jakie elementy ma obiekt, podczas gdy introspekcja pozwala zidentyfikować właściwości JavaBeans, które ma obiekt, dlatego klasa introspekcji jest w pakiet java.beans. Nie jestem pewien, jaka byłaby dokładna różnica między terminami w innych językach,

dancavallaro
źródło
4

Termin refleksja pochodzi z rozprawy doktorskiej Briana Cantwella Smitha z 1982 r., Którą można znaleźć pod adresem http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf

To, co zaczęto nazywać refleksją, często jest jedynie introspekcją, tj. Dostępem do metadanych. Wymagania Smitha dotyczące refleksji obejmowały związek przyczynowy z metadanych wstecz i jest to zwykle brakujący element. Jednym ze sposobów wyobrażenia sobie refleksji jest dostęp do implementacji, a nie tylko wykonanie jakiejś nowej instancji obliczenia, ale dostęp obliczenia do jego własnej implementacji. Z pewnością oryginalny interfejs API refleksji Java został błędnie nazwany, ponieważ nie był odbiciowy w tym sensie.

Ed Puckett
źródło
1

W .Net myślę, że termin Odbicie jest bardzo odpowiedni, ponieważ to nie sam typ jest badany, jest manifestem kodu, który jest tylko opisem.

Guge
źródło
1

Refleksja w znaczeniu definicji 3 i 4 może mieć charakter introspektywny. Oznacza to, że introspekcja jest refleksją nad sobą. Myślę, że introspekcja jest lepszym słowem do określenia samego aktu analizującego kod, ponieważ słowo jest bardziej szczegółowe, ale nie uważam, że refleksja jest całkowicie niewłaściwa.

Greg Graham
źródło