Nenne die 3 konkreten Anwendungen, für die Herr Koch Interfaces seither in seinem Online-Shop nutzt.
1) Austauschbare Lösungen zur Speicherung von Kundendaten einsetzen. 2) Das Problem der in Java nicht erlaubten Mehrfachvererbung lösen. 3) Nach außen sichtbare Schnittstellen von Softwarekomponenten spezifizieren.
Warum war der wiederholte Austausch von Programmkomponenten für Herrn Koch besonders aufwändig, bevor er Interfaces einsetzte?
Ohne eine klar definierte, einheitliche Schnittstelle war die konkrete Implementierung (z. B. die Speichertechnologie) vermutlich eng mit dem restlichen Code verzahnt (enge Kopplung). Jede Änderung der Speichertechnologie erforderte dadurch Anpassungen an mehreren Stellen im Programm, statt dass einfach eine Implementierung gegen eine andere ausgetauscht werden konnte, ohne den umgebenden Code zu verändern – genau das Problem, das Interfaces lösen sollen.
Was verspricht sich Herr Koch grundsätzlich vom Einsatz von Interfaces im Hinblick auf zukünftige, noch unentschiedene Anforderungen der Auftraggeberin?
Er kann die konkrete Implementierung (z. B. welche Speichertechnologie tatsächlich verwendet wird) offen lassen bzw. später flexibel austauschen, solange sich alle Implementierungen an dieselbe, einmal definierte Schnittstelle halten. So kann die Auftraggeberin ihre Entscheidung auch später noch treffen oder ändern, ohne dass der übrige Code des Online-Shops jedes Mal angepasst werden muss.
Wer ist die "Gang of Four", und seit wann proklamiert sie den Einsatz von Interfaces? →
Eine Gruppe von vier Autoren, die viel zitierte Literatur zum Thema Softwaretechnik verfasst hat; sie proklamiert den Einsatz von Interfaces bereits seit 1995.
Was ist laut Gang of Four der bessere Programmierstil?
Gegen eine Schnittstelle zu programmieren statt gegen eine Implementierung.
Was bedeutet "Implementierung" in diesem Kontext?
Die technische Umsetzung (Programmierung) einer vorgegebenen Funktionalität; die Funktionalität kann z. B. durch eine Schnittstelle festgelegt werden.
Wofür sorgt der Einsatz von Interfaces grundlegend?
Für eine klare Trennung zwischen der Spezifikation und der Implementierung.
Was wird durch die Spezifikation festgelegt, und was durch die Implementierung?
Die Spezifikation legt fest, was bestimmte Klassen oder ganze Pakete können sollen; die Implementierung legt fest, wie diese Funktionalität technisch umgesetzt wird.
Was ermöglicht die Trennung von Spezifikation und Implementierung als ersten Vorteil?
Eine flexiblere Software-Architektur, da die Implementierung bei Bedarf ausgetauscht werden kann, ohne dass dadurch ein großer Anpassungsaufwand entsteht.
Erkläre das Druckertreiber-Beispiel für diesen Vorteil.
Die Schnittstelle für einen Druckertreiber ist klar definiert und bei allen Druckertreiber-Herstellern bekannt. Ein Benutzer kann sich beliebige Treiber installieren und dann bei Bedarf den geeigneten Drucker auswählen – sei es ein PDF-Drucker oder ein echter Drucker.
Worin liegt der zweite Vorteil der Trennung von Spezifikation und Implementierung?
Sie erhöht die Wiederverwendung von Klassen oder Paketen.
Wo kann eine Klasse eingesetzt werden, die eine bestimmte Schnittstelle anbietet (implementiert)?
Überall dort, wo diese Funktionalität benötigt wird.
Muss das Programm, in das eine solche Klasse eingebaut wird, dafür angepasst werden?
Nein, das Programm muss hierzu nicht angepasst werden.
Erkläre das Druckertreiber-Beispiel für diesen zweiten Vorteil.
Ein Hersteller muss nicht für jeden PC oder Laptop bzw. deren modellabhängige Ausstattung einen eigenen Druckertreiber programmieren. Sofern die Schnittstelle gleich bleibt – was stets für eine bestimmte Version eines Betriebssystems zutrifft – kann ein Treiber für alle PCs eingesetzt werden, auf denen diese Betriebssystemversion installiert ist.
Warum ist "gegen eine Schnittstelle programmieren" laut Gang of Four besser als "gegen eine Implementierung programmieren"?
Programmiert man gegen eine konkrete Implementierung, ist der eigene Code eng an genau diese eine technische Umsetzung gebunden – ändert sich die Implementierung oder wird sie ausgetauscht, muss auch der abhängige Code angepasst werden. Programmiert man dagegen gegen eine Schnittstelle (die nur festlegt, was möglich sein muss, nicht wie), bleibt der Code unabhängig von der konkreten technischen Umsetzung und funktioniert unverändert weiter, solange die Schnittstelle selbst gleich bleibt.
Wie hängen die beiden Vorteile "flexible Architektur" und "Wiederverwendung" inhaltlich zusammen?
Beide beruhen auf derselben Grundidee – der Trennung von Spezifikation (WAS) und Implementierung (WIE). Flexibilität bedeutet, dass man die Implementierung austauschen kann, ohne den Rest des Systems anzupassen (Änderungsrichtung: eine Schnittstelle, mehrere austauschbare Implementierungen). Wiederverwendung bedeutet, dass eine einzelne Implementierung überall dort eingesetzt werden kann, wo dieselbe Schnittstelle benötigt wird (Änderungsrichtung: eine Implementierung, mehrere Einsatzorte). Beide Effekte entstehen also direkt aus derselben klaren Trennung
Warum ist die Aussage "sofern die Schnittstelle gleich bleibt" beim Druckertreiber-Beispiel eine wichtige Einschränkung?
Die Vorteile von Interfaces (Austauschbarkeit, Wiederverwendung) gelten nur, solange sich die Schnittstelle selbst nicht ändert. Ändert sich die Schnittstelle (z. B. bei einer neuen Betriebssystemversion mit anderen Anforderungen an Treiber), müssen sowohl Implementierungen als auch der darauf zugreifende Code eventuell doch angepasst werden – die Stabilität der Schnittstelle ist also die Voraussetzung für die genannten Vorteile.
Übertrage das Druckertreiber-Prinzip auf Herrn Kochs Problem mit der Speicherung von Kundendaten (siehe Einführung von Lektion 9): Wie könnte eine Schnittstelle "KundenSpeicher" ihm beide Vorteile bringen?
Herr Koch definiert eine Schnittstelle "KundenSpeicher", die festlegt, WAS möglich sein muss (z. B. Kunde speichern, Kunde laden), aber nicht WIE das technisch geschieht. Flexibilität: Solange die Auftraggeberin sich nicht auf eine Technologie festlegt, kann Herr Koch verschiedene Implementierungen (z. B. Datenbank, Datei, Cloud-Speicher) bereitstellen und je nach Entscheidung austauschen, ohne den restlichen Online-Shop-Code anzupassen – dieser greift ja nur auf die Schnittstelle zu. Wiederverwendung: Eine einmal geschriebene Implementierung von "KundenSpeicher" (z. B. für eine Datenbank) könnte auch in anderen Programmkomponenten oder sogar anderen Projekten wiederverwendet werden, die dieselbe Schnittstelle benötigen.
Erklären Sie das Grundprinzip von Programmierschnittstellen (Interfaces) und ihre beiden zentralen Vorteile.
Bereits seit 1995 propagiert die "Gang of Four" den Grundsatz, gegen eine Schnittstelle statt gegen eine konkrete Implementierung zu programmieren. Interfaces sorgen dabei für eine klare Trennung zwischen Spezifikation (WAS eine Klasse oder ein Paket können soll) und Implementierung (WIE diese Funktionalität technisch umgesetzt wird). Diese Trennung bringt zwei zentrale Vorteile: Erstens ermöglicht sie eine flexiblere Software-Architektur, da die Implementierung bei Bedarf ausgetauscht werden kann, ohne großen Anpassungsaufwand im übrigen System zu verursachen (Beispiel: austauschbare Druckertreiber hinter einer einheitlichen Schnittstelle). Zweitens erhöht sie die Wiederverwendung von Klassen oder Paketen, da eine Klasse, die eine bestimmte Schnittstelle implementiert, überall dort eingesetzt werden kann, wo diese Funktionalität benötigt wird, ohne dass das aufnehmende Programm angepasst werden muss (Beispiel: ein Druckertreiber funktioniert auf allen PCs mit derselben Betriebssystemversion).
Zuletzt geändertvor 16 Tagen