Die Studierenden erlernen die Architektur großer Software-Systeme selbstständig zu entwerfen, zu gestalten und zu bewerten. Dies umfasst, neben der logischen Organisation von Funktionalität und Abläufen, der konkreten Zerlegung in Komponenten und Konnektoren auch die Auswahl und Bewertung geeigneter Frameworks.
Im ersten Teil der Vorlesung werden die Konzepte der nebenläufigen Programmierung vorgestellt, aufgefrischt, vertieft und mit Hilfe der Möglichkeiten der Programmiersprache Java und des JDK praktisch in Übungen erprobt und angewendet. Der zweite Teil der Vorlesung bespricht verschiedene aktuelle praktische Anwendungsfelder der nebenläufigen Programmierung in Form kurzer, kompakter Einführungen. Darunter befinden sich Themen wie Betriebssysteme und Nebenläufigkeit am Beispiel Linux, mobile Plattformen und Nebenläufigkeit am Beispiel Android, Map/Reduce und das Hadoop Ökosystem, Web und Nebenläufigkeit, Nebenläufigkeit in Go und Rust, Reactive Extensions (Rx), Cloud, Cluster und verteilte Systeme, Microservice Architekturen, Deep Learning,
Die erfolgreiche Teilnahme an der Vorlesung wird durch die eigenständige Bearbeitung der Übungen dokumentiert und begutachtet. Im zweiten Teil der Vorlesung werden diverse aktuelle Quellen und Präsentationen vorgestellt und diskutiert.
Im ersten Teil der Vorlesung werden zentrale Modellierungstechniken für den Entwurf von Komponenten erarbeitet und bereits erlernte Entwurfsmethoden vertieft. Darauf aufbauend werden im zweiten Teil der Vorlesung gängige Architekturmuster aufgearbeitet. Die Studierenden lernen, deren Strukturen, Eigenschaften und Besonderheiten zu erkennen, zu verstehen und als Muster zu begreifen. Den Studierenden wird aufgezeigt, wie diese Architekturvorlagen Ansatzmöglichkeiten bieten, flexible und evolutionäre Systeme zu organisieren. Der dritte Teil der Vorlesung beschäftigt sich mit der Architektur auf Modulebene. Anhand verschiedener Szenarien und Beispiele wird der Einsatz von Patterns vorgestellt und im jeweiligen Kontext bewertet.
Seminaristischer Unterricht; Übungsblätter
In diesem Labor werden die Methoden und Kenntnisse der Vorlesung Software-Architekturen praktisch erprobt und umgesetzt. Dabei werden anhand eines größeren Software-Projekts der gesamte Entwicklungsprozess vom Entwurf über Realisierung bis hin zu Test und Qualitätssicherung im Team bearbeitet. Dabei sollen Entwurfstechniken und Architekturmuster der Vorlesung eingesetzt sowie Software-Entwicklungs-Frameworks bewertet und ausgewählt werden. Die Implementierung in einer vom Team gewählten Programmiersprache und deren Qualitätssicherung ist ebenfalls Teil des Projekts und erlaubt auch eine kritische Bewertung der eingesetzten Techniken. Schließlich soll durch die Erstellung eines Entwickler- und Benutzer-"Handbuchs" die Dokumentation größerer Projekte erlernt werden.