Reflection



  • Wie auch immer es gewendet wird, der Begriff Reflection kam mit den Programmiersprachen auf, die Zugriff auf Klassenmerkmale zur Laufzeit erlauben, und bezeichnet eben genau dieses _Werkzeug_*, siehe Wikipedia.

    Dass gerade eine Community, welche sich mit einer Sprache befasst die eben nicht eine Reflection in diesem Sinne bietet versucht, den Begriff abstrakter zu sehen, ist verständlich. Genauso wie die Basic-Fraktion immer davon redet, dass objektorientierte Programmierung eine Philosophie ist und deshalb mit der Unterstützung innerhalb einer Sprache nichts zu tun hat.

    Selbst wenn einige es als richtig erachten, die Reflection ein wenig weitläufiger zu definieren, so ist es doch zumindest sehr offensichtlich, dass der Threadersteller eben das konkrete Werkzeug* gemeint hat, wie es in Wikipedia beschrieben ist.

    -------------------------------
    *Werkzeug nicht im Sinne einer Programmiersprache, sondern einer Grundfunktionalität bei der Programmierung, wie beispielsweise Arrays.



  • Das ist garnicht so sehr der zentrale Punkt. Wichtig ist vor allem, dass Reflection (zu deutsch Reflexion, nicht Wiedergabe) es dem Programm ermöglicht die *eigene* Struktur zu betrachten und zu modifizieren. Genau deswegen ist ein Listing der möglichen Parameter auch keine Reflection, weil nämlich der Benutzer hier die Information bekommt und nicht das Programm. Genauso verhält es sich auch mit der Abfrage der möglichen Bildschirmauflösungen. Hier werden Hardware-Eigenschaften abgefragt und wiederum nicht die Struktur des Programms. Daher handelt es sich dabei nicht um Reflection.



  • rapso schrieb:

    Konrad Rudolph schrieb:

    rapso schrieb:

    Du kannst ohne kommunikation keine reflection haben.

    Ja und? Ohne Kommunikation kannst Du auch tausend andere Sachen nicht haben. Du hast trotzdem nur ein Beispiel für Kommunikation gebracht und nicht für Reflexion.

    andere haben verstanden dass die kommunikation das medium der reflektion war. du nicht. q.e.d.

    Werd nicht albern und liefer lieber Argumente, bzw. geh konstruktiv auf meine ein, statt meine Aussagen zu ignorieren und irgend etwas ganz anderes darauf zu schreiben.

    Wie oft denn noch? Das ist mir klar! Es ging mir lediglich um Dein Beispiel. Ich habe auch nie irgendwas von Strings oder anderen speziellen Techniken erzählt (mal davon abgesehen, dass es sehr wohl C++-Implementierungen gibt/gab, die Stringvergleiche der Typennamen für RTTI verwendet haben).

    wenn du also zwei objekte mittels cobra kommunizieren laesst. ist keine reflektion moeglich, weil schon (tcp)kommunikation von statten geht?

    Wo ist denn da der Zusammenhang? Bitte setz Dich mal mit Aussagenlogik und speziell Negation auseinander, denn Du verdrehst mir einfach die Worte im Mund! Ich habe NIE behauptet, dass Kommunikation nicht Bestandteil von Reflektion ist. Im *Gegenteil*, ich habe mehrmals darauf hingewiesen, dass ich diesen Fakt explizit anerkenne.

    nimm dir ein beispiel an:

    Wenn das Grafiktreiberbeispiel als Reflection gültig ist, dann ist es auch Reflection wenn mich jemand fragt ob ich ein Auto besitze.

    zwar sehr trotzig, aber trotzdem hat er es verstanden.

    Bring nicht meine Kritik mit der Kritik anderer Leute durcheinander. Ich habe nie etwas gegen die Grafikkartentreiber gesagt.

    obwohl ueber das treiberprotokoll eine kommunikation stattfindet?

    Dito. Schon wieder derselbe Mist. Die „Reflexion“ zwischen uns läuft offensichtlich nicht besonders gut.

    reflect ist nur eine anleihe aus dem englischen und heisst 'wiedergeben', so wie man z.b. literatur reflectieren kann, indem man jemandem vom inhalt eines buches auf eigene weise erzaehlt, das vorher eine blackbox war fuer den hoerer.

    Du verwendest immer noch die falsche Übersetzung, auch wenn sie schon besser geworden ist.

    da meine aussage gleich bleibt, entnehme ich daraus, dass du dich dem verstaendniss naeherst. weiter so 👍

    Quatsch. Vielleicht meintest Du das gleiche, Du hast aber etwas anderes gesagt. Das solltest Du unterscheiden, das ging offensichtlich auch schon bei Deinem Beispiel schief, und daher die ganze Diskussion.

    Jester hat es auf den Punkt gebracht: „to reflect“ bedeutet, über *sich selbst* nachzudenken. Reflexion ist daher ursprünglich das Konzept, die *eigene* Struktur zu kennen und manipulieren zu können.



  • Jester schrieb:

    Das ist garnicht so sehr der zentrale Punkt. Wichtig ist vor allem, dass Reflection (zu deutsch Reflexion, nicht Wiedergabe) es dem Programm ermöglicht die *eigene* Struktur zu betrachten und zu modifizieren. Genau deswegen ist ein Listing der möglichen Parameter auch keine Reflection, weil nämlich der Benutzer hier die Information bekommt und nicht das Programm. Genauso verhält es sich auch mit der Abfrage der möglichen Bildschirmauflösungen. Hier werden Hardware-Eigenschaften abgefragt und wiederum nicht die Struktur des Programms. Daher handelt es sich dabei nicht um Reflection.

    Wie definierst du Programm?

    Ist eine Klasse die ich extern Lade Teil des Programmes aber ein Grafiktreiber nicht? Wo trennt man da? Was ist mit einem DatenBank Treiber? Wenn ich Information über eine blackbox bekomme, so ist das reflection.

    wie sieht es in java zB aus? da hat jede klasse eine liste an methoden die sie mir liefert wenn ich sie frage. genau wie ein display treiber mir eine liste der möglichen auflösungen. wobei bei beiden systemen vorkompiliert die liste im ram liegt.

    reflection bietet mir ja keine dynamischen informationen. sie bietet mir statische information über dynamische objekte.



  • Shade Of Mine schrieb:

    reflection bietet mir ja keine dynamischen informationen. sie bietet mir statische information über dynamische objekte.

    Jetzt denkst du aber zu kurz. In dynamischen Sprachen kann ein und das selbe Objekt zum Zeitpunkt X eine völlig andere Methodenliste haben als zum Zeitpunkt X+1.



  • tfa schrieb:

    Shade Of Mine schrieb:

    reflection bietet mir ja keine dynamischen informationen. sie bietet mir statische information über dynamische objekte.

    Jetzt denkst du aber zu kurz. In dynamischen Sprachen kann ein und das selbe Objekt zum Zeitpunkt X eine völlig andere Methodenliste haben als zum Zeitpunkt X+1.

    aber darum geht es ja.
    reflection _muss_ das nicht bieten.

    worauf ich hinaus will ist, dass sich reflection dadurch nicht definiert. es hängt von der blackbox ab - wenn sich die blackbox ändert muss ich das natürlich mitbekommen. aber wenn die blackbox gleich bleibt (was die norm ist) ist die information auch gleichbleibend.

    und ja, reflection kann auch weiter gehen und mir manipulationen der blackbox anbieten - aber wieder: das ist nicht wodurch sich reflection definiert.



  • Shade Of Mine schrieb:

    Ist eine Klasse die ich extern Lade Teil des Programmes aber ein Grafiktreiber nicht? Wo trennt man da? Was ist mit einem DatenBank Treiber? Wenn ich Information über eine blackbox bekomme, so ist das reflection.

    Ja, Du kannst das gerne Reflection nennen, dann darf ich dich aber auch Xin nennen. 🙂 Reflection ist genau das was ich oben beschrieben habe. Der Begriff Programm ist vielleicht nicht 100% fest zu machen, aber es ist mal recht klar, dass ein Anwendungsprogramm nicht den Treiber beinhaltet. Zumdem geht es auch um Informationen über die Struktur des Programms, nicht generell um Information. Sämtliche dieser verkorksten Beispiele sind somit offensichtlich keine Reflection, gemäß der Bedeutung, die Reflection im Bereich Informatik standardmäßig hat.

    Vielleicht magst Du mir mal irgendeinen Vorgang beschreiben, der sich anhand Deiner Definition *nicht* als Reflection bezeichnen lässt? Dein Konzept ist so allgemein, dass es bis zur völligen Nutlosigkeit verkommt und so ziemlich alles beinhaltet.



  • ➡ Reflektion ist, wenn ich danach mehr weiß als vorher, wobei das Wissen bereits zum vorherigen Zeitpunkt existierte ich mir darüber aber noch nicht im Klaren war.



  • Reflketionist schrieb:

    ➡ Reflektion ist, wenn ich danach mehr weiß als vorher, wobei das Wissen bereits zum vorherigen Zeitpunkt existierte ich mir darüber aber noch nicht im Klaren war.

    Das Substantiv zu "reflektieren" ist Reflexion, Reflektion gibt es nicht. Eine einfache Definition für Reflexion bzw. Introspektion (ich bevorzuge sprachlich das Letzte) ist das Ermitteln von Programmeigenschaften/Komponenteneigenschaften zur Laufzeit. Introspektion ist IMHO immer dann nötig wenn ein A mit einem vorher "unbekannten" (weil dynamisch hinzugefügten) B kommunizieren soll, deswegen benötigt B die Fähigkeit über sich selbst Auskunft geben zu können damit A dann weiß was es mit B so anstellen kann. Die Introspektion selbst kann unterschiedlich realisiert sein, z.B. Java hat das Reflection Paket, COM die universelle Schnittstelle IUnkown und CORBA bedient sich eines "Metaobjektdienstes".



  • Jester schrieb:

    Ja, Du kannst das gerne Reflection nennen, dann darf ich dich aber auch Xin nennen. 🙂 Reflection ist genau das was ich oben beschrieben habe. Der Begriff Programm ist vielleicht nicht 100% fest zu machen, aber es ist mal recht klar, dass ein Anwendungsprogramm nicht den Treiber beinhaltet.

    Ah, das ist schon sehr interessant. Denn gerade bei Datenbanktreibern wird oft die Highlevel Schnittstelle im Programm selbst hinterlegt und agiert als Treiber für die Datenbank (emuliert zB funktionalität die der jeweilige Low Level Treiber nicht bietet).

    Ich kann also den Treiber Metafragen stellen und bekomme Metainformation die eine Mischung aus dem ist was der LowLevel Treiber erzählt und das was die High Level Schnittstelle weiß/kann.

    Ist da also ein Teil Reflection und ein teil nicht Reflection dabei oder wie sieht es aus?

    Ähnlich ist es bei DirectX. Das liefert mir ja auch Informationen über die Grafikschnittstelle - ist das Reflection oder nicht?

    Allein die Trennung zwischen Programm und nicht Programm ist sehr fragwürdig - was ist mit IPC? Ist Reflection über IPC möglich uU sogar über RMI also über externen Rechner?

    Wo trennt man Programm von Programm? Was ist ein Treiber anderes als eine Programm und was ist ein Programm anderes als eine Klasse mit einer öffentlichen Schnittstelle?

    Ich kann den Fokus um viele Ebenen nach oben und unten bewegen. zB baut man aus Klassen Module. Aus Modulen baut man Anwendungen. Aus Anwendungen baut man Systeme. Immer das selbe Baukasten prinzip. Gerade unter Unix sehr weit verbreitet dass man aus Programmen größere Programme baut.

    Die Konzepte sind dabei überall gleich. Einfaches Bausteinprinzip. Und jetzt behauptest du Reflection ist per Definition nur innerhalb eines Programmes möglich...?



  • Jester schrieb:

    Das ist garnicht so sehr der zentrale Punkt. Wichtig ist vor allem, dass Reflection (zu deutsch Reflexion, nicht Wiedergabe) es dem Programm ermöglicht die *eigene* Struktur zu betrachten und zu modifizieren.

    es ist egal ob es die eigene struktur betrachtet oder eine fremde, es gibt viele tools die reflection nutzen um fremde 'programme' zu inspizieren oder auch um sie zu nutzen, z.b. unit tester.

    Genau deswegen ist ein Listing der möglichen Parameter auch keine Reflection, weil nämlich der Benutzer hier die Information bekommt und nicht das Programm.

    wenn man an informationen ueber eine reflektionsschnittstelle kommt, ist es reflektion. und eine reflektions schnittstelle ist eine die ein vordefiniertes kommunikationsprotokoll bietet welches es erlaubt auf informationen zuzugreifen, die nicht direkt bekannt sind.

    um auf das 110 beispiel zu kommen.
    die fragen nach 'wie ist ihr name, wo sind sie, wird ein krankenwagen benoetigt' waeren vielleicht nur property abfragen wenn man sie kurz beantwortet. wenn jedoch gefragt wird 'beschreiben sie was passiert ist', wird 'strukturinformation' uebertragen.

    Genauso verhält es sich auch mit der Abfrage der möglichen Bildschirmauflösungen. Hier werden Hardware-Eigenschaften abgefragt und wiederum nicht die Struktur des Programms. Daher handelt es sich dabei nicht um Reflection.

    wenn du jedoch die struktur des treibers abfagst, z.b. informationen ueber vorhandene funktionen und deren einsprungpunkte (falls die vorhanden sind), ist es reflektion.
    wenn du nur aufloesungen enumerierst, ist es nicht wirklich reflektion, wenn du jedoch alle moeglichen daten erhaelst von einer struktur bei der nur das protokoll bekannt ist, nicht jedoch die struktur, ist es reflektion. z.b. "800x600@60Hz"



  • Naja, ich denke das Thema ist durch. Wen es interessiert, der kann ja jederzeit nachlesen was richtig ist. Es steht euch natürlich weiterhin frei hier eure eigene Definition bewerben. Ich hatte auch nicht erwartet, dass es euch leichtfällt einzuräumen, dass ihr da ein bißchen über's Ziel hinausgeschossen seid.



  • Jester schrieb:

    Naja, ich denke das Thema ist durch. Wen es interessiert, der kann ja jederzeit nachlesen was richtig ist. Es steht euch natürlich weiterhin frei hier eure eigene Definition bewerben. Ich hatte auch nicht erwartet, dass es euch leichtfällt einzuräumen, dass ihr da ein bißchen über's Ziel hinausgeschossen seid.

    Wenn man keine Argumente hat beleidigt man.
    2 beleidigende Posts in Folge ist auto-loss, oder?



  • Shade Of Mine schrieb:

    Wenn man keine Argumente hat beleidigt man.
    2 beleidigende Posts in Folge ist auto-loss, oder?

    ich hab doch alles geschrieben. geh zu wikipedia und folge allen quellenlinks dort. an jeder stelle steht, dass es bei reflexion darum geht die *eigene* struktur zu erfassen bzw. daraus/darüber schlüsse zu ziehen. du lässt das eigene einfach weg und dadurch ist es nunmal falsch. was soll ich hier noch lange rumerzählen? du willst es nicht so haben, weil es nicht so sein darfst und spaltest hier jetzt so lange haare bis du deinen sieg erklären darfst, also mach das jetzt bitte einfach.

    ich sehe auch nicht wirklich wo hier was beleidigend ist. die faktenlage ist klar, und damit auch worum hier gerade noch gefochten wird, und genau darauf hab ich keine lust.



  • Jester schrieb:

    ich hab doch alles geschrieben. geh zu wikipedia und folge allen quellenlinks dort. an jeder stelle steht, dass es bei reflexion darum geht die *eigene* struktur zu erfassen bzw. daraus/darüber schlüsse zu ziehen. du lässt das eigene einfach weg und dadurch ist es nunmal falsch.

    OK, dh Reflection über IPC oder RMI ist keine Reflection auch wenn ich die Java Reflection API verwenden.

    Habs verstanden.

    PS: und die Beleidigungen sind wichtig fürs Ego 😉
    (Wenn du nicht weißt wo deine Beleidigungen waren, dann solltest du menschlich mal über dich nachdenken)



  • Jester schrieb:

    ich sehe auch nicht wirklich wo hier was beleidigend ist.

    Ich allerdings auch nicht. Du hast es gut auf den Punkt gebracht.
    Wenn es jetzt schon beleidigend sein soll, wenn jemand anderer Meinung ist, sollte man sich solche Diskussionen sparen.



  • Shade Of Mine schrieb:

    Jester schrieb:

    ich hab doch alles geschrieben. geh zu wikipedia und folge allen quellenlinks dort. an jeder stelle steht, dass es bei reflexion darum geht die *eigene* struktur zu erfassen bzw. daraus/darüber schlüsse zu ziehen. du lässt das eigene einfach weg und dadurch ist es nunmal falsch.

    OK, dh Reflection über IPC oder RMI ist keine Reflection auch wenn ich die Java Reflection API verwenden.

    Habs verstanden.

    fast, wenn es sich um eine zusammenghörige Applikation handelt natürlich schon.
    zudem ist reflection natürlich immer reflection, aber nur weil du über irgendeine schnittstelle irgendwas abfragst ist es nicht automatisch reflection. was auch wieder zu der zentralen frage führt, welche Art von Informationsabfrage ist im Sinne Deiner Definition keine Reflection?

    PS: und die Beleidigungen sind wichtig fürs Ego 😉

    sprich nur für dich selbst. wenn du weiter irgendwo klärungsbedarf siehst, dann schick mir doch ne mail, aber kommt mir nicht mit "du bist ein schlechter mensch - warum? - wenn du keine so schlechter mensch wärst wüßtest du warum"

    und vielleicht noch was generelles zum thema auto-loss, weil ich glaube, dass das hier eine zentrale rolle spielt. ich nehme an, dass du nicht meinst, dass wenn man jemanden beleidigt dessen aussagen automatisch wahr werden, also hast du wohl gemeint, dass derjenige dann die diskussion gewinnt. Das ist vielleicht mal ein guter Ansatz für etwas Reflexion darüber, worum es einem persönlich in Diskussionen geht -- viel Spaß beim Gewinnen.



  • Man kann übrigens auch in Assembler (oder C oder C++ etc.) Reflections haben. Man muss ja nur die Symboltabelle des eigenen Executables auslesen :).

    Und C++ bietet über Templates ja auch prima compiletime Reflections.



  • Shade Of Mine schrieb:

    Wenn man keine Argumente hat beleidigt man.
    2 beleidigende Posts in Folge ist auto-loss, oder?

    Wenn man darauf herumreitet, anstatt mal endlich die jetzt schon mehrfach gestellte Frage

    Jester schrieb:

    Vielleicht magst Du mir mal irgendeinen Vorgang beschreiben, der sich anhand Deiner Definition *nicht* als Reflection bezeichnen lässt? Dein Konzept ist so allgemein, dass es bis zur völligen Nutlosigkeit verkommt und so ziemlich alles beinhaltet.

    zu beantworten, dann ist das auch nicht unbedingt ein "Siegeszeichen" 😉



  • TheTester schrieb:

    Reflketionist schrieb:

    ➡ Reflektion ist, wenn ich danach mehr weiß als vorher, wobei das Wissen bereits zum vorherigen Zeitpunkt existierte ich mir darüber aber noch nicht im Klaren war.

    Das Substantiv zu "reflektieren" ist Reflexion, Reflektion gibt es nicht. Eine einfache Definition für Reflexion bzw. Introspektion (ich bevorzuge sprachlich das Letzte) ist das Ermitteln von Programmeigenschaften/Komponenteneigenschaften zur Laufzeit. Introspektion ist IMHO immer dann nötig wenn ein A mit einem vorher "unbekannten" (weil dynamisch hinzugefügten) B kommunizieren soll, deswegen benötigt B die Fähigkeit über sich selbst Auskunft geben zu können damit A dann weiß was es mit B so anstellen kann. Die Introspektion selbst kann unterschiedlich realisiert sein, z.B. Java hat das Reflection Paket, COM die universelle Schnittstelle IUnkown und CORBA bedient sich eines "Metaobjektdienstes".

    Natürlich gibt es das Wort, du hast doch gerade eben gesehen, dass ich es benutzt habe 👍
    Ist neue Rechtschreibung und wird auch in die neue Reform aufgenommen, google kennt es auch schon kannst ja mal nach Reflektion googeln dann findest du bereits 1mio Treffer, Reflexion liefert 34mio, hat also schon eine große Akzeptanz erlangt.


Anmelden zum Antworten