SEW Interfaces Seite 1
Warum Interfaces?
Was fällt auf?
Vergleiche Klasse
TrekkingBicycle und
LoadBicylce
(Lastenfahrrad)
(Cadence =>
Trittgeschwindigkeit)
SEW Interfaces Seite 2
Lösungsidee mit Interface
SEW Interfaces Seite 3
Warum Interfaces ?
Bisher haben wir gemeinsames Verhalten nur
über Vererbung definiert:
Klassen haben gemeinsame Basisklasse
Alle abgeleiteten Klassen müssen Verhalten
aufweisen
Beispiel: Eine abstrakte Methode Draw() wird in einer
übergeordneten (abstrakten) Klasse Shape definiert. Alle
abgeleiteten Klassen müssen Draw implementieren.
Andere Klassen können nicht verwendet
werden
Text kann gezeichnet werden, ist aber keine Figur (Shape).
Jede Klasse kann in Java nur eine Basisklasse
haben (Mehrfachvererbung in Java nicht möglich)
[Link]
SEW Interfaces Seite 4
Interfaces definieren Fähigkeiten
Gemeinsames Verhalten mittels Interfaces:
Definiert Fähigkeiten, die ein Objekt der
Klassen haben muss
Interfaces stellen „Verträge“ dar:
Neue Beziehung „is able to“
Beispiele: comparable, sortable, …
Ersatz für Mehrfachvererbung
=> Eine Klasse kann mehrere Interfaces
implementieren.
SEW Interfaces Seite 5
„Mehrfachvererbung“ mit Interfaces
Eine Klasse kann mehrere Interfaces implementieren.
Jedoch ist keine Vererbung von Funktionalität möglich,
da in Interfaces nur die Signatur (z.B. von Methoden)
festgelegt wird.
Die Methoden eines Interfaces sind alle abstract.
Die Implementierung muss in den einzelnen Klassen
durchgeführt werden.
=> Codeverdopplung wird dadurch nicht verhindert.
SEW Interfaces Seite 6
Interfaces (Schnittstellen)
Eine Schnittstelle ähnelt einer abstrakten Basisklasse: Jeder nicht
abstrakte Typ, der die Schnittstelle implementiert, muss alle ihre
Member (= Methodenköpfe) implementieren.
Eine Schnittstelle kann nicht direkt instanziiert werden.
Eine Variable davon kann aber schon angelegt werden!
Schnittstellen enthalten Methodenköpfe (=Methoden-Signaturen).
Schnittstellen enthalten keine Implementierung von Methoden.
Schnittstellen enthalten keine Konstruktoren.
Klassen und Strukturen können mehr als eine Schnittstelle
implementieren.
Eine Schnittstelle selbst kann von mehreren Schnittstellen „erben“
Die Schnittstelle erweitert die Verträge der Basisschnittstellen
Eine Schnittstelle kann keine Konstanten, Felder (Objekt- und
Klassenvariablen) enthalten.
Schnittstellenmember sind automatisch öffentlich und brauchen keinen
public Zugriffsmodifizierer.
SEW Interfaces Seite 7
Interfaces - Formal
Methoden eines Interfaces sind public abstract (automatisch)
Klassen und Strukturen dürfen mehrere Interfaces implementieren
(bei der Implementierung kann override angegeben werden.)
●
Auch leere Setter/Getter sind möglich
SEW Interfaces Seite 8
Entwurfsrichtlinien Interface vs. Abstrakte Klasse
Gilt die is_a-Beziehung => abstrakte Klasse
Paint bei Figuren, die zu zeichnen sind
Ist die Fähigkeit unabhängig von der Klassenhierarchie
sinnvoll => Interface
Vergleichbarkeit, Sortierbarkeit, Aufzählbarkeit, …
Ersatz für die Mehrfachvererbung
Beispiel Sportstudent
Student mit der Fähigkeit, Sport zu betreiben
Sportler, der auch studiert
SEW Interfaces Seite 9
Bestehende Interfaces:
Universell einsetzbare sortierte Liste
Liste von Datenelementen die vergleichbar sind
Contract für Vergleichbarkeit existiert für DotNet(C#) und
Java bereits
IComparable (C#) bzw. Comparable (Java ohne beginnenden „I“)
Liste ist „Nutzer“ des Vertrags => kann den Vergleich
zum Sortieren verwenden
SEW Interfaces Seite 10
Interface Comparable<T>
Ziel
Alle sortierbaren Objekte beliebiger Klassen sollen in einer
sortierten Liste verwaltbar sein
Sollen nicht von einer gemeinsamen Basisklasse abgeleitet
werden
[Link]
Interface Comparable definiert compareTo-Methode, die
zwei Objekte der betreffenden Klasse vergleicht
Generische Variante ist typsicher
Liefert Ergebnis
●
0 => gleich,
●
1 => this > other,
●
1 => other > this
Liste verlässt sich auf den Vertrag (Objekt ist vergleichbar)
SEW Interfaces Seite 11
Employee ist „comparable“
Wird nach Gehalt verglichen
SEW Interfaces Seite 12
Employee ist „comparable“
Wird nach Gehalt verglichen
SEW Interfaces Seite 13