„Reflection (Programmierung)“ – Versionsunterschied
Erscheinungsbild
[ungesichtete Version] | [gesichtete Version] |
Inhalt gelöscht Inhalt hinzugefügt
Jpp (Diskussion | Beiträge) →[[Java]]-Beispiel: Tippo und Formulierung |
Weiterleitung nach Reflexion (Programmierung) |
||
Zeile 1: | Zeile 1: | ||
#REDIRECT [[Reflexion (Programmierung)]] |
|||
[[en:Reflection (computer science)]] |
|||
<!-- In der programmierung ist reflektion ganz allgemein, daß ein programm erkenntnisse über seine eigene struktur gewinnen kann, das hat mit OOP nichts zu tun. --> |
|||
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] (OOP) spricht man von '''Reflexion''' (engl. ''reflection''), wenn zur Laufzeit eines [[Computerprogramm|Programmes]] Informationen über Eigenschaften von Typen und deren Mitgliedern (engl. ''member'') gesammelt werden. |
|||
Ein Typ (engl. ''type'') ist dabei i. d. R. eine [[Klasse (objektorientierte Programmierung)|Klasse]] (engl. ''class''), die wiederum verschiedene Mitglieder (Attribute, Eigenschaften, Methoden, Schnittstellen) besitzen, die ihrerseits über Eigenschaften verfügen können. |
|||
Reflexion ermöglicht es nun, zur Laufzeit Informationen über Klassen oder deren [[Instanz (Informatik)|Instanz]]en abfragen zu können. Bei einer [[Methode (objektorientierte Programmierung)|Methode]] sind das u. a. deren [[Sichtbarkeit]], die Art des Rückgabewertes oder die Art der [[Parameter|Übergabeparameter]]. Die Umsetzung ist dabei sprachspezifisch realisiert. |
|||
Hochsprachen wie [[Java (Programmiersprache)|Java]] (java.lang.reflect) oder die Sprache [[C-Sharp|C#]] (System.Reflection) des [[.NET]]-Frameworks bieten dazu entsprechende Pakete (engl. ''package'') bzw. Namensräume (engl. ''namespace'') an. |
|||
Eine wichtige Rolle spielt die Verwendung von Reflexion bei der [[Aspektorientierte Programmierung|aspektorientierten Programmierung]], im Zusammenhang mit [[Generizität]] (d. h. der typsicheren Programmierung), aber auch in Fragen der [[Persistenz]] (persistente Datenhaltung von [[Objekt]]en und deren [[Beziehung]]en). |
|||
==[[Java]]-Beispiel== |
|||
Das folgende Beispiel zeigt eine Methode, die eine beliebige andere Methode eines gegebenen Objekts aufruft und deren Rückgabewert zurück gibt. Aus Gründen der Vereinfachung unterstützt dieses Beispiel nur den Aufruf von Methoden ohne Parameter, die Strings zurück geben. Außerdem werden die vielfältigen möglichen Fehlersituationen ([[Exception]]s) nicht ausgewertet sondern in einem einfachen <code>try-catch</code>-Block zusammengefasst. |
|||
public String getStringProperty(Object object, String methodname) { |
|||
String value; |
|||
try { |
|||
Method getter = |
|||
object.getClass().getMethod(methodname, new Class[0]); |
|||
value = (String) getter.invoke(object, new Object[0]); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
value = null; |
|||
} |
|||
return value; |
|||
} |
|||
Die folgende Anweisung würde dann die Methode <code>getVorname()</code> des Objekts <code>person</code> aufrufen und deren Rückgabewert ausgeben. |
|||
System.out.println("Vorname von " + person + " ist " + getStringProperty(person, "getVorname")); |
|||
==Siehe auch== |
|||
[[Objektorientierte Programmierung]], [[Aspektorientierte Programmierung]] |
|||
[[Kategorie:Objektorientierte Programmierung]] |
Aktuelle Version vom 19. Februar 2005, 21:40 Uhr
Weiterleitung nach: