Anwendungen von Reflection



  • Hab auch schon mal eine Implementierung des Factory-Patterns mittels Reflection gesehen. Das coole daran ist, dass sich die betreffenden Objekte automatisch in der Factory registrieren und die Factory dann automatisch das gewünschte Objekt zurückgibt. Ohne das man da irgendwie selbst Hand anlegen müsste.



  • Ein tolles Anwendungsbeispiel von Reflection ist noch das ActiveRecord Pattern von RoR (also Persistenz).
    Oder auch schön: Du lädst ne CSV-Datei in ein Objekt, und hast dann Variablen die genauso heißen wie deine Spalten.
    Auch schön sind Codeattribute (<blub> in .NET, @Attribute in Java) - wo wären wir ohne sie?



  • sachen wie active-record sind einfach nur reflection basierte ORM's



  • Headhunter schrieb:

    Oder auch schön: Du lädst ne CSV-Datei in ein Objekt, und hast dann Variablen die genauso heißen wie deine Spalten.

    Nicht nur CSV-Dateien lassen sich damit schön parsen, auch z.B. XML-Dateien. Commons Digester zeigt es vor.

    Digester digester = new Digester(/* ... */);
    digester.addObjectCreate("config/service", ServiceBean.class);
    digester.addBeanPropertySetter("config/service/name");
    digester.addBeanPropertySetter("config/service/port");
    digester.addBeanPropertySetter("config/service/authorization-required", "authorizationRequired");
    digester.addSetNext("config/service", "addService", ServiceBean.class.getName());
    
    digester.push(serviceCollection);
    digester.parse(inputStream);
    


  • Danke für die aktive Beteiligung 😉

    Das Parsen von Dateien jeglicher Art, die in irgendeiner Art ein Objekt abbilden, meinte ich mit "Persistenz". Die anderen waren mir noch nicht bekannt.

    Falls ihr noch mehr habt, ich bin interessiert 🙂



  • Naja, überall wo man mit Objekten hantiert, dessen Eigenschaften man zur Compile-Zeit nicht kennt. Ich könnte mir vorstellen, das man damit zB ziemlich praktischen GUI-Code schreiben kann, der sich eben zur Laufzeit über Objekte legen kann.

    <lisper arroganz>
    Aber Reflections sind ja nur ein billiger Notbehelf für Leute die kein voll programmierbares MOP haben :p
    </lister arroganz>



  • rüdiger schrieb:

    Ich könnte mir vorstellen, das man damit zB ziemlich praktischen GUI-Code schreiben kann, der sich eben zur Laufzeit über Objekte legen kann.

    Ja; z.B. die VCL macht das so.

    rüdiger schrieb:

    <lisper arroganz>
    Aber Reflections sind ja nur ein billiger Notbehelf für Leute die kein voll programmierbares MOP haben :p
    </lister arroganz>

    (Marketing||Message||Meta||Methaphor||Monitoring)-oriented Programming? Metaobject Protocol? In welcher Sprache hat man das denn (solange man keinen speziellen Präprozessor verwendet)?



  • MOP := Metaobject Protocol

    Common Lisp hat zB ein voll programmierbaren MOP. Bei anderen Programmiersprachen bin ich mir nicht so sicher. Aber ich glaube Objective C oder Smalltalk könnten so etwas auch bieten



  • gibts irgendwo eine definition was ein voll programmierbares mop leisten muss, um als solches zu gelten



  • Hallo

    rüdiger schrieb:

    ich glaube Objective C oder Smalltalk könnten so etwas auch bieten

    Mit Smalltalk wurde Metaprogrammierung sozusagen erfunden.
    Dort ist alles ein Objekt, natürlich auch Klassen, die nämlich Instanzen von
    Metaklassen sind (in Python ähnlich, aber nicht so weitreichend introspektiv).

    Da die gesamte Sprache (bis auf einige Primitives) einschließlich Interpreter und VM in Smalltalk selbst definiert und damit Smalltalk praktisch sein eigenes Metasystem ist, kann man nahezu sämtliche Aspekte des Objektmodells ändern, ohne die hochsprachliche Ebene verlassen zu müssen.

    Gruß


Anmelden zum Antworten