web-dev-qa-db-de.com

Warum benutzen wir Interface? Ist es nur für die Standardisierung?

Warum benutzen wir Interface? 

Ist es nur für die Standardisierung?

76
Azhar

Zweck von Schnittstellen

  • erstellen Sie lose gekoppelte Software
  • support Vertragsgestaltung (ein Implementierer muss die gesamte Schnittstelle bereitstellen)
  • erlauben Sie steckbare Software
  • lassen Sie verschiedene Objekte leicht interagieren
  • verbergen Implementierungsdetails von Klassen voneinander
  • erleichterung der Wiederverwendung von Software 

Analogie 1: Ähnlich wie die US-Raumfähre können die russische Sojus-Sonde und das chinesische Shenzhou 5 alle an der Internationalen Raumstation andocken, da sie dieselbe Docking-Schnittstelle implementieren. (Dies ist nur ein Beispiel - ich weiß nicht, ob es im wirklichen Leben wahr ist, aber lassen Sie uns unseren Unglauben aus Gründen eines Beispiels aussetzen)

Analogie 2: Sie können wie verschiedene Computerbildschirme an Ihren Heimcomputer anschließen. Sie können einen Fernseher in Wandformat, einen alten CRT (den dicken Typ), einen 20-Zoll-Flachbildschirm oder eine Braille-Maschine für Blinde per Touch "sehen". Es gibt Kompatibilität zwischen diesen verschiedenen/verschiedenen Geräten und Ihrem Computer, weil sie sich alle auf Schnittstellenstandards einigen. 

Details zu C # -Schnittstellen -- Mit C #/OOP-Schnittstellen machen Sie dasselbe, aber in der unsichtbaren/virtuellen Welt.

Sie haben Recht mit Standardisierung, aber auch mit Flexibilität, Skalierbarkeit, Erweiterbarkeit, Wartbarkeit, Wiederverwendbarkeit, Testbarkeit und Leistung.

(Je mehr Sie Software-Schnittstellen verwenden, desto mehr werden diese "Schlagworte" verstanden. Außerdem sollten Sie Schnittstellen in der realen Welt berücksichtigen, da sie uns genauso gut gemacht haben.)

168
John K

Über eine Schnittstelle wird beschrieben, was eine implementierte Sache tun kann. Sie haben also die Möglichkeit, mehrere Objekte, die dieselbe Schnittstelle implementieren, als einen Typ dieser Schnittstelle zu behandeln.

Zum Beispiel:

public interface IMyInterface{
    public void DoFirst();
    public int DoSecond();
}


public class A : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blubb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blubb2");
     return 2;  
   }
}

public class B : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blibb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blibb2");  
     return 4;
   }
}

Die Klassen implementieren das Interface auf verschiedene Arten. Sie können sie jedoch als IMyInterface ..__ verwenden. Beispiel:

public static void DoMethodsInInterface(IMyInterface inter){
    inter.DoFirst();
    inter.DoSecond();
}


public static void main(){

   DoMethodsInInterface(new A());
   DoMethodsInInterface(new B());
   //Or use it in a List
   List<IMyInterface> interlist = new List<IMyInterface>();
   interlist.Add(new A());
   interlist.Add(new B());
   foreach(IMyInterface inter in interlist){
      inter.DoFirst();
   }

}

Ich hoffe, das macht ein bisschen klar, warum Schnittstellen nützlich sind.

28
martin

Es ist für das Anschließen :), so dass Sie zwischen den Dingen wechseln können, es ist nützlich, wenn Sie haben 

  • mehrere Implementierungen desselben Materials
  • wenn Sie eine Schnittstelle auf mehrere verschiedene Klassen anwenden, benötigen Sie eine Konvention, die besagt, dass diese Klassen etwas tun können oder über einige Funktionen verfügen
5
Omu

Hier ist die Ansicht auf hoher Ebene ...

Schnittstellen spielen eine große Rolle im Konzept von Information Hiding

Sie dienen im Wesentlichen dazu, die Implementierungsdetails Ihrer Klasse auszublenden, sodass eine aufrufende Klasse nicht von dieser Implementierung abhängig ist. Daher können Sie mithilfe von Schnittstellen die Implementierung ändern, ohne die aufrufende Klasse zu ändern. Dies alles abwechselnd begrenzt die Komplexität Ihres Codes und macht es einfacher zu pflegen auf lange Sicht.

Als ich anfing, Schnittstellen zu verstehen, wurden sie mir als "Vertrag, der Ihre Klasse beschreibt" erklärt. Ich bin mir nicht sicher, ob dies Ihnen helfen wird, aber wenn Sie an eine Schnittstelle für ein Auto denken, könnten Sie sagen, dass es fährt, bricht und dreht. So lange ich von A nach B komme, muss ich nicht wirklich wissen, wie diese Funktionen implementiert werden. 

3
matt_dev

Schnittstellen sind etwas umständlich ... Sie unterstützen das vertragliche Design, nur weil sie glauben, dass derselbe Name und das implementierte Interface dasselbe Verhalten bedeuten. Dies funktioniert nur dank API-Dokumentation, sie muss vom Benutzer überprüft werden. Das macht Schnittstellen zu schwach. Ein Weg, um herumzukommen, könnten formale Spezifikationen sein ..__ Andererseits sind Schnittstellen zu stark, zu streng. Sie können keine Schnittstellen entwickeln, die häufig der Wiederverwendung im Wege stehen. Dies wird durch Protokolle gelöst - Mechanismus in dynamischen Sprachen, die Nachrichten senden (Aufrufmethoden), und wenn diese Nachricht vom Empfänger nicht unterstützt wird, wird ein Standard-Callback aufgerufen. Konkrete Protokolle mit Einschränkungen wären imho besser.

2

Der Hauptgrund für die Verwendung der Schnittstellen in Sprachen wie C #/Java ist, dass diese Sprachen keine Mehrfachvererbung (Klassen) unterstützen (siehe Was ist das genaue Problem mit Mehrfachvererbung? ). 

Eine mehrfache (Schnittstellen-) Implementierung ist jedoch zulässig, sodass Klassen auf unterschiedliche Weise verwendet werden können.

2
Catalin DICU

Denke Remoting ...

Hier sind ein Client und ein Server beteiligt. Nehmen wir an, sie sind durch das Internet physisch getrennt. Der Client ruft eine Methode auf, deren tatsächliche Ausführung auf dem Server erfolgt. Aus der Sicht des Clients weiß der Client nichts über das Objekt auf dem Server, das die Ausführung durchführt. Es weiß jedoch, welche Methode aufgerufen werden soll. Denn beim Erstellen des Client-Programms sind wir nur einer Schnittstelle (oder einem Vertrag) ausgesetzt. Wir sind nicht dem ganzen Objekt ausgesetzt, das tatsächlich auf dem Server lebt. Versuchen Sie, einige Demo-Apps in .net-Remoting auszuführen, und Sie werden den Rest feststellen. Viel Spaß beim Programmieren.

1
deostroll

Die Schnittstelle bietet Prototyp-Modal, das nur die Deklaration der Funktionalität eines bestimmten Verhaltens enthält.

und wenn Sie dieses Verhalten in class implementieren möchten, müssen Sie diese Schnittstelle in class implementieren. Die Klasse verfügt dann über diese Verhaltensfunktion oder sie kann mehrere Verhaltensweisen aufweisen.

weil die Klasse mehrere Schnittstellen implementieren kann.

0
Manoj Gupta

Nachfolgend sind die Hauptgründe für die Verwendung von Schnittstellen aufgeführt

  1. Erweiterbarkeit
  2. Implementierung verstecken
  3. Objektzugriff über Schnittstellen
  4. Lose Kopplung.

bitte besuchen Sie diesen Link, um mehr über Schnittstellen zu erfahren mit herunterladbarem Code-Beispiel

0
Vikram

Wenn jemand anderes wie ich ist und durch Beispiel und Handeln lernt und nicht nur Erklärungen, dann ist hier etwas Code ....

Ich habe diese Implementierung eines neuronalen Netzwerks in C # gefunden, einschließlich des Projektdownloads, bei dem Interfaces auf elegante und nützliche Weise verwendet werden:

http://www.c-sharpcorner.com/UploadFile/rmcochran/AI_OOP_NeuralNet06192006090112AM/AI_OOP_NeuralNet.aspx

0
Dave

Wenn Sie mit einer Schnittstelle beginnen, können Sie ein proxy implementieren, das ein verzögertes Laden oder Durchführen einiger Überprüfungen beim Aufruf der Methoden einer konkreten Implementierung ermöglicht.

0
lmsasu

Warum benutzen wir Schnittstellen?

Einige Sprachen implementieren polymorphe Methodenaufrufe mit vtables und verwerfen die meisten Typinformationen, wodurch es schwierig ist, nicht Schnittstellen zu definieren.

Irgendwann benutzen wir also einfach Schnittstellen, weil das Sprachdesign es erfordert.

0
Alex Jasmin

Schnittstelle trennt den Datentyp von der Implementierungslogik.

0
Anand