Objektorientiertes Design mit Java
- Richtiger Entwurf von Klassen, Konstruktoren und Methoden
- Korrekte Implementierung der Methoden `equals()`, `hashCode()` und `toString()`
- Objekt-Erzeugung mittels Factory- und Builder-Entwurfsmuster
- Verständnis der Objekt-Zerstörung
- Abwägung zwischen Vererbung und Delegation
- Unveränderbare Objekte (Immutability)
- Java-Programme als "Clean Code"
- Spezielle Entwurfsmuster für Java-Klassen
- Objekt-Duplikation (`Clonable`)
- Objekt-Serialisierung (`Serializable`)
- Interface-Erweiterungen (`default` / `static` / `private` Methoden)
Entwicklung und Nutzung von Annotationen
Datenbank-Nutzung mit Java
- Überblick über Persistenz-Frameworks
- Nutzung von Java Database Connectivity (JDBC)
- Einblick in Java Persistence (JPA)
Verarbeitung von Datenströmen
- Programmierung mit Streams und Lambda-Ausdrücken
- Verwendung von `Optional`
Nebenläufigkeit in Java
- Grundlagen der Thread-Programmierung und Nutzung des `ExecutorService`
- Parallele Programmierung mit dem Fork-/Join-Framework
- Parallele Stream-Verarbeitung
- Synchronisation von nebenläufigen Zugriffen
Meta-Programmierung mit Java Reflection
- Dynamische Programmierung durch Zugriff auf Java-Code zur Laufzeit
- Dynamische Proxies
Speicherverwaltung in Java
- Organisation des Speichers und Garbage Collection
- Arten von Objekt-Referenzen
Durch praktische Übungen werden die behandelten Themen eingeübt und vertieft. Zum Aufruf der implementierten Lösungen nutzen wir einfache JUnit-Tests, so dass die Teilnehmer auch gleich einen ersten Einblick in die Welt der Testautomatisierung erhalten. Je nach Interessen der Teilnehmer können die genannten Themen mehr oder weniger vertieft geschult werden. Individuelle Fragestellungen aus dem Projekt-Alltag können nach Möglichkeit aufgegriffen werden.