Heiner KückerJava-Seite |
|
Home Java-Seite Bit Packed Array ASM Improved heterogene Map, HMap Constraint Code Generator JSP WorkFlow PageFlow FlowControl Page Flow Engine Web Flow Engine Control_and_Command JSP_Spreadsheet Code-Generator für Option-Either-Stil in Java verbesserter Comparator Fluent-Interface Code-Generator auf Basis einer Grammatik Visitor mit Multidispatch for-Schleife mit yield-return Kognitions-Maschine semantisches Netz Domain Parser Codegenerator_für hierarchische Datenstrukturen Expression_Engine Formula_Parser Thread Preprocessor State Transition Engine AspectJ Java_Explorer DBF_Library Kalender_Applet SetGetGen BeanSetGet CheckPackage LineNumbers GradDms Excel-Export StringTokenizer JspDoc JspCheck JSP-Schulung Java Server Pages Struts Ascii-Tabellen- Layouter Ascii-Baum- Layouter Ascii-Art-Fluss- Diagramm- Parser AsciiArt AssignmentMatrix Layouter StringSerial Silbentrennung JDBC_Schlüssel- Generierung bidirektional/ unidirektional gelinkte Liste Java_Sitemap Generator XmlBuilder RangeMap StringFormatter VersionSafe XCopy JTextField CommandLine- ParamReader Bitmap-Grafik MultiMarkable- Buffered- InputStream JavaCache JdomUtil CollectionUtil XML Really Pull Parser Log-Filter Remote-Protokoll Sudoku-Generator Delegation statt Mehrfachvererbung Disjunct Interval Set WebCam_Demo Weiterentwicklung_Java Alaska-XBase++-Seite Projekte Philosophien Techniken Konzepte Sudoku Kontakt / Impressum Links SiteMap Letzte Aktualisierung: 28.07.2015 |
Hier finden Sie einige Konzepte und Java-Programmierbeispiele.
Bit Packed Array Speichereinsparung durch Speichern von ganzzahligen numerischen Werten mit einer Breite, die kein Vielfaches von 8 ist (zum Beispiel 7 Bit) in einem int-Array oder in einem long-Array, wobei die übrig gebliebenen Bits für den nächsten Wert benutzt werden. ASM Improved Verbessertes API der ASM-Bytecode-Lib zum Lesen von Generics-Informationen aus *.class-Dateien. Heterogene Map (HMap) Implementierung einer heterogenen Map (HMap) in Java. Constraint Code Generator Code-Generator für statische Constraint-Prüfung in Java. Der Code-Generator übersetzt Constraint-Expressions, die aus Prädikaten bestehen, in Java-Klassen. Control and Command Das Framework Control and Command ist eine Fluss-Steuerung für JSP- und Servlet-Applikationen. Es beruht auf einer eigenen Script- bzw. Steuersprache und besitzt Strukturen, Befehle, Unterprogramme, lokale Variable und Parameter (per value/reference). 'Spreadsheet' mit Control and Command Umsetzung des Struts-Beispiels aus dem Javamagazin 12.2004 'Spreadsheet mit Struts' mit CnC. Code-Generator für Option-Either-Stil in Java Nachbildung des Scala Option-Either-Stil in Java mit Hilfe eines einfachen Code-Generators. verbesserter Comparator Verbesserter Comparator durch reflection-freien Getter (Property-Accessor). Fluent Interface-Code-Generator auf Basis einer Grammatik Fluent Interface-Code-Generator für Java auf Basis einer Grammatik. Visitor mit Multidispatch Umsetzung Multidispatch, also nicht nur einfacher Double-Dispatch, durch eine Erweiterung des Visitor-Patterns. for-Schleife mit yield-return Realisierung yield-return (auch bekannt als Koroutine) mit Java ohne Threads oder Byte-Code-Manipulation. Kognitions-Maschine für ein semantisches Netz Dieses Programm/Bibliothek enthält ein semantisches Netz aus Aussagen und Regeln gegen welches Anfragen gestellt werden können. Die Aussagen, Regeln und Fragen können in annähernd natürlicher deutscher Sprache formuliert werden. Domain Parser Seit langem beschäftigt mich die Idee, dass eine spezielle Programiersprache die optimale Lösung zur Modellierung fachlicher Aspekte unter Trennung von der erforderlichen Infrastruktur ist. Solche eine spezielle Programmiersprache nennt man fachspezifische Sprache, domain specific language. Eine grosse Hürde ist dabei das Implementieren eines korrekten Parsers für die jeweilige Fachsprache. Wer wie ich nicht so gut mit javacc oder anderen grammatikbasierenden Werkzeugen zurechtkommt, kann gern meinen DomainParser benutzen. Er ist ein Teil des Fluss-Steuerungs-Frameworks CnC, in dem er zusammen mit dem unten beschriebenen ExpressionParser die Sriptsprache aus Fluss-Steuerdatei flow.cnc einliest. Codegenerator für hierarchische Datenstrukturen Ein Beispiel für den Einsatz des DomainParsers ist dieser Codegenerator für hierarchische Datenstrukturen. Expression Parser Ein Ausdrucksparser, der Ausdrücke wie 3 + 3 zur Laufzeit abarbeiten kann. Er beherrscht Variable, Arrays, Listen und Built-In-Funktionen. Ich habe ihn für die Integration in das CnC-Framework geschrieben. Thread Präprozessor Auf dieser Seite präsentiere ich einen Preprozessor, der eine Methode einer Java-Klasse so instrumentiert, dass sie in kleine Teilstücke zerlegt wird, die von dem mitgelieferten Programm (Thread-Scheduler) koordiniert abgearbeitet werden. Dabei wechselt der Thread-Scheduler jeweils zwischen mehreren bei ihm angemeldeten Klassen, so dass die verschiedenen Methoden quasi-parallel abarbeitet werden. Im Thread-Scheduler können unterschiedliche Strategien der Priorisierung implentiert werden. Durch die Umkehrung des Kontrollflusses des instrumentierten Codes, eigent sich der Preprozessor auch zur Aufbereitung von Source-Code als Ersatz zum Command-Pattern, zum Beispiel für Java-NIO oder für eventgesteuerte Applikationen, wie GUI- oder Web-Applikationen. State Transition Engine Ich habe eine kleine Zustands-Übergangs-Maschine, üblicherweise auch State Transition Engine genannt, geschrieben. Sicher hat man in jedem grösseren Projekt schon mal so was erstellt und wird es auch noch oft tun müssen. Ich habe mir gedacht, dass man dafür eine generische und vielleicht etwas geschicktere Lösung finden kann. Diese Lösung habe ich hier auf meine WebSite gepackt und jeder kann Sie gern verwenden. Die Zustands-Übergangs-Tabelle wird entsprechend aktueller Üblichkeiten in XML formuliert. Eigener Code in Bezug auf den Anwendungs-Kontext kann eingebracht werden. Es ist möglich Benutzer-Rollen mit einzubeziehen ohne dafür extra Code zu schreiben. Natürlich gibt es auch elementare Debugging-Features. AspectJ, aspektorientierte Programmierung in Java Lockere Folge von Codebeispielen von meiner AspectJ-Schulung bei der Java User Group Stuttgart, gehalten von dem AspectJ-Trainer Arno Schmidmeier, AspectSoft und eigenen ersten Gehversuchen mit der aspektorientierten Programmierung in Java. Java-Explorer Swing-Applikation, die dem Windows-Explorer nachempfunden ist. Ein Java-Frühwerk von mir zum Ausprobieren von JFrame, JTable, JTree und JButton im Kontext des Model-View-Controller-Pattern. DBF-Library Zugriff auf DBF-Dateien (dBase, Clipper, Alaska-XBase) aus Java. Natürlich inclusive Memo-Felder. War mal zur Umstellung einer CLIPPER-Applikation auf Java gedacht, habe ich aber nicht fertig gemacht. Kalender-Applet Einfaches Applet zur Anzeige eines Kalenders. SetGetGen Kleines Kommandozeilentool zum Erzeugen der Set- und Get-Methoden für Java-Beans. BeanSetGet Klasse zum Ansprechen der Set- und Get-Methoden beliebiger Java-Beans. CheckPackage Java-Programm zum Prüfen der package-Direktive in Java-Source-Files. Prüft die Übereinstimmung von Pfad der *.java-Datei und der package-Angabe. LineNumbers Java-Programm zum Einfügen und Aktualisieren von Zeilen-Nummern in Java-Source-Files. Dient als Hilfsprogramm zum Debugging per println-Anweisungen. GradDms-Umrechnung Konverter Dezimal-Grad zu Grad, Minuten und Sekunden und zurück. Excel-Export Klassen zum Daten-Export zu Excel über das SYLK-Format (Symbolik Link). StringTokenizer StringTokenizer mit Trenn-String statt Trenn-Zeichen oder Trenn-Zeichen-Liste. JspDoc Tool zum Erzeugen von javadoc-Dokumentationen für Java Server Pages. JspCheck Tool zum Prüfen der Syntax von in Java Server Pages eigelagerten Java-Code (Scriptlets). JSP-Schulung Präsentation zum Vortrag JSP und Servlets bei der Java-User-Group Dortmund. Tabellen-Layouter in ASCII-Art Klasse zum Layouten von Tabellen analog zu HTML (naja, wesentlich weniger Features) mit Bindestrichen und Plus-Zeichen für Logging und Debugging. Baum-Layouter in ASCII-Art Klasse zum Layouten von Bäumen mit Bindestrichen und Plus-Zeichen für Logging und Debuging. ASCII Art Fluss Diagramm Parser Klasse zum Parsen von Fluss-Diagrammen in Ascii-Art für Code-Generierung oder Meta-Programmierung. ASCII Art Verknüpfungs (Zuordnungs) Matrix Layouter Klasse zum Darstellen von Verknüpfungen von Tabellen-Zeilen (Positionen/Datensätze) in Ascii-Art. Daten-Serialisierung in Strings mit Header-Codierung Vielfach verbreitet sind Daten-Serialisierungen in Strings für Speicherung oder Übertragung mit reservierten Trenn- oder Ende-Zeichen. Diese haben den Nachteil, dass die/das reservierte Zeichen nicht ohne Probleme übertragen werden können. Solche Zeichen müssen speziell encoded werden und die Encoding-Sequenzen wiederum. Ich habe auch schon erlebt, dass es mit solchen Ansätzen Probleme gab, wenn Werte zwischendurch oder am Ende leer waren beziehungsweise wenn Null-Werte übertragen werden sollten. Bei einer bekannten Firma musste in einem Formular im jeweils letzten Feld ein Punkt eingetragen werden, damit das Protokoll funktionierte. Die kleine hier vorgestellte Library soll dieses Problem lösen. Spell Silbentrennung als Java Programm Einfaches Silbentrennprogramm. JDBC Schlüssel Generator / Primerary Key Generator. Erzeugen von eindeutigen Indentifizierungsnummern für Datensätze. Ein kleine Klasse zum Erzeugen eines eindeutigen Schlüssels für Datenbank-Records in Datenbanken, die über JDBC (Java Database Connectivity) angesprochen werden. Here is a small class to generate a unique key for an JDBC database record. Bidirektional verbundene Liste Einfach (unidirektional) oder doppelt (bidirektional) verbundenen Listen sind eine Grundstruktur der Informatik. Ich habe aber die Erfahrung gemacht, dass es immer wieder mühevoll ist, diese Listen-Strukturen vollständig und fehlerfrei zu implementieren. Deshalb stelle ich hier diese Java-Klasse zur freien Verwendung (Open Source) bereit. Es gibt Operationen zum Anhängen (add), Einfügen (add mit index), Löschen (remove) und Verschieben (hoch, runter, an den Anfang, an das Ende) (moveUp, moveDown, moveTop, moveBottom) der Einträge (entrys). Java Site Map Generator. Kleines Java Programm (Java Klasse) mit dem diese SiteMap erzeugt wurde. Java-Programm zum Erzeugen von XML, XmlBuilder Code zum Erzeugen von XML gibt es zu tausenden und sicher hat jeder sowas mal geschrieben. Meine Variante erlaubt das Einstellen des Layoutes des erzeugten XMLDocument. Für die XML-Elemente ist Zeilenumbruch (newline) und Einrückung (indentation) einstellbar. Encoding für Attribute und Elemente, das Schreiben von Processing-Instruktionen und XML-Kommentaren in das XML-Document ist (noch) nicht eingebaut. Java-Datenstruktur zum Zuordnen konkreter Werte zu einem Wertebereich (Nummernband) Die RangeMap ist eine performanceoptimierte Datenstruktur zum Zuordnen eines Wertes zu einem Band/Bereich von Werten (Nummernband). Dazu wird eine JDK-TreeMap durch spezielle Comparatoren und spezielle put und get-Methoden dekoriert, so dass beim Einfügen put eine Range (Wert von bis) und beim Abfragen get ein Point (konkreter Wert) benutzt wird. Die JDK-TreeMap sorgt für das Ausbalancieren des Baumes beim Einfügen und für das performante Suchen beim Abfragen der Range-Map. String-Formatierer-Klasse für mehrzeilige Textfelder unter Beachtung von Leerzeichen und vorhandenen Umbrüchen Der StringFormatter bricht den übergebenen Text so um (unterteilen in einzelne Zeilen), dass keine Zeile breiter als die per Parameter übergebene Maximalbreite in Zeichen ist. Unterschiedliche Zeichenbreiten, wie sie in Proportionalschriftarten auftauchen können, werden nicht beachtet. VersionSafe und XCopy Zwei Kommandozeilentools zum Sichern Ihres Source-Codes. JTextField Erweiterungen des JTextField um Eingabe Ziffern, Hex-Ziffern und Grossbuchstaben und mit Clipboard-Anbindung über Tasten und Maus (Kontextmenü). CommandLineParamReader Einfache Hilfsklasse zum Einlesen von Kommandozeilen-Parametern. Bitmap-Grafik Einfache Java-Klasse zum Erzeugen von Grafiken im Windows-Bitmap-Format mit 8 Bit oder 24 Bit pro Pixel. Multi Markable BufferedInputStream Der BufferedInputStream aus dem JDK erlaubt das Setzen einer Markierung an der aktuellen Position und das Zurückkehren zur markierten Position. Aber das ist nur mit einer Position gleichzeitig möglich. Die Java-Klasse MultiMarkableBufferedInputStream erlaubt das Setzen beliebig vieler Markierungen. JavaCache Eine Library bestehend aus zwei elementaren Cache-Klassen und fünf Dekorator-Klassen, durch die sich zusätzliche Eigenschaften zuschalten lassen. JdomUtil Eine Java-Library zum Parsen von XML mit Hilfe von JDOM und zum Umwandeln eines JDOM-XML-Documents in eine hierarchische Java-Collection aus Hashtable und Vector. CollectionUtil Eine Java-Library zum XPATH-ähnlichen Abfragen von Elementen in hierarchischen Java-Collections bestehend aus List's und Map's sowie von zwei Methoden zum formatierten Ausgeben von Java List's und Map's. XML Really Pull Parser Prototyp für einen XML-Parser, dessen Anwendugscode geanau die Struktur des XML-Dokumentes wiederspiegelt und keine Stack-Logik benötigt. Log-File-Filter Zwei kleine Tools für log4j Log Dateien. Ein Program dient zum zeilenweisen Filtern der Dateien. Mit dem zweiten Programm kann man eine Log-Datei nach den jeweiligen Threads in einzelne Dateien zerlegen. Remote-Protokoll Eine Library zum Serialisieren und Deserialisieren von Java-Objekten zur Verbindung von Client-Server Programmen über TCP/IP-Sockets mit Java-NIO. Jacobe Code Beautifier Java Code Beautifier. Hier mein bevorzugtes Format-File zum Download. Sudoku-Generator Programm zum Erzeugen von Sudoku-Rätseln in Java (Sudoku Generator). Delegation statt Mehrfachvererbung Programm-Beispiel zur Anwendung von Delegation statt Mehrfachvererbung am Beispiel einer Hierarchie von Lebewesen. Disjunct Interval Set Mengen-Klasse (set class) für nicht überlappende (disjunkte) Intervalle beliebiger Comparable-Objekte. WebCam Demo Demo eines WebCam-Applets mit den Fotos eines Ausflugs nach Bad Reichenhall. Weiterentwicklung Java Jede gute Lösung öffnet Perspektiven und Wünsche nach mehr. So ist auch Java sicher nicht am Ende der Entwicklung angekommen. Hier einige Konzepte zur Weiterentwicklung von Java. |