Die große Stärke von Schnittstellen ist, dass sie nachträglich einer Ableitungslinie hinzugefügt werden können. In .NET wird bspw. die Schnittstelle IDisposable für das Dispose-Pattern verwendet. In Java dient die Schnittstelle AutoCloseable dazu, für Klassen die Verwendung der try-with-resources-Anweisung zu ermöglichen.
Schnittstellen werden immer dann verwendet, wenn Modelle beschrieben werden müssen, ohne dabei auch nur eine einzige Funktion zu implementieren. Schnittstellen sind besonders dann sinnvoll, wenn z.B. Plug-Ins für eine Anwendung ermöglicht werden müssen.
Klassen können beliebig viele Schnittstellen implementieren. Es handelt sich dann um Mehrfachschnittstellenvererbung. Diese hebt sich deutlich von der aus heutiger Sicht unnützen Mehrfachvererbung von Klassen ab, wie sie in C++ möglich ist.
Erweiterbarkeit
Basisklassen können nachträglich erweitert werden, ohne die Kompatibilität zu beeinträchtigen, sofern keine abstrakten Funktionen hinzufügt werden. Für Schnittstellen ist dies nicht ohne Kompatibilitätsverlust möglich, da jede neue Funktion in jeder Klasse, die die jeweilige Schnittstelle implementiert, hinzugefügt werden muss. Konzepte, die auf Schnittstellen basieren, werden durch Hinzufügen neuer Schnittstellen erweitert.
Transparenzverlust
Die hohe Flexibilität von Schnittstellen führt zum teilweisen Verlust von Transparenz während der Entwicklung. Wird statt mit der konkreten Klasse mit der dazugehörigen Schnittstelle gearbeitet, kann während der Entwicklung nicht mehr ohne Weiteres herausgefunden werden, welche konkrete Implementierung für einen Funktionsaufruf genutzt wird. Der Vorteil der Abstraktion geht also zu Lasten der Transparenz.
Unnötiger Einsatz
Stehen Schnittstellen am Anfang einer Klassenhierarchie kann oft auf sie verzichtet werden. Wird stattdessen eine Basisklasse verwendet, können verschiedene Funktionen vorimplementiert werden. Das Ableiten von einer Basisklasse macht dann lediglich die Implementierung der abstrakten Funktionen zwingend erforderlich, während bei Schnittstellen stets alle Funktionen implementiert werden müssen.
Werden Schnittstellen ausschließlich innerhalb eines einzigen Moduls verwendet, verursachen sie oft unnötigen Aufwand ohne erkennbaren Nutzen verbunden mit dem Verlust von Transparenz.
Markierungsschnittstellen
Markierungsschnittstellen sind leere Schnittstellen. Sie dienen dem alleinigen Zweck, eine Klasse zu kennzeichnen. In .NET und Java werden Markierungsschnittstellen bspw. verwendet, um serialisierbare Objekte zu markieren.
Schreiben Sie einen Kommentar
Sie müssen angemeldet sein, um einen Kommentar abzugeben.