Grundlagen: Modularität & Entwurf

Dieser Abschnitt befasst sich mit den grundlegenden Prinzipien der Software-Architektur und des Designs. Es geht darum, wie Systeme in überschaubare Teile zerlegt und entworfen werden, um sie robuster und einfacher zu warten.

Modularity & Information Hiding

Modularität bedeutet, ein System in voneinander abhängige Teile zu unterteilen, um die Komplexität jedes Teils hinter einer Abstraktion zu verbergen.

Information Hiding ist das Prinzip, Designentscheidungen, die sich wahrscheinlich ändern werden, zu kapseln. Dies schützt andere Programmteile vor umfangreichen Änderungen.

Das Twin Peaks Modell

Requirements

Architecture

Iterativer Prozess

Das Modell zeigt die iterative und abhängige Entwicklung von Anforderungen und Architektur. Sie beeinflussen sich gegenseitig von grober bis detaillierter Ebene.

Agile Design: Die SOLID Prinzipien

S (SRP)

Ein Modul sollte nur einen Grund zur Änderung haben.

O (OCP)

Offen für Erweiterung, geschlossen für Modifikation.

L (LSP)

Abgeleitete Klassen müssen die Basisklassen ersetzen können.

I (ISP)

Clients sollen keine irrelevanten Interfaces implementieren müssen.

D (DIP)

Hoch-Level-Module sollen nicht von Low-Level-Modulen abhängen.

Architektur & Design-Muster

In diesem Abschnitt werden fortgeschrittenere Konzepte zur Strukturierung von Systemen betrachtet. Von der Visualisierung von Abhängigkeiten bis hin zu modernen Architekturansätzen wie Microservices.

Design Structure Matrix (DSM)

Eine DSM ist ein quadratisches Matrix-Diagramm, das die Abhängigkeiten zwischen Systemelementen wie Aufgaben, Komponenten oder Teams visualisiert. Klicken Sie auf eine Zelle, um die Abhängigkeit hervorzuheben.

Input/Output A B C D
A X
B X
C X X
D X

SOA vs. Microservices

Front-end
Services
Back-end

Service Oriented Architecture (SOA)

Services können auf verschiedenen Ebenen abstrahiert sein (Prozess, Basis), was die Wiederverwendbarkeit erhöht.

User Interface
Application
Domain

Microservices

Dienen als kleinste, unabhängig ausführbare Einheiten innerhalb eines geschäftlichen Domänenbereichs.

Spezielle Systemansätze

Software-Architektur und Design gehen über die modulare Strukturierung hinaus und umfassen auch Ansätze für ganze Produktlinien und Systeme, die auf maschinellem Lernen basieren.

Software Product Lines (SPL)

Eine SPL ist eine Familie von Software-Systemen, die einen gemeinsamen Kern von Assets teilen, um eine breite Palette von Produkten zu erzeugen.

Vorteile:

  • Erhöhte Produktivität & kürzere Markteinführungszeit
  • Niedrigere Entwicklungskosten
  • Verbesserte Qualität und Wartbarkeit

ML-Systeme im Software-Entwurf

Maschinelles Lernen eignet sich am besten für Probleme, die repetitiv sind, bei denen Muster gelernt werden müssen und Daten verfügbar sind.

Wann ML sinnvoll ist:

  • Wenn die Kosten falscher Vorhersagen gering sind.
  • Wenn Muster sich ständig ändern.
  • Wenn es um Skaleneffekte geht.

ML-Anwendungsfälle (2020)