Java

Eine Desktop-App mit JavaFX: das Mitfahrlabor für Fahrer*innen und Verwaltung

In zwölf Artikeln entsteht mit JavaFX eine Desktop-App für das Mitfahrlabor: Fahrer*innen verwalten ihre Angebote und Buchungen, die Verwaltung pflegt Haltepunkte und sieht die Auslastung. Die App spricht mit der REST-API des Spring-Boot-Backends, die Anmeldung läuft über Keycloak, und organisiert wird die Arbeit mit Kanban. Hier findest Du den Fahrplan, die Architektur, die Voraussetzungen und den Vergleich von Desktop- und Web-Oberflächen.

TypeScript für Java-Entwickler*innen: Typen, Union-Typen, Promises und Test-first mit Vitest

Wer Java kann, liest TypeScript schnell, stolpert aber an anderen Stellen: Typen gibt es nur beim Übersetzen, Objekte passen zu einem Interface allein über ihre Form, statt Enums nimmt man Union-Typen aus Textwerten, null und undefined muss man ausdrücklich zulassen, und asynchroner Code arbeitet mit Promises und async/await. Im Mitfahrlabor entstehen so die Typen für Fahrtangebote aus dem API-Vertrag und die Filterfunktion für die Suche, test-first im Zyklus Rot, Grün, Refactor mit Vitest.

Vom Vertrag zum Code: Schnittstellen mit dem OpenAPI Generator erzeugen

Der OpenAPI Generator macht aus dem API-Vertrag Java-Schnittstellen und Datenklassen. Du bindest ihn in Gradle oder Maven ein, lässt den Controller für die Haltepunkte die erzeugte Schnittstelle implementieren und siehst, wie die Regeln aus dem Vertrag als Bean Validation fehlerhafte Anfragen mit 400 abweisen. Weicht der Code vom Vertrag ab, merkt es der Compiler; ist der Vertrag fehlerhaft, bricht der Build ab.

Das Projekt anlegen: der erste Endpunkt für das Mitfahrlabor-Backend

Mit dem Spring Initializr entsteht das Projekt für das Mitfahrlabor-Backend. Du lernst die Projektstruktur, den Build mit Gradle oder Maven und die Startklasse kennen, schreibst den ersten REST-Controller für die Haltepunkte von Hand, rufst ihn mit dem Browser, einer .http-Datei oder der Shell auf und lässt den ersten Test laufen: einen Smoke-Test, der prüft, ob die Anwendung überhaupt startet.

Generische Klassen und Typparameter: einmal programmieren, für viele Typen nutzen

Generische Klassen wie List, Comparator oder Map tauchen in Aufgaben ständig auf, und manchmal wird gefragt, was das eigentlich ist. Der Artikel erklärt Typparameter und Typargument, zeigt, wie Du vorgegebene generische Klassen nutzt, eine eigene generische Klasse schreibst und einen Algorithmus von einer festen Klasse auf einen Typparameter T umstellst. Dazu kommen eingeschränkte Typparameter, generische Methoden, die UML-Notation für Templates, Unterschiede zwischen Java, C# und Python sowie typische Fehler.

Objektorientierung – das Konzept Polymorphie

Ein zentrales Konzept der objektorientierten Programmierung (OOP) ist die Polymorphie: die Vielgestalt von Objekten. Es ermöglicht über Instanztypen das Verhalten eines Objekts festzulegen, während der Typ der Referenz festlegt, welche Member erreichbar sind. Welche Implementierung läuft, entscheidet sich erst zur Laufzeit (späte Bindung). Der Artikel zeigt außerdem, wie Du Polymorphie im UML-Klassendiagramm modellierst, Fallunterscheidungen damit ersetzt und typische Fehler vermeidest.

Mustererkennung mit Regular Expressions (RegEx)

Die Mustererkennung Regulärer Ausdrücke (RegEx) ermöglicht Automatisierungen an Stellen, wo Handarbeit mühsam und langwierig ist. Telefonnummern in unterschiedlichen Formaten gespeichert? In einer CSV-Datei alle Spalten in verkehrter Reihenfolge? Wo stecken im Fließtext Geldbeträge mit Nachkommastellen? Derlei Aufgaben lassen sich mit RegEx lösen – besser, man kennt sie!

UML-Klassendiagramme mit PlantUML zeichnen

Das Tool PlantUML ist hervorragend geeignet, um Klassendiagramme direkt in Dokumentationen wie Readme.md-Dateien des Repositorys oder in Kommentaren zu integrieren, sie aus Programmcode direkt zu generieren und sie in einem Versionskontrollsystem zu versionieren. In diesem Infotext stelle ich vor, wie mit PlantUML die unterschiedlichen Notationsmittel von Klassendiagrammen genutzt werden können, mit welchen Einstellungen sie nahe am UML-Standard bleiben und wie sie sich aufhübschen lassen.

Abstrakte Klassen und Interfaces

Ein großes Problem bei Objekt- und Klassenbeziehung ist die starke Kopplung unterschiedlicher Klassen aneinander. Der Austausch von Verhalten ist so nur mit großem Aufwand möglich. Das Konzept der Abstraktion bietet hier in Form von abstrakten Klassen und Interfaces die Möglichkeit, Komponenten lose zu koppeln. Der Artikel zeigt, wie beide im UML-Klassendiagramm notiert werden, worin sie sich von konkreten Klassen unterscheiden und welche Fehler häufig passieren.

Klassenbeziehungen: Vererbung von Klassen in der UML

Zentrales Element der Code-Wiederverwendung in der objektorientierten Programmierung (OOP) ist die Vererbung. Am Beispiel von Bankkonten werden hier das OOP-Prinzip Vererbung und die darauf aufbauenden Konzepte (z. B. Überschreiben, Konstruktoraufruf der Oberklasse, protected) erklärt – und wie Du aus vorhandenen Klassen eine Oberklasse entwickelst und Vererbung im UML-Klassendiagramm richtig notierst.

UML-Klassendiagramm Objektbeziehungen – Assoziationen

Mit einzelnen Objekten erreicht man in der objektorientierten Programmierung (OOP) noch nicht viel. Erst im Zusammenspiel als Objektsammlungen und über Objektinteraktionen entwickelt die OOP ihre Stärken. Der folgende Text behandelt die Fragen: Welche Objektbeziehungen gibt es? Was unterscheidet Abhängigkeit, Assoziation, Aggregation und Komposition? Wie liest und begründet man Multiplizitäten, und woran erkennt man die passende Beziehung in Anforderungstexten, Quelltexten und Entwurfsmustern? Versuch der Klärung.

UML-Klassendiagramm: Sichtbarkeitsmodifikatoren

Kapselung ist ein Konzept der objektorientierten Programmierung (OOP), das verhindern soll, dass Anpassungen des Codes zu Inkonsistenzen führen. Der Zustand der Objekte soll nicht direkt änderbar sein, sondern nur über Methoden, die ggf. weitere Anpassungen vornehmen können: Getter und Setter. Der Artikel stellt die vier Sichtbarkeiten +, -, # und ~ vor und zeigt, wie Du Anforderungen wie „nur lesbar“ im Klassendiagramm umsetzt.

Annotations in Java

Java Annotationen – Welche geläufigen gibt es? Wozu werden sie genutzt? Wer kann sie auslesen? Welche Eigenschaften können sie haben? Wie kann ich eigene Erstellen? Was wirt mit _Retention_ und _Target_ festgelegt? Was ist die Reflection API und was hat sie mit Annotations zu tun?

  • 22. September 2022
  • Java

Ein REST-Backend mit Spring Boot: das Projekt Mitfahrlabor

In zwölf Artikeln entsteht mit Spring Boot das Backend der Mitfahr-App Mitfahrlabor: von den Anforderungen über den OpenAPI-Vertrag bis zur fertigen REST-API. Dabei durchläufst Du jede Testebene des V-Modells einmal, und eine CI-Pipeline wächst mit. Hier findest Du den Fahrplan, die Voraussetzungen und den Überblick über das, was am Ende entsteht.

Grundlagen für Java-Framework-Projekte installieren (Beispiel: VSCodium)

Vorbereiten der Entwicklungsumgebung, Plugins und ein Build-Tool (Maven/Gradle) für Java-Projekte mit Frameworks (z. B. ein SpringBoot-Projekt oder JavaFX): Installation eines aktuellen Java-LTS-JDK (und Eintrag im PATH), VSCodium als IDE mit den für Java nötigen Plugins, Installieren und Überprüfen der Gradle- bzw. Maven-Version sowie der Versionsverwaltung Git.