Vertiefung der Programmierung

Schnittstellen (Interfaces)

📢 Zwischenevalution

Motivation
- Abstrakte Klassen ermöglichen bereits Verallgemeinerungen
- werden aber i.d.R. immer
zur Spezialisierung verwendet
- werden aber i.d.R. immer
- Können wir noch allgemeiner werden,
indem wir fordern, dass Klassen "nur"
noch einen Vertrag erfüllen müssen?
Alle Bilder sind gemeinfrei
🤔
Analogie (Sockel Leuchtmittel)

Alle Bilder sind gemeinfrei


Analogie (Steckdose)

Schließe an was Du willst, Hauptsache es passt in die Steckdose.
Gerät implementiert Schnittstelle (Euro-)Steckdose
Alle Bilder sind gemeinfrei
Eigenschaften
- Interfaces definieren Vertrag, der erfüllt werden muss
➔ Paragraphen § = Methoden
- Klasse, die Interface implementiert, muss alle Methoden des Interfaces umsetzen
- im Gegensatz zu abstrakten Klassen sind innerhalb von Interfaces keine Attribute zulässig
(nur Konstanten, dazu später mehr)
§ §
Alle Bilder sind gemeinfrei
Definition: Interface
public interface IName {
public Rückgabetyp iFuncName(Datentyp param1, ...);
...
}
class A implements IName {
...
}
Wichtig: Hier müssen alle Methoden des Interfaces implementiert werden.
⌨️ Beispiel (Circle: IResizable, IGeometricObject)
public interface IGeometricObject {
double area();
double perimeter();
}
public interface IResizable {
void resize(double factor);
}
Kreis implementiert die Schnittstellen:
- IGeometricObject ➔ Fläche & Umfang messbar
- IResizable ➔ Vergrößern/verkleinern möglich
⌨️ Beispiel (Circle: IResizable, IGeometricObject)
public class Circle implements IResizable, IGeometricObject {
private double x, y;
private double radius;
public Circle(double x, double y, double radius) {
this.x = x;
this.y = y;
this.radius = radius;
}
public double area() {
return Math.PI * this.radius * this.radius;
}
public double perimeter() {
return 2.0 * Math.PI * this.radius;
}
public void resize(double factor) {
this.radius *= factor;
}
}
⌨️ Aufgabe: IMoveable
10 Min
Erweitern Sie das Beispiel um ein weiteres Interface IMoveable:
- Die Methode
move(x, y)soll dabei den Ursprung (der Form) auf die absolute Position (x, y) ändern.
Hinweis: Sie können den Code des vorher-gehenden Beispiels einfach mit
kopieren (Symbol: rechte, obere Ecke)

⌨️ Lösung: IMoveable
10 Min
Abstrakte Klassen vs. Schnittstellen
- Abstrakte Klassen sind i.d.R. ganz
oben in Verberbungshierarchien- Bsp. Spinnentiere, Formen
- Idee: Wir spezialisieren Typen

🕷️
- Schnittstellen können, müssen aber nicht, in Vererbungshierarchien eingebunden sein
- Mehrere Schnittstellen in einer Klasse
- Idee: Umsetzung von Eigenschaften
🐦⬛
Exkurs: Mehrfachvererbung

Alle Bilder sind gemeinfrei
Mehrfachvererbung ist in Java nicht möglich (in anderen Sprachen aber schon). Hier helfen (in Java) nur Interfaces.
Polymorphie (=Vielgestaltigkeit)
- Abstrakte Klassen, Vererbung und Schnittstellen erlauben flexible Zuweisungen von Objektinstanzen (Variablen)
- Beispiele:
🦂
Spinnentier spinne = new Skorpion();
🕷️
🐦⬛
Vogel vogel = new Emu();
🐧
🐦⬛🐦⬛🐦⬛
List<Vogel> voegel = List.of(new Emu(), new Pinguin(), new Emu());
Zusammenfassung
- Schnittstellen (Interfaces) sind noch allgemeiner
als abstrakte Klassen- Alle Interface-Methoden müssen implementiert werden ➔ § Vertrag
- Interfaces haben keine Attribute (nur Konstanten)
- Schnittstellen können Eigenschaften umsetzen
- Schnittstellen können zur Umsetzung von
Mehrfachvererbung "zweckentfremdet" werden - Polymorphie erlaubt flexiblen Einsatz


Alle Bilder sind gemeinfrei
Schnittstellen und Polymorphie
By blackbill
Schnittstellen und Polymorphie
- 230