Mit welchem Schlüsselwort werden Schnittstellen in Java definiert?
interface
Was definiert der Begriff "interface"?
Eine Menge von Methoden, die von Klassen implementiert werden können.
Worin ähnelt die Syntax eines Interfaces der einer Klasse, und was ist der zentrale Unterschied?
Sie ähnelt sehr der Klassensyntax; der Unterschied ist, dass alle Methoden abstrakt sind.
Woraus bestehen die Methoden in einem Interface, und was fehlt ihnen?
Sie bestehen lediglich aus der Signatur und haben keinen durch geschweifte Klammern eingeschlossenen Rumpf.
Was kann man dadurch spezifizieren, ohne das "Wie?" vorwegzunehmen?
Was eine implementierende Klasse können muss.
Was bedeutet, dass Interfaces "grundsätzlich zustandslos" sein müssen?
Es ist bis auf Konstanten nicht erlaubt, Attribute in einem Interface zu definieren.
Mit welchem Schlüsselwort zeigt eine Klasse an, welche Schnittstelle(n) sie realisiert?
implements
Wozu verpflichtet sich eine Klasse durch implements?
Für jede Methode der implementierten Schnittstelle(n) eine Implementierung anzubieten.
Mit welchem Stereotyp werden Interfaces in UML von Klassen unterschieden?
<<interface>>
Wie wird notiert, dass eine implementierende Klasse ein Interface realisiert (Pfeilart)?
Ähnlich zur Vererbungs-Notation mit einer geschlossenen Pfeilspitze zur Schnittstelle, jedoch im Gegensatz zur Vererbung gestrichelt dargestellt.
Was ist eine use-Assoziation, und wie wird sie dargestellt?
Sie kennzeichnet, dass eine Klasse eine Schnittstelle verwendet (d. h. mindestens eine Methode der Schnittstelle aufruft); dargestellt durch einen gestrichelten Pfeil mit offener Spitze und dem Stereotyp <<use>>.
<<use>>
Wie löst Herr Koch das Problem des flexibel austauschbaren Kundenspeichers strukturell?
Zwischen der Kundenverwaltung und den einzelnen Alternativen zur dauerhaften Speicherung wird ein Interface eingeschoben (z. B. IKundenSpeicher).
IKundenSpeicher
Was definiert das Interface IKundenSpeicher?
Eine Reihe von Methoden, die unabhängig von der konkreten Implementierung für die dauerhafte Speicherung von Kundendaten notwendig sind.
Welche Rolle spielt die Kundenverwaltung bezüglich des Interfaces?
Die Rolle der verwendenden Klasse (use-Assoziation) – sie benutzt das Interface in einer ihrer Methoden.
Welche Rolle spielen DateiKundenSpeicher und DBKundenSpeicher?
DateiKundenSpeicher
DBKundenSpeicher
Die Rolle der implementierenden Klassen – sie bieten je eine Realisierung zu jeder Methode, die in IKundenSpeichervereinbart wurde.
Welche zwei Vorteile ergeben sich dadurch konkret für den Online-Shop?
Flexibilität (die Methoden zur Speicherung können ohne großen Aufwand ausgetauscht werden) und Wiederverwendbarkeit (die Implementierung kann an jeder weiteren Programmstelle eingesetzt werden, an der das Interface benötigt wird).
Können Interfaces von anderen Interfaces erben?
Ja
Wozu dient die Vererbung zwischen Interfaces?
Um Gemeinsamkeiten von Schnittstellen zusammenzufassen und sie je nach Verwendungszweck ohne großen Wartungsaufwand zu erweitern.
Unterstützt Java bei Interfaces Mehrfachvererbung?
Ja – im Gegensatz zu Klassen können Interfaces von mehr als einem Interface erben.
Welches Schlüsselwort wird auch bei der Vererbung zwischen Interfaces verwendet?
extends (dasselbe Schlüsselwort wie bei der Klassenvererbung).
extends
Welche Gemeinsamkeit haben Interfaces und abstrakte Klassen?
Beide können mithilfe abstrakter Methoden klassenübergreifende Funktionalitäten festlegen.
Welche Rolle spielt die Vererbungshierarchie bei Interfaces im Gegensatz zu abstrakten Klassen?
Bei Interfaces spielt die Vererbungshierarchie keine Rolle – auch "unverwandte" Klassen können demselben Interface zugeordnet werden.
Wie viele Interfaces kann eine einzelne Klasse implementieren?
Mehr als eines (eine Klasse kann mehrere Interfaces implementieren).
Was ist bei Interfaces im Gegensatz zu abstrakten Klassen bezüglich Methoden verboten?
Implementierte und abstrakte Methoden zu vermischen (in Interfaces müssen grundsätzlich alle Methoden abstrakt sein).
Was verhindert das Verbot, Attribute in Interfaces zu definieren?
Dass zustandsbehaftete Interfaces programmiert werden.
Warum ist es entscheidend, dass Interfaces zustandslos sind (bis auf Konstanten keine Attribute)?
Ein Interface soll ausschließlich die Spezifikation (das WAS) festlegen, nicht die konkrete technische Umsetzung (das WIE) – dazu gehört auch, keinen eigenen Datenzustand zu besitzen. Würde ein Interface Attribute mit Werten enthalten, würde es bereits Teile der Implementierung vorwegnehmen und wäre nicht mehr rein auf die Spezifikation beschränkt, was die klare Trennung zwischen Spezifikation und Implementierung aufweichen würde.
Warum kann eine Klasse mehrere Interfaces implementieren, aber (in Java) nur von einer einzigen Klasse erben?
Bei der Klassenvererbung besteht das Risiko von Namenskonflikten bei geerbten Attributen und Methoden aus mehreren Oberklassen (siehe 5.1) – deshalb erlaubt Java hier nur Einfachvererbung. Interfaces enthalten dagegen keine Implementierung und keine Attribute, sondern nur Methodensignaturen ohne Zustand; das Risiko widersprüchlicher, konkreter Implementierungen entfällt dadurch weitgehend, weshalb Java hier sowohl Mehrfachvererbung zwischen Interfaces als auch das Implementieren mehrerer Interfaces durch eine Klasse erlaubt.
Warum spielt bei Interfaces die Vererbungshierarchie keine Rolle, während sie bei abstrakten Klassen zentral ist?
Eine abstrakte Klasse ist über eine "ist ein/e"-Beziehung mit ihren Unterklassen fachlich verbunden (z. B. jedes Buch ist ein Artikel) – die Klassen müssen also tatsächlich verwandt sein. Ein Interface beschreibt dagegen nur eine bestimmte Fähigkeit oder Funktionalität (z. B. "kann Kundendaten speichern"), die völlig unterschiedliche, fachlich nicht verwandte Klassen gemeinsam besitzen können, ohne dass zwischen ihnen eine Vererbungsbeziehung bestehen muss.
Wie löst das Konzept von Interfaces das ursprüngliche Problem von Herrn Koch aus der Einführung zu Lektion 9 – den wiederholten Austausch der Speichertechnologie?
Da die Kundenverwaltung nur gegen das Interface IKundenSpeicher programmiert (statt gegen eine konkrete Speicherimplementierung), kann Herr Koch beliebige Implementierungen (z. B. DateiKundenSpeicher oder DBKundenSpeicher) austauschen, sobald sich die Auftraggeberin doch für eine andere Technologie entscheidet – solange die neue Implementierung ebenfalls IKundenSpeicher implementiert, muss die Kundenverwaltung selbst nicht verändert werden.
Erkläre am Beispiel von IKundenSpeicher, DateiKundenSpeicher und DBKundenSpeicher, wie Definition, Implementierung und Verwendung eines Interfaces in Java zusammenspielen.
Das Interface IKundenSpeicher wird mit interface IKundenSpeicher {...} definiert und enthält nur Methodensignaturen ohne Rumpf (z. B. für Speichern und Laden von Kundendaten), keine Attribute. Die Klassen DateiKundenSpeicher und DBKundenSpeicher deklarieren jeweils class DateiKundenSpeicher implements IKundenSpeicher {...} bzw. entsprechend für die Datenbank-Variante und müssen dadurch für jede im Interface vereinbarte Methode eine eigene, konkrete Implementierung liefern. Die Kundenverwaltung greift in ihren Methoden nur auf den Typ IKundenSpeicher zu (use-Assoziation) und kann so wahlweise mit DateiKundenSpeicher oder DBKundenSpeicher arbeiten, ohne selbst angepasst werden zu müssen.
interface IKundenSpeicher {...}
class DateiKundenSpeicher implements IKundenSpeicher {...}
Erklären Sie, wie Interfaces in Java definiert und implementiert werden, ihre Notation in UML sowie ihre Abgrenzung zu abstrakten Klassen.
Interfaces werden in Java mit dem Schlüsselwort interface definiert; ihre Syntax ähnelt der einer Klasse, jedoch bestehen alle Methoden nur aus einer Signatur ohne Methodenrumpf, und bis auf Konstanten dürfen keine Attribute definiert werden (Zustandslosigkeit). Eine Klasse zeigt mit implements an, welche(s) Interface(s) sie realisiert, und verpflichtet sich damit, jede Methode des Interfaces zu implementieren. In UML werden Interfaces mit dem Stereotyp <<interface>> gekennzeichnet; die Realisierung durch eine Klasse wird wie Vererbung mit geschlossener Pfeilspitze, aber gestrichelter Linie dargestellt, die Verwendung eines Interfaces durch eine Klasse mit einem gestrichelten Pfeil mit offener Spitze (<<use>>). Interfaces können – im Gegensatz zu Klassen – von mehreren anderen Interfaces erben (Mehrfachvererbung mit extends), und eine Klasse kann mehrere Interfaces implementieren. Im Vergleich zu abstrakten Klassen (Lektion 6) spielt bei Interfaces die Vererbungshierarchie keine Rolle, sodass auch fachlich nicht verwandte Klassen dasselbe Interface implementieren können; zudem ist es bei Interfaces verboten, implementierte und abstrakte Methoden zu vermischen.
Zuletzt geändertvor 16 Tagen