Reflection



  • 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.



  • 🤡



  • Jester schrieb:

    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?

    dh also wenn ich versuche Infos ueber ein Plugin zu bekommen dann ist es keine Reflection? Weil es gehoert ja nicht zusammen. zumindest wurde es nicht gemeinsam erstellt.

    Das macht die Sache irgendwie laecherlich wenn man ploetzlich eine Technik Anhand des Einsatzgebietes definiert. Und das ist zB der Punkt wo ich diese Definition nicht ernst nehmen kann.

    Kleines Code Beispiel:

    bool supports(String name, String method) {
      Class clazz = Class.load(name);
      ArrayList<String> methods = getAllMethods(clazz);
      return methods.find(method) != null;
    }
    

    Waere das Reflection (eigentlich introspection, aber nehmen wir an wir rufen dann nachher auch noch die methode auf die wir auf vorhandensein testen)? Ich nehme einfach mal an, dass es so ist. Schliesslich ist das eine 08/15 Java Definition.

    Was ist aber damit?

    supports("opengl.dll", "glKrasseFunktion");
    

    Ploetzlich lade ich eine DLL statt direkt einer Klasse - das Objekt auf dem ich operiere aendert sich, der Code, die Semantik und die Logik bleibt aber gleich.

    Oder was wenn ich ein class-File lade dass von einer komplett anderen Anwendung ist. Dass garnichts mit meiner Anwendung zu tun hat - ich habe einfach einen Fehler gemacht und die falsche class Datei geladen. Und abhaengig davon ob ich jetzt die richtige oder die falsche Datei geladen habe, ist es Reflection oder nicht?

    Das klingt nicht logisch. Entweder ist es Reflection wenn ich eine class Datei lade und mir eine Liste der oeffentlichen Methoden ansehe und dann anhand dieser Liste eine Entscheidung treffe (zB eine dieser Methoden dann aufzurufen) oder es ist keine Reflection - die Definition darf nicht abhaengig davon sein welche Datei ich lade.

    Und wenn ich fremde Dateien laden darf und es ist Reflection - dann ist die Frage: warum ist es nur bei class Dateien Reflection. Ist es auch bei JAR Archiven Reflection? Was sind Jar Dateien denn anderes als eine Sammlung von class Dateien? Ist es Reflection wenn ich jede Class Datei einzeln lade aber nicht wenn ich das komplette Jar Archiv lade?

    Und wenn ich ein Jar Archiv laden darf und es ist Reflection wenn ich mir die public Klassen ansehe und mir eine liste der public methoden geben lasse und anhand dere Entscheidungen treffe (zB einen teil dieser Methoden aufzurufen) - wie weit sind wir dann davon entfernt das ganze mit einer DLL zu machen? Was ist denn eine DLL anderes als eine andere Form eines Jar Archivs? Die DLL beinhaltet eine Sammlung oeffentlicher Typen (Klassen) und Funktionen (Methoden).

    Ist eine DLL jetzt wirklich so komplett anders als eine class Datei? Ich meine, ich kann eine class Datei in eine DLL kompilieren. Was wenn ich zB den Java Code zu einer nativen Anwendung kompiliere - wenn ich dann Klassen lade, lade ich sie aus einer DLL heraus. Ist es dann noch Reflection? Ich meine der Code ist ja 100% identisch -> was sich aendert sind die Compilerparameter.

    btw, hast du den wikipedia Artikel eigentlich gelesen und die Referenzen die dort angegeben sind? Denn eigentlich habe ich keinen Widerspruch dort gefunden zu dem was rapso und ich sagen.

    Das Code Beispiel in C# laedt zB ein komplettes Assembly (.NET trennt ja nicht in class Files und Jar Files wie Java) - und somit ist es laut deiner Definition schon sehr fragwuerdig ob der Code Reflection ist.

    Wenn sich wikipedia auf "Reflection-oriented programming includes self-examination, self-modification, and self-replication." bezieht wird nicht Reflection gemeint, sondern Reflection orientierte programmierung - eine Art zu programmieren (wie objekt orientierte programmierung) - das eben statt auf objekte (wie bei oop) eben alles auf reflection bezieht.

    Natuerlich ist in dieser herangehensweise der Programmierung das eigene Programm und der eigene Code das zentrale mittel um das es geht. ein wichtiger bestandteil davon ist ja selbstmodifizierenden code schreiben zu koennen.

    das beeinflusst aber nicht die verwendung von reflection in sprachen wie c++ oder java. das sind keine sprachen wo man reflection orientierte programmierung oft sieht - reflection wird hier als tool verwendet um kleine aufgaben zu loesen und nicht als zentrale anlaufstelle um die meisten probleme zu loesen.

    es sei denn du beziehst dich auf den deutschen wikipedia eintrag - der recht schwach uebersetzt wurde. alleine die gleichstellung von introspektion und reflection sollte zu denken geben.

    Einige Links von dem englischen wikipedia Artikel widersprechen dir sogar direkt - indem zB datenbank interfaces als beispiel genommen werden fuer den einsatz von reflection.

    ich weiss zwar dass das alles sicher total falsch ist was ich sage - aber uU ist es vielleicht doch korrekt? Ist Reflection vielleicht doch mehr als die Standard Java Definition?

    Manchmal glaube ich, dass Java der Programmiercommunity sehr schadet. Nicht weil die Sprache schlecht ist oder weil die VM (insert flame) ist - sondern weil zuviele Leute die Java Definition eines features nehmen (weil sie dort zum ersten mal mit dem Konzept in Kontakt getreten sind) und es als die alleingueltige Definition betrachten.

    Nur leider ist das ein tunnelblick - die welt ist soviel groesser...

    zum abschluss noch die essentielle Frage: was ist nicht reflection? Die frage ist einfach nur bescheuert - mehr nicht. Was ist nicht objekt orientierung? Wenn man sich nicht an objekten orientiert. Ergo: nicht reflection ist, wenn man sich keine metainformationen ueber eine blackbox holt.

    int i=vec.size();

    waere zB jetzt mal keine reflection im engeren sinne. nur ist das nicht ein langweiliges beispiel?

    Ist es nicht viel interessanter zu erfahren was reflection ist? denn eins ist reflection schon mal nicht: ein baum. Und ein flugzeug auch nicht...

    Die Frage alleine zeigt schon ein fehlen von verstaendnis - denn bei konzepten sind die grenzen immer nur sehr schwer genau zu definieren. wann ist code denn jetzt wirklich 100% objekt orientiert? wenn er sich an objekten orientiert - aber wie genau beweise ich das? das ist sehr schwer und eigentlich nicht wirklich moeglich. deshalb sagen wir zu einem code objekt orientiert wenn die tendenz sichtbar ist sich an objekten zu orientieren.

    selbes bei reflection: reflection ist es, wenn ich eine blackbox hernehme, metainformationen abrufe und diese zur manipulation von daten verwende.

    und vielleicht noch was generelles zum thema auto-loss,

    Ja, es zeigt wer Argumente hat. Wer keine hat beleidigt und fliegt aus der Diskussion raus weil man ihm einfach nicht mehr ernst nehmen kann.



  • Jester schrieb:

    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 verstehe nicht, wieso du dich so sehr auf "eigene" Strukturen des Programmes verbeist.

    Ich denke der grosse Vorteil von Reflection ist es ein Objekt zu Laufzeit zu laden und es nahtlos in das eigene Programm zu integrieren. Nach dem Laden und der Abfrage der Struktur des fremden Codes kann man den Code genauso benutzen als waehre er schon immer Teil des Programms gewesen.

    Das kann man ueber COM, Dlls, SharedObjects, Pipes, Sockets, Java Classloader, usw. erreichen.



  • Ich "verbeiße" mich in dieses *eigene* Struktur, weil es zur Definition von Reflection dazugehört. Über welches Mittel man das letztlich erreicht ist völlig egal.

    @Shade: Die Frage finde ich ehrlich gesagt nicht bescheuert, wie Du schon sagst ist die Welt ja so viel größer. Warum ist es also keine Reflection, wenn ich mit Hilfe der size-Methode aus der Blackbox std::vector die Information raushole, wie viele Elemente gerade darin sitzen? Eine Definition muß nicht nur erklären was etwas ist, sondern auch was es nicht ist, weil man sonst eben Gefahr läuft die Definition zu allgemein zu gestalten. Genau da liegen nämlich meine Zweifel. Ich bin vollkommen überzeugt davon, dass Deine Definition alles abdeckt was Reflection ist, aber nicht dass alles was sie abdeckt auch Reflection ist. Diese Frage zu stellen ist also zielführend (auch im Sinne dessen, dass mich eine überzeugende Antwort zu dem Schluß führen könnte, dass deine Definition genau das richtige sagt) und eben nicht Zeuge für das Fehlen jeglichen Verständnisses und völlige Verblödung samt Tunnelblick.

    Btw: pass im nächsten post besser auf, sonst haste verloren...

    P.S.: Kannst Du bitte etwas längere Absätze schreiben, ich finde Dein Posting sehr anstrengend zu lesen.



  • Jester schrieb:

    Ich "verbeiße" mich in dieses *eigene* Struktur, weil es zur Definition von Reflection dazugehört. Über welches Mittel man das letztlich erreicht ist völlig egal.

    Wo steht diese Definition?
    Sie ist genauso "zufällig" wie meine Definition von Reflection - nur dass ich deine widerlegen kann und du meine nicht.

    Warum ist deine Definition (die sich übrigens mit wikipedia und den von dir verlinkten Artikeln dort beisst - sprich nicht deckt - sprich sie widersprechen einander) richtiger als meine, die von keinem der Artikel die hier erwähnt wurden widersprochen wird?

    Warum liege ich falsch und du nicht? Sogar DEINE links decken sich mit meiner Definition. Bringt bitte ein Argument, nur ein einziges warum Reflection innerhalb eines Programmes vonstatten gehen muss und nicht über Programm Grenzen hinaus gehen darf.

    Soweit ich das nämlich verstanden habe beziehst du dich auf reflexive programming - welches in der Tat Reflection idR für sich selbst einsetzt um den eigenen Code zu modifizieren. Aber reflexive Programming hat mit dem Konzept Reflection erstmal nicht soviel zu tun. Es orientiert sich an Reflection aber definiert Reflection nicht. Selbes mit OOP. Ein Objekt ist ein Objekt auch wenn man es in einem nicht OO Kontext verwendet.

    @Shade: Die Frage finde ich ehrlich gesagt nicht bescheuert,

    Definiere OOP ohne dass es einen Streitpunkt gibt. Definiere es so dass man definitiv über jeden Code sagen kann ob er OOP ist oder nicht.

    Kannst du nicht und solange du das nicht kannst verlange es nicht von mir.

    Und ich würde es begrüßen wenn du etwas respekt zeigen würdest. Auch wenn es viel verlangt ist - aber ich beleidige dich nicht, also beleidige mich nicht, ok? Das hier ist eine fachliche Diskussion hier zählen Fakten also bring einfach welche und widerleg was ich sage.



  • Shade Of Mine schrieb:

    Wo steht diese Definition?

    Zum Beispiel bei Wikipedia. Jeweils auf deutsch und englisch gleich der erste Satz.

    Sie ist genauso "zufällig" wie meine Definition von Reflection - nur dass ich deine widerlegen kann und du meine nicht.

    Eine Definition kann man per Definition nicht Widerlegen, man kann sie für brauchbar und für unbrauchbar befinden. Ich empfinde Deine nicht als brauchbar, weil ich sie für zu allgemein halte. Nahezu jeder Vorgang am Computer kann als das Beschaffen einer Information aus einer Blackbox angesehen werden. (Weder Bäume noch Flugzeuge sind Vorgänge am Computer).

    Warum ist deine Definition (die sich übrigens mit wikipedia und den von dir verlinkten Artikeln dort beisst - sprich nicht deckt - sprich sie widersprechen einander) richtiger als meine, die von keinem der Artikel die hier erwähnt wurden widersprochen wird?

    wo beißt sich das denn bitte? allein der erste Satz stellt die Sache doch völlig klar. Unser einziger Streitpunkt kann nun noch sein, was *eigene* Struktur genau bedeutet.

    @Shade: Die Frage finde ich ehrlich gesagt nicht bescheuert,

    Definiere OOP ohne dass es einen Streitpunkt gibt. Definiere es so dass man definitiv über jeden Code sagen kann ob er OOP ist oder nicht.

    Das wird vermutlich nicht klappen. Und das verlange ich auch garnicht. Aber es gibt jede Menge Programme über die man sich anhand der Definition einig ist, dass sie *kein* OOP sind. Ich möchte doch nur wissen, was in Deinem Sinne keine Reflection ist, um die Definition nicht nur in die eine Richtung: "was ist Reflection", sondern auch in die andere Richtung "was ist keine Reflection" abzugrenzen, um sie einordnen zu können. Das hat nichts damit zu tun, dass man es für jeden Einzelfall zu 100% entscheiden können muß.

    Letztlich argumentierst Du doch genauso: "Was ist ein Programm? Das ist nicht richtig fest zu fassen, also ist die Definition Mist."

    Und ich würde es begrüßen wenn du etwas respekt zeigen würdest. Auch wenn es viel verlangt ist - aber ich beleidige dich nicht, also beleidige mich nicht, ok? Das hier ist eine fachliche Diskussion hier zählen Fakten also bring einfach welche und widerleg was ich sage.

    Moment mal, du sprichst hier aller welt den tunnelblick zu und erlärst meine Fragen für bescheuert. Das ist wohl bei weitem das unhöflichste was hier bis jetzt im Thread gelaufen ist, also spiel jetzt hier nicht die Unschuld vom Land.



  • 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.

    ich weiss auch nicht was du daran nicht verstehst

    the emphasis of the reflection-oriented paradigm is dynamic program modification, which can be determined and executed at runtime

    aus wikipedia.

    und mit 'eigene structurs' ist gemeint dass ein modul dir metainformationen ueber den eigenen aufbau liefern kann und dir ueber das reflektion interface erlaubt diese _eigene_ interna zu modifizieren, dass es also nicht nur aus dem funktionalen teil besteht.
    Du hast also keinen direkten zugriff auf die daten, sondern ueber das reflektion interface (deswegen _eigene_ structs, nicht weil das programm das einzige ist was das eigene reflektion interface nutzt, das muesste es ueberhaupt nicht, da es die interna auch so kennt).

    ich weiss nicht was man daran nicht vetsehen kann.



  • Ich kenne "reflection" nur von Java und C#.

    Die beste bisher gegebene Definition war, sinngemäß, reflection liefert Daten über Daten.
    Gemeint ist damit, dass Daten erfragt werden können, die das Objekt selber beschreiben. Nicht zu verwechseln mit den Daten die das Objekt enthält um ein "Ding" (Konzept, eine Sache) zu beschreiben.

    Das eingangs angesprochene Beispiel
    (sinngemäß)
    "Grafikkarten(-treiber) ist ein Beispeil, weil ich ihn nach der aktuellen Auflösung fragen kann."
    Ist kein Beispiel für reflection.

    Warum?
    Die Auflösung beschreibt die Daten der "Sache" Grafikkarte. Aufgabe der Grafikkarte (des Treibers) ist ja "Bildschirmausgabe". Daten sind z.B. Auflösung, Farbe, Farbtiefe etc.
    Das sind spezielle Eigenschaften die die Grafikkarte benötigt um ihre Aufgabe zu erledigen.

    reflection wäre z.B. die Abfrage der Version.
    Warum?
    Die Version ist ein Datum über das Objekt Grafikkarte.
    Die Auflösung ist ein Datum welches dazu dient das Objekt Grafikkarte zu "bauen".

    Im Übrigen glaube ich ist vieles hier Haarspalterei. 😉



  • ihoernchen schrieb:

    Das eingangs angesprochene Beispiel
    (sinngemäß)
    "Grafikkarten(-treiber) ist ein Beispeil, weil ich ihn nach der aktuellen Auflösung fragen kann."
    Ist kein Beispiel für reflection.

    Dieses Beispiel bezog sich nicht auf die aktuelle Auflösung, sondern alle, die diese Hardware unterstützt. Man könnte es im weiten Sinne so auffassen, dass es eine Schnittstelle "Auflösungsmodus" gibt, die von verschiedenen konkreten Auflösungstypen implementiert werden. Man könnte nun abfragen, welche solch implementierenden Typen in der Hadware/Treibersoftware exisitieren.
    Aber Du scheinst recht zu haben, die Diskussion hat sich weit davon entfernt...



  • Die beste bisher gegebene Definition war, sinngemäß, reflection liefert Daten über Daten.
    Gemeint ist damit, dass Daten erfragt werden können, die das Objekt selber beschreiben. Nicht zu verwechseln mit den Daten die das Objekt enthält um ein "Ding" (Konzept, eine Sache) zu beschreiben.

    Finde ich eine gute Definition.

    Meinem (recht oberflächlichem) verständnis nach ist reflection, dass man "etwas"(also Objekt, dll, programm, server,whatever) fragt, was es ist und was es kann. Man holt sich also nur strukturinformationen.

    eine wirklich einfache form von reflection in C++ wär vielleicht sowas:

    class Base
    {
        public:
            virtual bool isSizeImplemented()=0;
            virtual int size()=0;
    };
    ...
    
    Base* obj=getObj();
    if(obj->isSizeImplemented())//abfragen der strukturinformation
    {
        cout<<obj->size();//abfragen des wertes
    }
    else
    {
        cout<<"N/A";
    }
    


  • Jester schrieb:

    Zum Beispiel bei Wikipedia. Jeweils auf deutsch und englisch gleich der erste Satz.

    siehe rapsos Post.

    Das wird vermutlich nicht klappen. Und das verlange ich auch garnicht. Aber es gibt jede Menge Programme über die man sich anhand der Definition einig ist, dass sie *kein* OOP sind.

    selbes bei reflection. sobald metainformationen im spiel sind, ist es ein streitfall. vec.size() ist zB keine metainformation. object.getClass() dagegen vermutlich schon. Genauso wie es fragwürdig wird wenn objekte in einem code vorkommen ob er jetzt objektorientiert ist. weil nur weil es objekte gibt ist er nicht zwangsläufig oo. genauso ist es nichtzwangsläufig reflection wenn informationen abgefragt werden.

    Du übergehst btw alle meine Argumente -> ist Reflection dadurch definiert ob ich die richtige oder die falsche Datei lade. Das ist nämlich der Grundstein deiner Definition: sobald ich eine externe Datei laden kann und Reflection verwende, fällt deine Definition um.

    Du stützt dich auf den 1. Satz in dem wikipedia Artikel (ohne den Rest und die Referenzen zu beachten):

    In computer science, reflection is the process by which a computer program can observe and modify its own structure and behavior.

    Aber der Satz schließt nicht aus dass auch externe Resourcen - zB ein Plugin reflectiert werden kann. Die Code Samples verwenden tw externe Resourcen und in der Diskussion über den Artikel wird auch die umformulierung zu

    More generally, reflection is an activity in computation that allows an object to have information about the structure and reason about its own computation.

    Und wenn man das liest, wird einem der Sinn des originalen Satzes klar (hoffentlich): das programm weiß über sich selbst bescheid und kann sich selbst modifizieren (zB calls machen). aber das bedeutet nicht dass die anstöße nicht von extern kommen können. Reflection bedeutet ja: ich frage eine blackbox nach informationen - da es eine blackbox ist, kann nur sie mir die information geben -> das nennt sich reflection. insofern ist es reflection der eigenen struktur - wenn du damit glücklich bist.

    den anstoß oder die anfrage über diese metainformationen kann aber von extern kommen: schließlich ist interopabilität ein kernpunkt der programmierung.



  • witte schrieb:

    Dieses Beispiel bezog sich nicht auf die aktuelle Auflösung, sondern alle, die diese Hardware unterstützt. Man könnte es im weiten Sinne so auffassen, dass es eine Schnittstelle "Auflösungsmodus" gibt, die von verschiedenen konkreten Auflösungstypen implementiert werden. Man könnte nun abfragen, welche solch implementierenden Typen in der Hadware/Treibersoftware exisitieren.
    Aber Du scheinst recht zu haben, die Diskussion hat sich weit davon entfernt...

    Ja stimmt. Das ändert jedoch nichts. Du kannst es auch durch "unterstützte Auflösungen" ersetzen. Auch das wäre keine reflection.

    reflection ist nicht einfach das erfragen von Informationen.
    Das scheint mir ein wesentliches Missverständnis zu sein.
    Vielmehr geht es um die Art der Informationen.



  • otze schrieb:

    eine wirklich einfache form von reflection in C++ wär vielleicht sowas:

    class Base
    {
        public:
            virtual bool isSizeImplemented()=0;
            virtual int size()=0;
    };
    ...
    
    Base* obj=getObj();
    if(obj->isSizeImplemented())//abfragen der strukturinformation
    {
        cout<<obj->size();//abfragen des wertes
    }
    else
    {
        cout<<"N/A";
    }
    

    Meiner Meinung nach wäre das keine reflection.
    Ok, wie schon angesprochen ist das nun Haarspalterei und jeder wird es anders sehen.
    Und dazu kommt ich durch java und C# vorgeschädigt 🙂

    Hier (in deinem Beispiel) wird eher der "Funktionsumfang" beschrieben.
    Der Unterschied ist, dass du dir als Programmierer aussuchen kannst diese Informationen zu liefern oder nicht; es ist Teil der Schnittstelle. Ok, du wirst sagen ich leite alles in meinem Programm von Base ab. Aber das ist kein Zwang.
    Die über reflection zugändlichen Meta-Daten sind immer vorhanden (z.B. der Compiler generiert diese). Sie sind unabhängig von der Schnittstelle eines Objekts zugänglich.
    Die Schnittstelle des Objekts ist Teil der Meta-Daten (also z.B. welche öffentlichen Methoden hat ein Objekt).

    Das scheint sich mit dem Grafik-Beispiel zu beißen, gebe ich zu.

    Wie gesagt, ich sehe es selbst so. Diese Ansicht ist sehr durch C# geprägt.



  • Shade Of Mine schrieb:

    Jester schrieb:

    Das wird vermutlich nicht klappen. Und das verlange ich auch garnicht. Aber es gibt jede Menge Programme über die man sich anhand der Definition einig ist, dass sie *kein* OOP sind.

    selbes bei reflection.

    Genau das sehe ich bei Deiner Definition nicht so. Aber das zu Hinterfragen ist ja eine bescheuerte und total irrelevante Frage. 🙄

    vec.size() ist zB keine metainformation.

    Aber eine Bildschirmauflösung natürlich schon? Die Grenze ist doch auch nicht weniger willkürlich als zu sagen, wenn ich eine externe Datei lade, ist das nicht sowas wie das ganze in mein Programm einbinden? Wird es damit evtl. zum Teil des Programms? Bei einem Grafiktreiber, den ich anspreche,würde ich sagen nein, der läuft unabhängig vom Programm, bei einem Plugin eher ja, das wird sozusagen zu einem Teil der Applikation.

    genauso ist es nichtzwangsläufig reflection wenn informationen abgefragt werden.

    Darüber sind wir uns wenigstens einig. Allerdings kann man meiner Meinung nach mit Deiner Definition von Reflection so ziemlich jede Abfrage von Information als Reflection einordnen. Sicher verstehst Du, dass ich unter dieser Prämisse Deine Definition ablehnen muß. Daher fragte und frage ich auch immer wieder in dieser bescheuerten Richtung nach, weil an dieser Stelle ganz offensichtlich unser Verständnis Deiner Definition auseinandergeht.

    Du übergehst btw alle meine Argumente -> ist Reflection dadurch definiert ob ich die richtige oder die falsche Datei lade. Das ist nämlich der Grundstein deiner Definition: sobald ich eine externe Datei laden kann und Reflection verwende, fällt deine Definition um.

    Ja, die übergehe ich, weil ich es für einen Nebenschauplatz halte. Du legst hier eine willkürliche und offensichtlich unpassende Definition von Programm an, um die Definition ad absurdum zu führen. Wie Du aber selbst angemerkt hast, ist diese Abgrenzung keineswegs fest und auch nicht 100% fest zu machen. Eine einzelne ungeschickte Interpretation macht also nichts kaputt.

    Du stützt dich auf den 1. Satz in dem wikipedia Artikel (ohne den Rest und die Referenzen zu beachten):

    In computer science, reflection is the process by which a computer program can observe and modify its own structure and behavior.

    Ich sehe auch nicht, was man daran falsch verstehen kann. Vielleicht kannst Du's mir nochmal am Beispiel mit der Bildschirmauflösung und der Notrufsäule (oder was das nochmal war) erklären. Wer beobachtet und modifiziert da seine eigene Struktur? -- Meiner Meinung nach sind das beides keine Beispiele für Reflection.

    Aber der Satz schließt nicht aus dass auch externe Resourcen - zB ein Plugin reflectiert werden kann. Die Code Samples verwenden tw externe Resourcen und in der Diskussion über den Artikel wird auch die umformulierung zu

    More generally, reflection is an activity in computation that allows an object to have information about the structure and reason about its own computation.

    Ja, das ist ein schöner Satz und er enthält auch wieder das "own". Um es mal so zu sagen: Der Artikel sagt Reflection ist folgendes: Wir haben ein A und A kann Reflection wenn A weiß wie A aufgebaut ist und wenn A A modifizieren kann. Weit und breit ist hier kein weiteres Objekt/Modul/whatever B zu sehen.

    Deine Definition sagt: Reflection ist, wenn wir ein A haben und ein B und A von B Informationen über B bekommen kann.

    Erstere Definition schließt ja keinesfalls aus, dass A die Informationen an jemanden anderes weitergibt, letztere fordert aber dass es noch jemanden gibt.

    den anstoß oder die anfrage über diese metainformationen kann aber von extern kommen: schließlich ist interopabilität ein kernpunkt der programmierung.

    ja, da stimme ich vollkommen zu.



  • Shade Of Mine schrieb:

    Reflection bedeutet ja: ich frage eine blackbox nach informationen - da es eine blackbox ist, kann nur sie mir die information geben -> das nennt sich reflection.

    ich habe die einzelnen standpunkte nicht alle im detail gelesen, und möglichweise sage ich jetzt etwas dummes oder redundantes, aber wäre nach dieser definition nicht bereits jede art der datenkapselung schon reflection?

    wenn ich meine definition noch anbringen darf: reflection ist die bereitstellung von informationen über die eigene beschaffenheit (im gegensatz zu nutzdaten), zum zweck der interoperabilität mit anderen entitäten.



  • Jester schrieb:

    ja, da stimme ich vollkommen zu.

    wie passt das damit zusammen das reflection nicht über ipc laufen kann? was laut dir ja der grundstein von reflection ist: da reflection ja nur reflection ist, wenn es in meinem eigenen programm stattfindet.

    wenn der anstoß von extern kommen kann - kann dann nicht metainformation über einen treiber nicht auch reflection sein?

    @spiegel:
    deine definition geht davon aus dass ich selbst die metainformationen über mich bereitstellen muss, was zwar gängig und praktisch ist, aber imho kein zwang ist (mir ist es ja egal woher ich diese metainformationen bekomme, solange ich sie bekomme). aber ansonsten kann ich dem nur zustimmen.



  • Shade Of Mine schrieb:

    wenn der anstoß von extern kommen kann - kann dann nicht metainformation über einen treiber nicht auch reflection sein?

    Wenn es um Metainformationen ginge, hättest Du recht. Aber Du bekommst keine Metainformationen über den Treiber, wenn Du die Auflösung abfragst. Es geht nicht um die "Beschaffenheit" des Treibers. Du musst nicht zuvor per Reflection ermitteln, wie Du an das Property "Auflösung" herankommst. Du fragst doch einfach ab.



  • ihoernchen schrieb:

    Meiner Meinung nach wäre das keine reflection.
    Ok, wie schon angesprochen ist das nun Haarspalterei und jeder wird es anders sehen.
    Und dazu kommt ich durch java und C# vorgeschädigt 🙂

    [...]
    Die über reflection zugändlichen Meta-Daten sind immer vorhanden (z.B. der Compiler generiert diese). Sie sind unabhängig von der Schnittstelle eines Objekts zugänglich.

    Ich denke nicht, dass die anforderungen für reflection sind, dass der compiler die daten liefert. Für reflektion ist meiner ansicht nach nur erforderlich, dass es eine Blackbox gibt, von der ich weis, dass ich sie ansprechen kann, und dass diese Blackbox daten hat die mir erklären, wie ich sie nutzen kann.

    In Java geht das ja automatisch. meines wissens nach ist die reflection Schnittstelle in Object enthalten, und jede Klasse erbt automatisch davon.
    genauso wie jede Klasse automatisch diese daten enthält.

    In C++ gibt es das nicht, was nichts daran ändert, dass ich diese basisklassenbeziehung von hand einfügen kann, oder die daten in die Klasse von Hand mit einkompiliere.

    Die Sprache ist Schlussendlich doch nur ein tool um irgendein bestimmtes verhalten zu erreichen. Mit manchen geht es besser, mit anderen schlechter, aber es geht.

    Wir haben ein A und A kann Reflection wenn A weiß wie A aufgebaut ist und wenn A A modifizieren kann.

    In dem Englischen Zitat steht aber nichts von modifizieren :). Reflection ist, wenn A informationen über sich selbst besitzt. In dem Fall ist es durchaus reflection, wenn es irgendwo einen server gibt, den wir fragen können, welche Protokolle er unterstützt.


Anmelden zum Antworten