Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Interfaces beziehungsweise Schnittstellen bezeichnen in der Computerwelt eine Menge verschiedener Dinge. Es gibt eine Benutzerschnittstelle, Softwareschnittstellen, Maschinenschnittstellen und mehr. Uns interessiert das Interface, wie es in der objekt-orientierten Programmierung genutzt wird. Schnittstellen dienen dort als zuverlässige Definition der verfügbaren Methoden, Eigenschaften oder Ereignisse für eine oder mehrere Klassen, welche diese tatsächlich definieren.
Auf diese Weise kann man sich beim Programmieren “gegen” eine Schnittstelle darauf verlassen, dass die Klasse, welche die Schnittstelle implementiert, auch die dort definierten Methoden, Eigenschaften, Ereignisse und Indexer enthält (Indexer haben Sie im Rahmen dieses Magazins noch nicht kennen gelernt, daher gehen wir in diesem Artikel nicht auf diese Elemente ein).
Wozu aber sollte man überhaupt verschiedene Klassen programmieren, die alle die gleichen Methoden, Eigenschaften oder Ereignisse enthalten und somit die Schnittstelle implementieren Ein Grund ist, dass Sie nur einmal lernen möchten, wie etwas funktioniert (die in der Schnittstelle definierten Elemente), die Implementierung jedoch je nach Anwendungsfall variieren kann.
Aus dem Leben gegriffen
Stellen Sie sich das Anziehen oder Lösen einer Schraube vor: Sie verwenden den für die Schraube passenden Schraubendreher, zum Beispiel einen Kreuzschlitz- oder einen Längsschlitz-Schraubendreher. Nun haben beide Schraubendreher vielleicht unterschiedliche Griffe, wodurch Sie jeweils anders greifen müssen. Nun stellen Sie sich einen Schraubendreher mit austauschbaren Bits vor: Die (Benutzer-)Schnittstelle ist der Griff, mit dem Sie den Schraubendreher nach links oder rechts drehen können, aber je nach Schraube verwenden Sie ein anderes Bit, um diese anzuziehen oder zu lösen. Sie kennen also die beiden Methoden der Schnittstelle, also nach links und nach rechts drehen, und können verschiedene Implementierungen nutzen – also etwa ein Bit für Kreuzschlitz- und ein anderes für Längsschlitz-Schrauben. Genau genommen ist auch die Schnittstelle zwischen dem Schraubendreher und dem Bit ein Interface – wir haben also gleich ein doppeltes Beispiel für ein Interface.
Beispiel: E-Mail versenden
Genau das Gleiche kann in der Software-Welt geschehen: Sie möchten beispielsweise eine E-Mail verschicken und dazu einem Objekt den Empfänger, den Betreff und den Inhalt übergeben (die Eigenschaften) und die Mail dann mit der Senden-Methode abschicken. Welcher Mechanismus dahinter steckt, soll für den Aufruf uninteressant sein – es könnte sich um die Programmierung von Outlook handeln, um die Mail mit diesem Programm zu versenden, aber vielleicht verwendet eine andere Implementierung nicht Outlook, sondern eine speziell für den Versand von E-Mails vorgesehene SMTP-Schnittstelle.
Beispiel: Daten abrufen
Oder, was in diesem Magazin auch bereits das eine oder andere Mal beschrieben wurde: Sie möchten ein Objekt mit Daten füllen, also etwa ein Kunden-Objekt mit den Eigenschaften KundeID, Vorname und Nachname. Wenn Sie mit der Programmierung beginnen, sollen die Daten aus einer Access-Datenbank kommen. Aber vielleicht wechseln Sie demnächst zu einer SQL Server-Datenbank Oder lesen die Daten aus einer XML-Datei ein Dann benötigen Sie in jedem Fall unterschiedliche Implementierungen der Methoden, da der Zugriff auf die Daten ja nicht auf die gleiche Art erfolgt.
Verschiedene Methoden oder verschiedene Implementierungen
Natürlich könnten Sie, um beim Beispiel des Abrufs von Daten aus verschiedenartigen Datenquellen zu bleiben, für jeden Zugriff eine andere Methode implementieren – also beispielsweise HoleKundeAccess, HoleKundeSQLServer oder HoleKundeXML. Dann müssten Sie allerdings auch irgendwo eine Bedingung unterbringen, die prüft, welche der Methoden zum Abrufen eines Kunden-Objekts aus einer der verschiedenen Datenquellen zum Einsatz kommen soll.