Dieses Modul ist für den Java-Entwickler bestimmt. Es basiert auf dem Prinzip der Reflexion (Wikipedia). ReflectShell ermöglicht es, zur Laufzeit Klassen zu laden, Objekte davon zu instantiieren und diese durch Methodenaufrufe zu manipulieren.
Die ReflectShell hat einen einfachen Objekt-Pool, in dem die Objekte durch einen Namen zugreifbar sind. Die Aufruf-Argumente werden durch einen flexiblen
"Caster" erzeugt, der sowohl Namen aus dem Objekt-Pool parsert, als auch Literale von Strings, Java-Klassen und primitiven Typen zu "erschaffen".
Dabei benutzt er die Signaturen der möglichen Methoden, um den sinnvollsten Typ für die Argumente zu erzeugen.
Die grafische Java-Konsole Shell ist eine ideale Ergänzung dazu, kann aber auch einzeln benutzt werden.
die Anwendung
Die Einbindung in ein eigenes Projekt geschieht durch nur wenige Codezeilen, zb:
Die Reflect-Shell meldet sich dann automatisch bei System.in bzw out an.
Dann sollte der Entwickler dem Benutzer noch einige Objekte zum Spielen geben, z.B im Konstruktor des eigenen Malprogrammes:
Darauf findet man zur Laufzeit nach eingeben des "list"-Befehls in der Reflect-Shell die Objekte "painter" und "leinwand" vor, und der Spaß kann losgehen:
ReflectCommand>farbe=new java.awt.Color 10 30 40
Try to create class java.awt.Color
Das Ganze eignet sich um komplizierte Klassen vor der Einbundung im Projekt zu testen,
Laufzeit-Debugging durchzuführen und als primitive, aber automatisch generierte Scriptsprache für eigene Programme.
Hier kommt der Vorteil zu Geltung dass ausser der Anmeldung der Objekte keine Einrichtung erforderlich ist,
alle öffentlichen Methoden stehen automatisch als Script-Kommandos zur Verfügung.
ReflectShell als Programmierer-Benimmlehrer
Und damit sind wir beim allergrößten Vorteil: Erziehung. Der Entwickler, der RefelectShell verwendet,
bekommt sofort mit, ob seine Schnittstellen sinnvoll oder unpraktisch sind. Die ReflectShell erzeugt kostenlos
einen Maßstab für die Programmqualität... Das ist natürlich nur eine von vielen möglichen Ansichten, aber immerhin eine.
Ein modulares Programm "besten Stils" im Sinne von RefelctShell ist also jenes, das sich nicht nur mit seiner sichtbaren
Oberfläche dem Benutzer zusagt, sondern auch unter der Haube "benutzerfreundlich", also mit der Shell konfortabel
handhabbar ist. Das entspricht im besten Sinne der Forderung der OOP-Idee:
Transparente, klare Objektstrukturen, die ihre Schnittstellen zu ihrer Manipulation und Interaktion höflich anbieten.
Shell
Als Beilage empfehlen wir die Shell, eine grafische AWT-basierte Shell, die man einfach die Java-IO-konsole übenehmen
lässt. Die Shell unterstützt History und darauf basierend Eingabe-Vervollständigung, sowie einen Log-File
und ist für alle Java-Programme mit Nutzer-Interaktion über die Konsole praktisch. Sie kann durch nur
einen statischen Methoden-Aufruf an System.in / out angeschlossen werden, und übernimmt dann die Konsolen-Funktion:
ReflectShell kann auch alleinstehend ausprobiert werden, die Java-API bietet ja bereits eine breite Spielwiese zum Austoben. Die Startklasse ist dann org.dronus.reflector.ReflectShell
ACHTUNG: ReflectShell bzw. verwendende Programme müssen unter Windows mit java.exe, nicht mit javaw.exe gestartet werden, da sonst kein Konsolen-Fenster zur Verfügung steht!!