Heiner Kücker

Philosophien und Techniken

Home

Java-Seite

Alaska-XBase++-Seite

Projekte

Philosophien
Techniken


Konzepte

Sudoku

Kontakt /
Impressum


Links

SiteMap





Letzte Aktualisierung:
03.12.2001
Philosophien und Techniken

Programmiersprachen, Tools und Produkte wechseln. Aber Grundprinzipien und Lösungen der Informatik werden immer benötigt. Hier einige Beispiele für Lösungen aus meinen bisherigen Projekten und Individualprogrammierung in Festanstellung:


Seitenlayout

In einem Reportgenerator noch unter DOS habe ich Algorithmen zum Seitenlayout realisiert. Dazu gehören Vermeidung sogennanter Schusterjungen und Hurenkinder, Listengruppierung, verschachtelte Spalten, Einbindung anwenderdefinierter Header, Footer und Value´s (damals noch ohne Objektorientierung). Die selben Algorithmen habe ich im PDF-Generator im Projekt 2001 verwendet.


Datenmodellierung

Eine Problematik in fast allen Projekten ist die Abbildung komplexer Datenstrukturen auf Flat-Tables. Die Modellierung in Entity-Relationship-Modellierung ist dabei in Flat-Files, cursorbasierten Datenbanken oder mengenorientierten Datenbanken (SQL) identisch. Ich habe neben normalen relational verknüpften Applikationsdaten auch die Speicherung hierarchischer (Tree) und vernetzter Daten (Semantic-Network) in Flat-Tables realisiert. Die Abspeicherung in XML erleichtert zwar die Datenmodellierung, hat aber den Nachteil der Ecape-Sequenzierung und fileorientierung (wird aber durch native Speicherung wie in Tamino gelöst). Noch weiter gehen Datenbanken auf der Basis netzwerkförmiger Modelle oder objektorientierte Datenbanken.

Der Umgang (Manipulation, Navigation) mit n-dimensionalen Datenstrukturen wie Sets, Stacks, FIFOs, Listen oder Collections mit Gruppierung, Trennung oder Mischung sind mir, unabhängig von Programmiersprache oder Speichermedium (persistent/transient), vertraut.


String-Operationen, Parsing

In allen Technologien, egal ob zeichenorientiert, GUI-basiert oder weborientiert werden Funktionalitäten zur Textverarbeitung und Parsing benötigt.

Für das wissensbasierte Stücklistensystem habe ich einen Ausdrucksparser implementiert.

Ich beherrsche das Serialisieren und Deserialisieren von beliebigen, auch rekursiven Daten in Zeichen-Streams.

Für einen Quelltextbeautifier mußte ich den Quelltext unter Beachtung auskommentierter Teile parsen und dazu auf einem Stack die Programmstruktur vorhalten.

In meinem XML-Parser und meinem HTML-Parser (siehe meine Website) kamen die gleichen Prinzipien zum Einsatz.

Beim PDF-Export (Jahr 2000) habe ich zur Textformatierung in den Tabellenspalten die selben Algorithmen wie im DOS-Reportgenerator (1992-1994) benutzt.


Eventbasierte GUI-Programmierung

Ich habe bereits unter DOS (nativ, SAA-CUA Turbo-Vision) sowie unter Windows Benutzeroberflächen programmiert. Die Grundprinzipien wie modale Eventschleifen, Auflösung der Eventschleifen, kooperatives Multitasking, Einflechten von Applikationslogik über Callback-Handler und Display-Aktualisierung finden sich aktuell in Java-Swing und dem Model-View-Controller-Pattern wieder.


Objektorientiertes Design

In vielen Projekten wird der Fehler gemacht Vererbungstrukturen zur Ansammlung von Subroutinen zu nutzen, anstatt die Möglichkeit zur verallgemeinerten Verwendung durch Casting zur Elternklasse oder zum implemtierten Interface zu nutzen. Dadurch entstehen seltsam unflexible Architekturen. Neben der Nutzung von Tools wie Rational-Rose oder Together gehört zum guten objektorientierten Design auch Augenmaß und Erfahrung.

Debugging in objektorientierten Umgebungen

In Java ist es möglich Referenzen aus dem aktuellen Scope herauszureichen. Durch das fehlende Geheimhaltungsprinzip (in C++ durch automatisches Erstellen von Parameterkopien gewährleistet) sind schwer überschaubare Seiteneffekte möglich. Ich habe Erfahrung beim Debuggen solcher Fehler.


Debugging in verteilten Anwendungen

Die beim Debuggen verteilter Anwendungen notwendigen Schritte Codeinstrumentierung, Testlauf mit Logging und Logauswertung habe ich schon mit selbstgeschriebenen Lösungen realisiert. Die Anwendung entsprechender käuflicher Tools ist deshalb kein Problem für mich.


Performancetuning, Speicheroptimierung

Neben dem bekannten Beispiel der Verwendung von StringBuffer statt String gibt es noch viele Möglichkeiten der Performance- und Speicheroptimierung bei Entwurf und Implementierung von Applikationen. Ich beherrsche die notwendigen Lösungen wie Caching, Nutzung von Collection-Datentypen, Optimierung von Case/Switch-Verteilern, Nutzung von Zwischenergebnissen, optimale Code-Verteilung zwischen rufender und gerufener Routine usw.


Konkurrenz, Nebenläufigkeit, Fehlerbehandlung in lose gekoppelten heterogenen Systemen

In konkurrierenden, lose gekoppelten heterogenen Systemen sind besondere Maßnahmen zur Sicherung der Datenkonsistenz wie Transactionen, Locks oder Semaphore nötig. Weiterhin habe ich Erfahrung im Lösen von Konflikten in Multithreadingprogrammen. In lose gekoppelten heterogenen Systemen sind Maßnahmen zum Abfangen des Verbindungsabbruchs oder des Ausfalls der Partnerapplikation nötig. Dazu gehören auch Wiederholzähler, Timeouts, Cache-Replizierung, Update-Counter, Timestamps und die Konvertierung von Fehlercodes des Remote-Systems in das eigene Fehlerbehandlungs-/Exceptionsystem sowie die Differenzierung zwischen behandelbaren und fatalen Fehlern.


Persistenz, Wiederanlauf nach Programm/Verbindungsabbruch

Ich habe bereits Programme geschrieben, in denen bei Abbruch der Verarbeitungsstatus im Filesystem gespeichert wurde und Wiederanlaufen möglich war.


Designpattern

Designpattern erlauben es, Softwaresysteme unabhängig von der konkreten Implementierung zu entwerfen, zu strukturieren und bekannte Problemlösungen wiederzuverwenden. Ich bin mit den allgemein verbreiteten Pattern wie Model-View-Controller, Broker, Blackboard, Proxy, Faccade, Decoration, Observer usw vertraut.


Datenaustausch zwischen unterschiedlichen Dateiformaten

Trotz standardisierer Formate wie XML ist es heute immer noch nötig, unterschiedliche Datei-/Datenformate ineinander zu konvertieren. Entsprechende Konvertierungen zwischen Text-, Datenbank- und Excelformaten habe ich schon mehrfach realisiert.


Codingqualität

Zu gut zu wartendem Code gehören neben einer ausführlichen Inline-Dokumentation (javadoc), vor allem bezüglich Seiteneffekten und Fernwirkungen, deklarative Klassen-,Methoden-, Variablen- sowie Parameternamen, saubere Codestrukturierung, ausgewogene Auslagerung in Subroutinen, Parameterprüfung, Fehlerabfangung und Verzicht auf trickreiche Programmierung.


Projektverantwortung

Neben der Übernahme von Teilaufgaben in Projekten habe ich in Festanstellung die alleinige Verantwortung für komplette Applikationen mit allen Konsquenzen wie Bugfixing, Rollout, Anwenderbetreuung und Maintenance übernommen.