www.wikidata.de-de.nina.az
Eine Schnittstelle englisch interface oder protocol definiert in der objektorientierten Programmierung welche Methoden in den unterschiedlichen Klassen u A vorhanden sind oder vorhanden sein mussen Sie legt die Namen und die Signatur der Methoden also die Parametertypen und den Ruckgabetyp fest Inhaltsverzeichnis 1 Technische Details 1 1 Deklaration 1 2 Definition von Konstanten 2 Beispiele 2 1 C 2 2 Java 3 Namenskonventionen 4 Siehe auch 5 EinzelnachweiseTechnische Details BearbeitenEine Schnittstelle gibt an welche Methoden vorhanden sind oder vorhanden sein mussen Zusatzlich zu dieser syntaktischen Definition sollte ein so genannter Kontrakt uber die Bedeutung Semantik definiert werden festgelegt als Vorbedingungen und Nachbedingungen der verschiedenen Methoden Der Kontrakt wird meist nur informell in der Dokumentation oder einer externen Spezifikation der Schnittstelle festgelegt Es stehen auch formelle Spezifikationssprachen wie z B die OCL zur Verfugung Einige Programmiersprachen z B Eiffel bieten auch unmittelbar syntaktische Moglichkeiten zur Festlegung eines Kontrakts Schnittstellen stellen eine Garantie uber die in einer Klasse vorhandenen Methoden dar Sie geben an dass alle Objekte die diese Schnittstelle besitzen gleich behandelt werden konnen In einigen Programmiersprachen die keine Mehrfachvererbung unterstutzen z B Java konnen Schnittstellen verwendet werden um Kompatibilitaten zwischen Klassen zu definieren die nicht voneinander erben Die Schnittstellenbeziehungen sind nicht an den strengen Klassenbaum gebunden Dazu werden Schnittstellendeklarationen haufig explizit als solche markiert etwa mit dem Schlusselwort interface Als Ersatz fur Mehrfachvererbung eignen sich Schnittstellen allerdings nur eingeschrankt da sie lediglich Methoden und deren Parameter definieren und keine direkte Vererbung von Funktionalitat ermoglichen In Java gibt es mittlerweile die Moglichkeit in Schnittstellen Methoden tatsachlich zu implementieren und als Standard default zu markieren Dies ermoglicht die Definition von Funktionalitat die Klassen erben die das Interface nutzen Java Interfaces entwickeln sich dadurch etwas naher in Richtung der Mehrfachvererbung Deklaration Bearbeiten Andere Programmiersprachen die Mehrfachvererbung unterstutzen zum Beispiel C kennen zwar das Konzept von Schnittstellen behandeln diese aber wie gewohnliche Klassen Man spricht dann auch von abstrakten Klassen Manchmal wird auch eine eigene Sprache eine sogenannte Schnittstellenbeschreibungssprache IDL zur Deklaration der Schnittstelle verwendet meist ist das bei Middleware Systemen wie CORBA oder DCOM der Fall Objektbasierte Sprachen ohne strenge Typisierung kennen meist keine Schnittstellen Definition von Konstanten Bearbeiten In einigen Programmiersprachen wie Java oder PHP ist es moglich Konstanten innerhalb einer Schnittstellendefinition zu deklarieren Allen implementierenden Klassen stehen dann diese Konstanten zur Verfugung Beispiele BearbeitenC BearbeitenIm folgenden Beispiel in C wird eine Schnittstelle Face mit den Methoden Move Turn Scale GetArea SetColor GetColor deklariert Die Klasse Polygon implementiert die Schnittstelle Face was in C mit der Notation Polygon Face festgelegt wird Die Klasse Polygon muss daher alle diese Methoden mit den angegebenen Parametertypen und Ruckgabetypen implementieren Die implementierten Methoden haben den Zugriffsmodifikator public public interface Face void Move float x float y void Turn float x float y double angle void Scale float factor double GetArea void SetColor Color color Color GetColor public class Polygon Face private List lt PointF gt points private Color color public Polygon List lt PointF gt points Color color this points points this color color public void Move float x float y for int i 0 i lt points Count i PointF point points i points i new PointF point X x point Y y public void Turn float x float y double angleInDegrees double angleInRadians angleInDegrees Math PI 180 double cosine Math Cos angleInRadians double sine Math Sin angleInRadians for int i 0 i lt points Count i PointF point points i points i new PointF float cosine point X x sine point Y y x float sine point X x cosine point Y y y public void Scale float factor for int i 0 i lt points Count i PointF point points i points i new PointF factor point X factor point Y public double GetArea double area 0 0 for int i 0 i lt points Count i PointF point1 points i PointF point2 points i 1 points Count area point1 Y point2 Y point1 X point2 X return Math Abs area 2 0 public void SetColor Color color this color color public Color GetColor return color Bemerkungen Die hier gezeigte Implementierung der Methode Turn verwendet im Prinzip die Drehmatrix der Ebene Die Implementierung der Methode GetArea verwendet die Gausssche Trapezformel Java Bearbeiten Existiert beispielsweise eine Schnittstelle Konto mit der Methode abbuchen mussen alle Klassen die diese Schnittstelle implementieren uber eine Methode abbuchen verfugen Weiteres Beispiel Eine Anzahl an Klassen mit den Namen SparKonto GiroKonto und DepotKonto implementieren die Schnittstelle Konto Die Schnittstelle hat eine Methode getKontostand also mussen alle Klassen mit der Schnittstelle die Methode getKontostand bereitstellen Werden in einer Klasse mehrere Schnittstellen implementiert und besitzen deren Methoden gleiche Namen und gleiche Signatur Parametertyp und Ruckgabetyp 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 Framework 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 unterscheidet sich in einem weiteren Punkt gegenuber NET Sprachen darin dass eine Klasse die ein Interface implementiert nicht explizit deklariert werden muss Das folgende Beispiel definiert eine sogenannte anonyme innere Klasse innerhalb einer Methode public Konto erstelleKonto return new Konto Beginn der anonymen inneren Klasse Implementierung der durch Konto definierten Methode public int getKontostand return 0 Ende der anonymen inneren Klasse Namenskonventionen BearbeitenIn einigen Programmiersprachen ist es ublich Schnittstellen durch besondere Prafixe oder Suffixe erkennbar zu machen Ungarische Notation So wird haufig ein I fur Interface vorangestellt oder ein IF beziehungsweise Interface angehangt Die oben angefuhrte Beispielschnittstelle Konto hiesse dann IKonto KontoInterface oder KontoIF Vorteile Schnittstellen sind am Namen als solche erkennbar Implementierende Klassen konnen einen einfacheren Namen haben Nachteile Schnittstellen sollten nicht am Namen als solche erkannt werden da man als Verwender anderer Objekte immer nur deren Schnittstelle also offentliche Methoden bedenken sollte 1 Schnittstellen konnen als das wesentliche Element der Programmierung betrachtet werden Daher ist es sinnvoller die Namen der Implementierungen mit Prafixen oder Suffixen zu erganzen Schnittstellen sind besonders dann sinnvoll wenn es mehr als eine Implementierung gibt sodass die implementierenden Klassen ohnehin mit Prafixen und Suffixen benannt werden Siehe auch BearbeitenSchnittstelle Programmierschnittstelle Schnittstelle UML Klasse Objektorientierung Vererbung Programmierung Einzelnachweise Bearbeiten Erich Gamma Richard Helm Ralph Johnson John Vlissides Design Patterns Elements of Reusable Object Oriented Software Addison Wesley 1995 ISBN 0 201 63361 2 Seite 18 Abgerufen von https de wikipedia org w index php title Schnittstelle Objektorientierung amp oldid 228312772