Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung von Beispielen zur schnittstellenorientierten Programmierung in Java

Ausführliche Erläuterung von Beispielen zur schnittstellenorientierten Programmierung in Java

黄舟
黄舟Original
2017-09-20 10:24:441554Durchsuche

Dieser Artikel stellt jedem einige Dinge über schnittstellenorientierte Programmierung vor, indem er die Natur von Schnittstellen, die Beziehung zwischen objektorientierter Programmierung und schnittstellenorientierter Programmierung und das eigene Verständnis des Autors kombiniert. Freunde, die es benötigen, können etwas darüber lernen.

Ich denke, dass Programmierern, die objektorientierte Programmiersprachen verwenden, der Begriff „Schnittstelle“ bekannt sein muss, aber ich frage mich, ob Sie solche Zweifel haben: Wozu dienen Schnittstellen? Was ist der Unterschied zwischen dieser und der abstrakten Klasse? Kann eine abstrakte Klasse anstelle einer Schnittstelle verwendet werden? Darüber hinaus muss man als Programmierer oft den Ausdruck „schnittstellenorientierte Programmierung“ hören. Was bedeutet das? Was ist die ideologische Konnotation? Welche Beziehung besteht zur objektorientierten Programmierung? In diesem Artikel werden diese Fragen einzeln beantwortet.

1. Welche Beziehung besteht zwischen schnittstellenorientierter Programmierung und objektorientierter Programmierung? Da die objektorientierte Programmierung nicht auf derselben Ebene liegt, handelt es sich nicht um eine eigenständige Programmieridee, die weiter fortgeschritten ist als die objektorientierte Programmierung, sondern mit dem objektorientierten ideologischen System verbunden und Teil davon ist. Mit anderen Worten, es ist eine der wesentlichen Ideen im objektorientierten Programmiersystem.

2. Die Essenz der Schnittstelle

Oberfläche ist eine Sammlung mehrerer Methodendefinitionen ohne Körpercode die von einer Klasse oder einer anderen Schnittstelle implementiert (oder geerbt) werden kann. In der Form könnte es wie folgt aussehen:

Was ist also das Wesentliche einer Schnittstelle? Mit anderen Worten, welche Bedeutung hat die Existenz der Schnittstelle? Ich denke, es kann aus den folgenden zwei Perspektiven betrachtet werden:

interface InterfaceName
{
void Method1();
void Method2(int para1);
void Method3(string para2,string para3);
}
1) Eine Schnittstelle ist ein Regelsatz, der einen Regelsatz festlegt, den eine Klasse oder Schnittstelle, die diese Schnittstelle implementiert, haben muss.

Verkörpert die Philosophie der Natur: „Wenn du... bist, musst du in der Lage sein...“.

Zum Beispiel können Menschen in der Natur essen, das heißt: „Wenn Sie ein Mensch sind, müssen Sie essen können.“ Bei der Simulation in einem Computerprogramm sollte es dann eine IPerson-Schnittstelle (normalerweise beginnt der Schnittstellenname mit „I“) und eine Methode namens Eat() geben. Dann legen wir fest, dass jede Klasse, die „Person“ darstellt, die IPerson-Schnittstelle implementieren muss simuliert das Naturgesetz „Wer ein Mensch ist, muss essen können“.

Von hier aus kann man meiner Meinung nach auch etwas objektorientiertes Denken erkennen. Einer der Kerne des objektorientierten Denkens besteht darin, die reale Welt zu simulieren und Dinge in der realen Welt in Klassen zu abstrahieren. Das gesamte Programm ist darauf angewiesen, dass Instanzen jeder Klasse miteinander kommunizieren und miteinander zusammenarbeiten, um Systemfunktionen zu vervollständigen stimmt sehr gut mit den Betriebsbedingungen der realen Welt überein und orientiert sich auch an der Essenz des Objektdenkens.


2) Eine Schnittstelle ist eine abstrakte Darstellung ähnlicher Dinge in einer bestimmten granularen Ansicht.
Beachten Sie, dass ich hier den Schwerpunkt auf eine bestimmte granulare Sichtweise lege, da das Konzept „ähnlicher Dinge“ relativ ist und sich aufgrund unterschiedlicher granularer Sichtweisen unterscheidet.

Zum Beispiel bin ich in meinen Augen ein Mensch, der sich grundlegend von einem Schwein unterscheidet. Ich kann akzeptieren, dass meine Klassenkameraden und ich gleich sind, aber ich kann niemals akzeptieren, dass ich und ein Schwein sind sind gleich. Wenn jedoch in den Augen eines Zoologen Schweine und ich von der gleichen Art sein sollten, weil wir beide Tiere sind, kann er denken, dass sowohl „Menschen“ als auch „Schwein“ die IAnimal-Schnittstelle implementieren, und wenn er das Verhalten von Tieren untersucht, Er wird mich und das Schwein getrennt behandeln und es anhand der größeren Granularität von „Tier“ untersuchen, aber er wird denken, dass es einen wesentlichen Unterschied zwischen mir und einem Baum gibt.

Jetzt bin ich zum Genetiker gewechselt, und die Situation ist anders, weil alle Lebewesen vererbt werden können, also unterscheide ich mich in seinen Augen nicht nur nicht von einem Schwein, sondern auch von einer Mücke , ein Bakterium, ein Es gibt keinen Unterschied zwischen einem Baum, einem Pilz oder sogar einem SARS-Virus, weil er denken wird, dass wir alle die IDescendable-Schnittstelle implementieren (Anmerkung: descend vi.-Vererbung), das heißt, wir sind alle vererbbare Dinge. und er wird uns nicht einzeln untersuchen, sondern alle Lebewesen als die gleiche Art untersuchen. In seinen Augen gibt es keinen Unterschied zwischen Menschen und Viren, nur vererbbare Materialien und nicht vererbbare Materialien. Aber zumindest gibt es einen Unterschied zwischen mir und einem Stein.


Aber eines Tages erschien ein großer Mann auf der Erde. Sein Name war Lenin. Also machte er eine berühmte Definition: Die sogenannte Substanz ist die objektive Realität, die widergespiegelt werden kann durch Bewusstsein. An diesem Punkt gibt es keinen Unterschied zwischen mir und einem Stein, einem Hauch Luft, einer Redewendung und dem elektromagnetischen Feld, das Mobiltelefonsignale überträgt, denn in Lenins Augen sind wir alle objektive Realitäten, die im Bewusstsein widergespiegelt werden können. Wenn Lenin ein Programmierer wäre, würde er Folgendes sagen: Die sogenannte Materie sind die Instanzen, die von allen Klassen generiert werden, die sowohl die Schnittstellen „IReflectabe“ als auch „IEsse“ implementieren. (Hinweis: reflektieren v. reflektieren esse n. objektive Realität)


Vielleicht denken Sie, dass mein obiges Beispiel Unsinn ist, aber genau aus diesem Grund gibt es Schnittstellen. Eines der Kernkonzepte des objektorientierten Denkens heißt Polymorphismus. Was ist Polymorphismus? Vereinfacht ausgedrückt bedeutet dies, dass ähnliche Dinge auf einer bestimmten granularen Ansichtsebene einheitlich und ohne Unterschied behandelt werden. Der Grund, warum ich mich dazu traue, liegt in der Existenz von Schnittstellen. Wie der Genetiker versteht er, dass alle Organismen die IDescendable-Schnittstelle implementieren. Solange es sich also um einen Organismus handelt, muss er über die Descend()-Methode verfügen, damit er eine einheitliche Forschung durchführen kann, anstatt jeden Organismus einzeln zu untersuchen und schließlich an Erschöpfung zu sterben.

Vielleicht kann ich Ihnen hier keinen intuitiven Eindruck von der Beschaffenheit und Funktion der Schnittstelle vermitteln. In den folgenden Beispielen und der Analyse mehrerer Entwurfsmuster werden Sie die Konnotation der Schnittstelle dann intuitiver erleben.

3. Überblick über schnittstellenorientierte Programmierung

Durch das oben Gesagte denke ich, dass jeder ein Verständnis für Schnittstellen und die ideologische Konnotation von Schnittstellen hat , dann Was ist schnittstellenorientierte Programmierung? Meine persönliche Definition lautet: Unterscheiden Sie in der Systemanalyse und -architektur Ebenen und Abhängigkeiten. Jede Ebene stellt Dienste nicht direkt für ihre obere Schicht bereit (dh sie wird nicht direkt in der oberen Schicht instanziiert), sondern nur durch die Definition einer Reihe von Schnittstellen Die obere Schicht legt ihre Schnittstellenfunktion offen, und die obere Schicht hängt nur von der Schnittstelle der unteren Schicht ab und ist nicht auf bestimmte Klassen angewiesen.

Die Vorteile dieser Vorgehensweise liegen auf der Hand. Erstens ist es großartig für die Systemflexibilität. Wenn die untere Schicht geändert werden muss, muss die obere Schicht keine Änderungen vornehmen, solange die Schnittstelle und die Schnittstellenfunktion unverändert bleiben. Sie können sogar die gesamte untere Schicht austauschen, ohne den Code der oberen Schicht zu ändern, so wie wir eine WD 60G-Festplatte durch eine Seagate 160G-Festplatte ersetzen. Stattdessen müssen wir den Computer ausstecken Schließen Sie einfach die ursprüngliche Festplatte an und installieren Sie sie, da andere Teile des Computers nicht auf eine bestimmte Festplatte angewiesen sind, sondern nur auf eine IDE-Schnittstelle kann ersetzt werden. Von hier aus ist die Schnittstelle im Programm der Schnittstelle in der Realität sehr ähnlich, daher denke ich immer, dass das Wort „Schnittstelle“ wirklich ähnlich ist!

Ein weiterer Vorteil der Verwendung von Schnittstellen besteht darin, dass Entwickler verschiedener Komponenten oder Ebenen parallel arbeiten können, so wie diejenigen, die Festplatten bauen, nicht auf diejenigen warten müssen, die CPUs oder Monitore bauen Solange die Schnittstellen konsistent sind, ist das Design angemessen und kann parallel entwickelt werden, um die Effizienz zu verbessern.

Dieser Artikel endet hier zuerst. Abschließend möchte ich noch etwas sagen: Die Essenz der Objektorientierung besteht darin, die Realität zu simulieren, was auch als die Seele meines Artikels bezeichnet werden kann. Daher wird es für die Verbesserung der Systemanalyse- und Designfähigkeiten von großem Nutzen sein, mehr über objektorientierte Dinge aus der Realität nachzudenken.

Im nächsten Artikel werde ich anhand eines Beispiels die grundlegenden Methoden der Schnittstellenprogrammierung demonstrieren.

Im dritten Artikel werde ich einige schnittstellenorientierte Programmierideen in klassischen Entwurfsmustern analysieren und die schnittstellenorientierten Ideen in der .NET-Schichtarchitektur analysieren.

1. Bezüglich der beiden Wörter „Schnittstelle“ in „schnittstellenorientierter Programmierung“ und „Schnittstelle“ in bestimmten objektorientierten Sprachen

Siehe Ein Freund hat einmal vorgeschlagen, dass das Wort „Schnittstelle“ in der „schnittstellenorientierten Programmierung“ einen größeren Umfang haben sollte als das Wort „Schnittstelle“ in einer reinen Programmiersprache. Nachdem ich darüber nachgedacht habe, denke ich, dass es Sinn macht. Was ich hier geschrieben habe, ist in der Tat unvernünftig. Ich denke, dass sich „Schnittstelle“ in objektorientierten Sprachen auf eine bestimmte Codestruktur bezieht, beispielsweise auf die Schnittstelle, die mit dem Schlüsselwort „interface“ in C# definiert ist. Man kann sagen, dass sich die „Schnittstelle“ in der „schnittstellenorientierten Programmierung“ auf eine Strukturkomponente bezieht, die dazu dient, bestimmte zugrunde liegende Klassen zu verbergen und Polymorphismus aus Sicht der Softwarearchitektur und auf einer abstrakteren Ebene zu implementieren. In diesem Sinne halte ich es für sinnvoll, diese abstrakte Klasse als „Schnittstelle“ zu bezeichnen, wenn eine abstrakte Klasse definiert ist und der Zweck darin besteht, Polymorphismus zu erreichen. Aber ist es sinnvoll, abstrakte Klassen zur Implementierung von Polymorphismus zu verwenden? Wird im zweiten Artikel unten besprochen.

Zusammenfassend denke ich, dass sich die beiden Konzepte der „Schnittstelle“ voneinander unterscheiden und miteinander zusammenhängen. Die Schnittstelle in der „schnittstellenorientierten Programmierung“ ist eine ideologische Architekturkomponente, die verwendet wird, um Polymorphismus zu erreichen und die Flexibilität und Wartbarkeit der Software zu verbessern, während die „Schnittstelle“ in einer bestimmten Sprache eine konkrete Komponente auf dieser ideologischen Ebene ist und in den Code implementiert wird.

2. Über abstrakte Klassen und Schnittstellen

Ich habe in den Antworten gesehen, dass dies ein heiß diskutiertes Thema ist. Es tut mir leid, dass ich nicht zweimal darüber nachgedacht habe, dies in dem Artikel zu diskutieren. Mein persönliches Verständnis dieses Problems ist wie folgt:
Wenn man sich nur den spezifischen Code ansieht, kann man leicht diese beiden Konzepte verwischen und sogar denken, dass die Schnittstelle redundant ist, weil sie nur aus der spezifischen Funktion besteht, mit Ausnahme mehrerer Vererbung (C#, Java) scheinen abstrakte Klassen in der Lage zu sein, Schnittstellen vollständig zu ersetzen. Gibt es jedoch eine Schnittstelle zur Implementierung der Mehrfachvererbung? Natürlich nicht. Meiner Meinung nach ist der Unterschied zwischen abstrakten Klassen und Schnittstellen die Motivation für deren Verwendung. Der Zweck der Verwendung abstrakter Klassen besteht in der Wiederverwendung von Code, während die Motivation für die Verwendung von Schnittstellen darin besteht, Polymorphismus zu erreichen. Wenn Sie sich also nicht sicher sind, ob Sie irgendwo ein Interface oder eine abstrakte Klasse verwenden sollen, denken Sie über Ihre Motivation nach.

Ich habe einige Freunde gesehen, die die IPerson-Schnittstelle in Frage gestellt haben. Mein persönliches Verständnis ist, dass es von der spezifischen Anwendung abhängt, ob die IPerson-Schnittstelle definiert werden sollte. Wenn wir Women und Man in unserem Projekt haben, erben beide Person und die meisten Methoden von Women und Man sind gleich, nur eine Methode

DoSomethingInWC() ist unterschiedlich (das Beispiel ist ziemlich vulgär, bitte verzeihen Sie). mir), dann ist die Definition einer abstrakten Klasse „AbstractPerson“ natürlich sinnvoller, da sie alle anderen Methoden einschließen kann und die Unterklasse nur DoSomethingInWC() definiert, was die Menge an wiederholtem Code erheblich reduziert.

Wenn jedoch die Klassen „Frauen“ und „Mann“ in unserem Programm grundsätzlich keinen gemeinsamen Code haben und es eine PersonHandle-Klasse gibt, die sie instanziieren muss, möchten wir nicht wissen, ob sie männlich sind oder weiblich, aber sie einfach als Menschen behandeln und Polymorphismus implementieren, dann ist es notwendig, sie als Schnittstellen zu definieren.

Kurz gesagt, der Unterschied zwischen Schnittstellen und abstrakten Klassen liegt hauptsächlich in der Motivation zur Verwendung, nicht in sich selbst. Ob etwas als abstrakte Klasse oder Schnittstelle definiert werden sollte, hängt vom Kontext der jeweiligen Umgebung ab.

Darüber hinaus denke ich, dass ein weiterer Unterschied zwischen Schnittstellen und abstrakten Klassen darin besteht, dass zwischen einer abstrakten Klasse und ihren Unterklassen eine allgemeine und spezielle Beziehung bestehen sollte, während eine Schnittstelle lediglich darin besteht, dass ihre Unterklassen eine Menge haben sollten Regeln umgesetzt. (Natürlich kann es manchmal eine allgemeine und spezielle Beziehung geben, aber der Zweck der Verwendung von Schnittstellen liegt hier nicht.) Beispielsweise ist es akzeptabel, Fahrzeuge als abstrakte Klassen und Autos, Flugzeuge und Schiffe als Unterklassen zu definieren, da Autos , Flugzeuge, Schiffe sind besondere Fortbewegungsmittel. Ein weiteres Beispiel ist die Icomparable-Schnittstelle. Sie besagt lediglich, dass Klassen, die diese Schnittstelle implementieren, vergleichbar sein müssen. Wenn die Car-Klasse Icomparable implementiert, bedeutet dies nur, dass es in unserem Car eine Methode gibt, mit der zwei Car-Instanzen verglichen werden können. Es spielt keine Rolle, ob Autos eine besondere Art sind von Dingen, die verglichen werden können.“ Das ist grammatikalisch unvernünftig.

Zusammenfassung

Im Allgemeinen bedeutet schnittstellenorientierte Programmierung, dass zwischen allen Klassen oder Modulen in einem objektorientierten System die Interaktion abgeschlossen ist die Schnittstelle.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen zur schnittstellenorientierten Programmierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn