Reflection
-
superallgemeiner schrieb:
dann ist jeder getter Reflection
Solange es zur Laufzeit evaluiert wird, ja! Wenn es nur ein Zugriff auf einen Speicherbereich ist, nein!
-
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.
Eine Klasse ist auch ein abstrakter Begriff, und hängt nicht von der Implementierung ab, wie man sie in C++ und Java vorfindet. Ich kann Klassen somit auch in QBASIC programmieren. Schließlich sind Klassen ja nur ein Konzept, und die Implementierung ist nur ein Detail, das im "Konzept" nicht weiter interessiert.
Trotzdem würde man QBASIC nicht als OOP bezeichnen.
-
LOLAlter schrieb:
Trotzdem würde man QBASIC nicht als OOP bezeichnen.
Es wurde schon hunderttausendmal gesagt, nun nochmal: Eine Sprache kann nicht OOP sein, sie kann nur OOP besonders gut oder auch nicht unterstützen.
-
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.
Ein pattern ist unabhaengig von der implementierung. […] schau dir einfach mal RTTI bei c++ an, das hat garkeine strings usw. um typeninformationen zu entnehmen
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).
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.
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.
-
LOLAlter schrieb:
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.
Eine Klasse ist auch ein abstrakter Begriff, und hängt nicht von der Implementierung ab, wie man sie in C++ und Java vorfindet. Ich kann Klassen somit auch in QBASIC programmieren. Schließlich sind Klassen ja nur ein Konzept, und die Implementierung ist nur ein Detail, das im "Konzept" nicht weiter interessiert.
Trotzdem würde man QBASIC nicht als OOP bezeichnen.
Da sieht man es dass du es verstanden hast, mit gutem beispiel
das Klassenkonzept und eine sprache haben keinen zwanghaften zusammenhang, da hast du recht. man kann in allerlei sprachen objektorientiert programmieren. eine sprache die sowas von sich aus als grundlage anbieten ist ein nettes helferlein, aber keine grundlage der definition von objektorientiert.sagt ja auch niemand (mehr) dass z.b. java keine objektorientierte sprache ist nur weil sie keine moeglichkeit zur multiplen vererbung bietet.
es ist nur zum eigenen vorteil, wenn man lernt werkzeuge und verfahren voneinander zu trennen.
-
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.
Ein pattern ist unabhaengig von der implementierung. […] schau dir einfach mal RTTI bei c++ an, das hat garkeine strings usw. um typeninformationen zu entnehmen
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?
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?
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
-
Bei Interesse lohnt auch ein Blick auf Wikipedia, allerdings wird die Definition dort wohl nicht allen gefallen...
-
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?