Fortgeschrittene Programmiertechniken (FOPT)

Belegbar Sommersemester, Wintersemester
ECTS-Punkte 10 (ca. 300 Stunden)
Fachgebiet Praktische Informatik

Ziel des Moduls

Dieses Modul vertieft und erweitert objektorientierte Programmierkenntnisse in Java vor allem in drei Bereichen: parallele Programmierung mit Java Threads, grafische Benutzeroberflächen mit JavaFX und verteilte Anwendungen mit Sockets, RMI, Servlets und Java Server Faces. Alle drei Bereiche stellen wesentliche und zentrale Lehrinhalte im Rahmen einer Informatik-Ausbildung dar und haben eine hohe Relevanz für die berufliche Praxis.

Im ersten Teil über parallele Programmierung lernen Sie, welche grundsätzlichen Probleme der Einsatz von Parallelität birgt und wie diese Probleme beherrscht werden können. Das Thema gewinnt für die berufliche Praxis durch die zunehmende Verbreitung von Multi-Core-Prozessoren stark an Relevanz. Im zweiten Teil über die Programmierung grafischer Benutzeroberflächen lernen Sie nicht nur, wie man Programme mit einer grafischen Benutzeroberfläche entwickelt, sondern vor allem auch, wie Architekturmuster zielgerichtet und Gewinn bringend eingesetzt werden können. Sie werden dadurch vom "Programmieren im Kleinen" zum "Programmieren im etwas Größeren" geführt und lernen insbesondere, wie man Programme strukturiert, was in der Praxis von großer Bedeutung ist. Im dritten Teil geht es um die Entwicklung verteilter Anwendungen, und zwar zum einen um eigenständige Anwendungen, die über Sockets oder Java RMI kommunizieren, und zum anderen um webbasierte Anwendungen, die auf Servlets und Java Server Faces basieren. Im Zeitalter des Internets sind die meisten Anwendungen heute in der Regel verteilt; die praktische Relevanz dieses Teils muss daher nicht weiter betont werden.

Die drei Themengebiete sind aber nicht nur isoliert jeweils für sich genommen bedeutsam, sie hängen in vielfältiger Weise miteinander zusammen: Bei der Entwicklung von Programmen mit grafischer Benutzeroberfläche ist der Einsatz von Parallelität notwendig, falls von den Benutzerinnen und Benutzern des Programms länger andauernde Aktionen angestoßen werden. Bei verteilten Anwendungen besitzt die Client-Seite in der Regel eine grafische Benutzeroberfläche, während auf der Server-Seite Parallelität im Spiel ist. Außerdem kann das Architekturmuster MVP, das typischerweise in Anwendungen mit einer grafischen Benutzeroberfläche Verwendung findet, auch sehr gut zur Strukturierung verteilter Anwendungen herangezogen werden.

Inhalt des Moduls

Parallele Programmierung 1 + 2:
Grundlegende und fortgeschrittene Synchronisationskonzepte in Java

Grafische Benutzeroberflächen 1 + 2:
Grundlagen und fortgeschrittene Programmierung grafischer Benutzeroberflächen in Java

Programmierung verteilter Anwendungen in Java 1 + 2:
Eigenständige und webbasierte Client-Server-Anwendungen

Inhalt im Detail

FOPT 1: Grundlegende Synchronisationskonzepte in Java

  • Einleitung: Parallelität, Nebenläufigkeit, Verteilung, Programm, Prozess und Threads
  • Erzeugung und Start von Java-Threads
  • Probleme beim Zugriff auf gemeinsam genutzte Objekte
  • Synchronized und volatile
  • Ende von Java-Threads
  • Wait und notify
  • NotifyAll

FOPT 2: Fortgeschrittene Synchronisationskonzepte in Java

  • Semaphore
  • Message Queues und Pipes      
  • Weitere Synchronisationsprobleme und deren Lösung
  • Die Concurrent-Klassenbibliothek
  • Das Fork-Join-Framework
  • Verklemmungen

FOPT 3: Grundlagen der Programmierung grafischer Benutzeroberflächen in Java

  • Einführung in UML
  • Einführung in die Programmierung grafischer Benutzeroberflächen mit JavaFX
  • Properties, Bindings und JavaFX-Collections
  • Elemente von JavaFX

FOPT 4: Fortgeschrittene Programmierung grafischer Benutzeroberflächen in Java

  • Das Architekturmuster MVP
  • Anwendungen mit mehreren Fenstern
  • Undo-Redo
  • Parallele Programmierung und grafische Benutzeroberflächen
  • Animationen

FOPT 5: Eigenständige Client-Server-Anwendungen

  • Socket-Schnittstelle
  • Kommunikation über UDP mit Java-Sockets
  • Multicast-Kommunikation mit Java-Sockets
  • Kommunikation über TCP mit Java-Sockets
  • Sequenzielle und parallele Server
  • Prinzip von RMI
  • Einführendes RMI-Beispiel
  • Parallelität bei RMI-Methodenaufrufen
  • Werteübergabe für Parameter und Rückgabewerte
  • Referenzübergabe für Parameter und Rückgabewerte
  • Transformation lokaler in verteilte Anwendungen

FOPT 6: Webbasierte Client-Server-Anwendungen

  • Das HTTP-Protokoll
  • Einführende Servlet-Beispiele
  • Parallelität bei Servlets
  • Sessions und Cookies
  • JSF (Java Server Faces)
Umfang des Moduls
  • 6 Kurseinheiten mit Übungsaufgaben
  • Lehrbuch
  • Studienbegleitendes Tutorium
  • Präsenzpraktikum (1 Woche)
Empfohlene Vorkenntnisse

Für das Studium des Moduls sind Kenntnisse in objektorientierter Programmierung mit Java sowie über Datenstrukturen und Algorithmen unabdingbar. Sie sollten mindestens das Modul "Einführung in die Programmierung" absolviert oder gleichwertige Kenntnisse anderweitig erworben haben.