Schnittstelle (objektorientierte Programmierung)

Schnittstelle (objektorientierte Programmierung)

In der objektorientierten Programmierung (OOP) vereinbaren Schnittstellen (engl. Interface) gemeinsame Signaturen von Methoden oder Funktionen, welche in unterschiedlichen Klassen implementiert werden.

Die Schnittstelle gibt an, welche Methoden vorhanden sind (bzw. vorhanden sein müssen). Zusätzlich zu dieser syntaktischen Definition sollte stets ein so genannter Kontrakt definiert werden, über den die Bedeutung (im Sinne von Vorbedingungen und Nachbedingungen) der verschiedenen Methoden festgelegt wird – also deren Semantik. Der Kontrakt wird meist nur informell in der Dokumentation oder einer externen Spezifikation der Schnittstelle festgelegt, doch stehen auch formelle Spezifikationssprachen wie z. B. die OCL zur Verfügung. Einige Programmiersprachen wie z. B. Eiffel bieten auch unmittelbar syntaktische Möglichkeiten zur Festlegung von Verträgen.

Schnittstellen repräsentieren eine Garantie bezüglich der in einer Klasse vorhandenen Methoden. Sie geben an, dass alle Objekte, die diese Schnittstelle besitzen, gleich behandelt werden können.

In einigen Programmiersprachen, die keine Mehrfachvererbung unterstützen (wie z. B. Java), können Schnittstellen verwendet werden, um Kompatibilitäten zwischen Klassen zu definieren, die nicht voneinander erben: Die Schnittstellenbeziehungen sind nicht an den strengen Klassenbaum gebunden. Dazu werden Schnittstellendeklarationen häufig explizit als solche markiert (in Java mit dem Schlüsselwort interface). Als Ersatz für Mehrfachvererbung taugen Schnittstellen allerdings nicht, da es sich nicht um einen Vererbungsmechanismus im eigentlichen Sinne handelt.

Andere Sprachen (meist solche, die Mehrfachvererbung unterstützen, wie C++ ) kennen zwar das Konzept von Schnittstellen, behandeln diese aber wie gewöhnliche Klassen. Man spricht dann auch von abstrakten Klassen. Manchmal wird auch eine eigene Sprache (eine sogenannte Interface Definition Language, IDL) zur Deklaration der Schnittstelle verwendet – meist ist das bei Middleware-Systemen wie CORBA oder DCOM der Fall. Objektbasierte Sprachen ohne strenge Typisierung (vor allem Skriptsprachen wie Python oder JavaScript) kennen meist keine Schnittstellen.

Inhaltsverzeichnis

Klassifikation von Schnittstellen

Schnittstellen lassen sich entlang zweier unabhängiger Kriterien klassifizieren: Allgemeinheit und Nutzen. Bezüglich der Allgemeinheit wird zwischen allgemeinen und kontextspezifischen Interfaces unterschieden, bezüglich des Nutzens zwischen anbietenden und ermöglichenden Interfaces.

  • Allgemeine Interfaces enthalten die gesamte öffentliche Schnittstelle des Aufgerufenen. Sie werden verwendet, um die verwendete Schnittstellen-Spezifikation von ihrer Implementierung zu separieren.
  • Kontextspezifische Interfaces decken nicht die gesamte öffentliche Schnittstelle einer Klasse ab, sondern nur spezielle Aspekte dieser Klasse. Sie ermöglichen es, Objekte einer Klasse in besonderen Rollen zu verwenden. Beispielsweise kann ein Puffer lesend oder schreibend genutzt werden. Für jeden dieser Zugriffs-"Aspekte" kann ein separates Interface existieren.
  • Anbietende Interfaces liegen dann vor, wenn der Aufrufer sich über das Interface an den Aufgerufenen wendet. Dies ist der typische und häufigste Fall bei der Verwendung von Interfaces.
  • Ermöglichende Interfaces liegen vor, wenn umgekehrt der Aufgerufene oder gar eine dritte Komponente der eigentliche Nutznießer des Interfaces ist. So kann beispielsweise ein Objekt (bzw. seine Klasse) das Interface Printable implementieren. Ein solches Objekt kann dann einem Printer zum Ausdruck übergeben werden. Offensichtlich erbringt das Objekt, welches das Interface erfüllt, hier nicht die Dienstleistung, vielmehr ermöglicht es sie nur.

Ein Spezialfall sind sogenannte Markierungsschnittstellen, die keine Methoden verlangen, und über Introspektions-Mechanismen zur Laufzeit ausgewertet werden.

Beispiel für eine Schnittstelle

Existiert beispielsweise eine Schnittstelle Konto mit der Methode abbuchen(), müssen alle Klassen, die diese Schnittstelle implementieren, über eine Methode abbuchen verfügen. Weiteres Beispiel: Eine Anzahl an Klassen mit den Namen SparKonto, GiroKonto und DepotKonto implementieren die Schnittstelle Konto. Die Schnittstelle hat eine Methode getKontostand, also müssen alle Klassen mit der Schnittstelle die Methode getKontostand bereitstellen.

Werden in einer Klasse mehrere Schnittstellen implementiert und besitzen diese Methoden gleiche Namen und gleiche Signatur (Parametertyp und Rückgabetyp), so muss der Zugriff und die Implementierung in einer Klasse mit einem qualifizierten Namen erfolgen, d. h. durch Voranstellen das Paketnamens (Java) oder des Namensraumes (.NET). Ein Beispiel in Java:

public interface Konto {
    int getKontostand(); // abstrakte Signatur-Definition
}
 
public class SparKonto implements Konto {
    private int kontostand;
 
    // Implementierung der durch Konto definierten Methode
    public int getKontostand() {
        return kontostand;
    }
 
    ...
}

Java hat den Vorteil gegenüber .NET-Sprachen, dass eine Klasse, die ein Interface implementiert, nicht explizit definiert werden muss. Das folgende Beispiel definiert eine sogenannte anonyme innere Klasse innerhalb einer Methode.

public Konto erstelleKonto() {
    Konto k = new Konto() {
        public int getKontostand() {
            return 0;
        }
    };
    return k;
}

Namenskonventionen

In einigen Programmiersprachen ist es üblich, Schnittstellen durch besondere Präfixe oder Suffixe erkennbar zu machen. So wird häufig ein „I“ (für Interface) vorangestellt oder ein „IF“ angehängt. Die oben angeführte Beispielschnittstelle Konto hieße dann IKonto oder KontoIF.

Vorteile
  • Schnittstellen sind am Namen als solche erkennbar.
  • Implementierende Klassen können einen einfacheren Namen haben.
Nachteile
  • Schnittstellen können als das wesentliche Element der Programmierung betrachtet werden. Daher ist es sinnvoller, die Namen der Implementierungen mit Präfixen oder Suffixen zu ergänzen.
  • Schnittstellen sind besonders dann sinnvoll, wenn es mehr als eine Implementierung gibt, sodass die implementierenden Klassen ohnehin mit Präfixen und Suffixen benannt werden.

Konstanten in Java

In Java ist es ferner möglich, Konstanten innerhalb einer Schnittstellendefinition zu deklarieren. Allen implementierenden Klassen stehen dann diese Konstanten zur Verfügung.

Siehe auch


Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Objektorientierte Programmierung — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee dabei ist, Daten und Funktionen, die auf diese Daten angewandt werden können, möglichst eng in einem… …   Deutsch Wikipedia

  • Vererbung (objektorientierte Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Methode (objektorientierte Programmierung) — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden… …   Deutsch Wikipedia

  • Klasse (objektorientierte Programmierung) — Klasse ist in der Objektorientierung ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und des gemeinsamen Verhaltens von realen Objekten (Klassifizierung) im Softwaredesign: reale Objekte werden auf die für die Software… …   Deutsch Wikipedia

  • Kapselung (objektorientierte Programmierung) — Die Objektorientierung, kurz OO, ist ein Ansatz zur Entwicklung von Software, der darauf beruht, die zu verarbeitenden Daten anhand ihrer Eigenschaften und der möglichen Operationen zu klassifizieren. Im Vergleich zu Ansätzen, bei denen… …   Deutsch Wikipedia

  • Objektorientierte Programmiersprache — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden… …   Deutsch Wikipedia

  • Objektorientierte Softwareentwicklung — Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden… …   Deutsch Wikipedia

  • Schnittstelle (Programmierung) — Eine Schnittstelle (englisch interface) dient in der objektorientierten Programmierung der Vereinbarung gemeinsamer Signaturen von Methoden, welche in unterschiedlichen Klassen implementiert werden. Die Schnittstelle gibt dabei an, welche… …   Deutsch Wikipedia

  • PC-Schnittstelle — Die Schnittstelle oder das Interface [ˈɪntɚfeɪs] (englisch „Grenzfläche“) ist der Teil eines Systems, der der Kommunikation dient. Der Begriff stammt ursprünglich aus der Naturwissenschaft und bezeichnet die physikalische Phasengrenze zweier… …   Deutsch Wikipedia

  • Subjektorientierte Programmierung — Die Subjektorientierte Programmierung ist eine Erweiterung der objektorientierten Programmierung. Sie soll vor allem die Schwächen der objektorientierten Programmierung bei der Entwicklung großer Anwendungen und der Integration unabhängig… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”