Warum verwenden wir Interface?
Ist es nur für die Standardisierung?
Warum verwenden wir Interface?
Ist es nur für die Standardisierung?
Antworten:
Analogie 1 : Ähnlich wie das US-Raumschiff können das russische Sojus-Raumschiff und das chinesische Shenzhou 5 an die Internationale 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 : So können Sie verschiedene Computermonitore an Ihren Heimcomputer anschließen. Sie können einen Fernseher in Wandgröße daran anschließen, eine alte CRT (die dicke Art), einen 20-Zoll-Flachbildschirm oder eine Braille-Maschine, die Blinde durch Berühren "sehen" können. Es gibt Kompatibilität zwischen diesen verschiedenen / verschiedenen Geräten und Ihren Computer, weil sie sich alle auf Schnittstellenstandards einigen.
Details zu C # -Schnittstellen - Mit C # / OOP-Schnittstellen machen Sie dasselbe, jedoch in der unsichtbaren / virtuellen Welt.
Sie haben Recht mit Standardisierung , aber auch mit Flexibilität , Skalierbarkeit , Erweiterbarkeit , Wartbarkeit , Wiederverwendbarkeit , Testbarkeit und Leistung .
(Je häufiger Sie Softwareschnittstellen verwenden, desto besser werden diese "Modewörter" verstanden. Berücksichtigen Sie immer Schnittstellen in der realen Welt, weil sie uns gleich gut gemacht haben.)
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
Eine Schnittstelle wird verwendet, um zu beschreiben, was eine implementierte Sache tun kann. Sie haben also die Möglichkeit, mehrere Objekte zu behandeln, die dieselbe Schnittstelle als Typ dieser Schnittstelle implementieren.
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 die Schnittstelle auf verschiedene Arten. Sie können sie jedoch als IMyInterface verwenden. Zum 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, dies macht ein bisschen klar, warum Schnittstellen nützlich sind.
Woozle
, muss jeder Code, der einen Verweis auf eine der Klassen akzeptieren Woozle
möchte, wissen, mit welcher Klasse es sich handelt, und nur Woozle
Klassen kennen, über die er Bescheid weiß. Im Gegensatz dazu , wenn beide Klassen implementieren IWoozler
, dann Code, der jeder gegeben ist IWoozler
kann Woozle
es ohne seine genaue Art zu kennen.
Es ist für die Schnittstelle :), damit Sie zwischen Sachen Schnittstelle können, ist es nützlich, wenn Sie haben
Hier ist die Ansicht auf hoher Ebene ...
Schnittstellen spielen eine große Rolle im Konzept des Versteckens von Informationen .
Sie helfen Ihnen im Grunde dabei, die Implementierungsdetails Ihrer Klasse auszublenden, sodass eine aufrufende Klasse keine Abhängigkeit von dieser Implementierung hat. Daher können Sie mithilfe von Schnittstellen die Implementierung ändern, ohne die aufrufende Klasse zu ändern. Dies alles begrenzt wiederum die Komplexität Ihres Codes und erleichtert die langfristige Wartung .
Als ich anfing, Schnittstellen zu verstehen, wurden sie mir als "Vertrag, der eine Beschreibung Ihrer Klasse enthält" erklärt. Ich bin mir nicht sicher, ob das Ihnen helfen wird, aber wenn Sie an eine Schnittstelle für ein Auto denken, können Sie sagen, dass es fährt , bricht und dreht . Solange ich von Punkt A nach Punkt B komme, muss ich nicht wirklich wissen, wie diese Funktionen implementiert sind.
Der Hauptgrund, warum die Schnittstellen in Sprachen wie C # / Java verwendet werden, liegt darin, dass diese Sprachen keine Mehrfachvererbung (Klassenvererbung) unterstützen (siehe Was ist das genaue Problem bei Mehrfachvererbung? ).
Es ist jedoch eine Mehrfachimplementierung (Schnittstellenimplementierung) zulässig, sodass Klassen auf unterschiedliche Weise verwendet werden können.
Schnittstellen sind etwas umständlich. Sie unterstützen das vertragliche Design, indem sie glauben, dass derselbe Name und die implementierte Schnittstelle dasselbe Verhalten bedeuten. Dies funktioniert nur dank der API-Dokumentation, es muss von Menschen überprüft werden. Das macht Schnittstellen zu schwach. Eine Möglichkeit, dies zu umgehen, könnten formale Spezifikationen sein. Andererseits sind Schnittstellen zu stark und zu streng. Sie können keine Schnittstellen entwickeln, die häufig der Wiederverwendung im Wege stehen. Dies wird durch Protokolle gelöst - Mechanismen in dynamischen Sprachen, die Nachrichten senden (Aufrufmethoden). Wenn diese Nachricht vom Empfänger nicht unterstützt wird, wird ein Standardrückruf aufgerufen. Konkrete Protokolle mit Einschränkungen wären imho besser.
Denken Sie an 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 Sicht des Clients weiß der Client nichts über das Objekt auf dem Server, das die Ausführung ausführt. Es weiß jedoch, welche Methode aufzurufen ist. Denn beim Erstellen des Client-Programms sind wir nur einer Schnittstelle (oder einem Vertrag) ausgesetzt. Wir sind nicht dem gesamten Objekt ausgesetzt, das tatsächlich auf dem Server lebt. Versuchen Sie, einige Demo-Apps in .net Remoting zu erstellen, und Sie werden den Rest herausfinden. Viel Spaß beim Programmieren.
Warum verwenden wir Schnittstellen?
Einige Sprachen implementieren polymorphe Methodenaufrufe mithilfe von vtables und verwerfen die meisten Typinformationen, sodass es schwierig ist, keine Schnittstellen zu definieren.
Manchmal verwenden wir einfach Schnittstellen, weil das Sprachdesign dies erfordert.
Die Schnittstelle bietet einen modalen Prototyp, der nur die Deklaration der Funktionalität eines bestimmten Verhaltens enthält.
und wenn Sie dieses Verhalten in der Klasse implementieren möchten, müssen Sie diese Schnittstelle in der Klasse implementieren, dann hat die Klasse diese Verhaltensfunktionalität oder sie kann mehrere Verhaltensweisen haben.
weil Klasse mehrere Schnittstellen implementieren kann.
Wenn jemand wie ich ist und durch Vorbild und Handeln lernt, anstatt nur zu erklären, hier ist ein Code ...
Ich fand diese Implementierung eines neuronalen Netzwerks in C #, einschließlich des Projektdownloads, bei dem Schnittstellen auf elegante und nützliche Weise verwendet werden: