Bedeutung der aus der Java Collection gelernten Schnittstelle

Schnittstellen spielen eine wichtige Rolle bei der Objektorientierung. Selbst wenn Ihnen nur die Implementierung von "Die Schnittstelle hat keine Implementierung, nur die Definition der Methode!" Gelehrt wird, können Sie ihre Bedeutung nur erkennen, wenn Sie ihre Bedeutung verstehen. Daher möchte ich dieses Mal die Bedeutung der Schnittstelle am Beispiel der Java-Sammlung zusammenfassen.

Bedeutung der Schnittstelle

Zusammenfassend steht eine Schnittstelle für "Rolle". Mit anderen Worten, es repräsentiert das Verhalten der Schnittstelle.

Genauer gesagt ~ Sammlungsschnittstelle ~

Werfen wir einen Blick auf die Collection-Oberfläche.

Collection Die Stammschnittstelle der Sammlungshierarchie. Eine Sammlung repräsentiert eine Gruppe von Objekten, die ihre Elemente sind. Einige Sammlungen erlauben doppelte Elemente, andere nicht. Einige Sammlungen sind auch bestellt, andere nicht.

Mit anderen Worten, eine Sammlung ist eine Schnittstelle, die eine "Rolle" einer Gruppe bestimmter Objekte hat. Und die Sammlung selbst gibt nicht an, ob sie dupliziert oder bestellt werden kann.

Sammlungsvererbungsziel ~ Festlegen und Auflisten ~

Schauen wir uns nun Set und List an, die Schnittstellen, die von Collection erben. Ich denke, es gibt viele Leute, die damit besser vertraut sind als mit der Sammlung.

Set Eine Sammlung ohne doppelte Elemente. Das heißt, die Menge hat kein Elementpaar von e1 und e2, das e1.equals (e2) ist und höchstens ein Nullelement hat. Wie der Name schon sagt, modelliert diese Schnittstelle die Abstraktion von Mengen in der Mathematik.

List Eine bestellte Sammlung. Wird auch als Sequenz bezeichnet. Benutzer dieser Schnittstelle haben eine genaue Kontrolle darüber, wo in der Liste jedes Element eingefügt wird. Benutzer können über den Index der ganzzahligen Werte (Position in der Liste) auf Elemente zugreifen und nach Elementen in der Liste suchen. Im Gegensatz zu Mengen erlauben Listen normalerweise doppelte Elemente.

Um diese in einer Tabelle zusammenzufassen,

Rolle Duplikat bestellen
Collection Gruppe von Elementen
Set Satz von Elementen ×
List Eine Gruppe geordneter Elemente

Da Set und List von der Collection-Klasse erben, können Sie sehen, dass es sich um Schnittstellen mit spezifischeren Rollen handelt.

Schnittstellenmethode

Schauen wir uns nun die Methoden der einzelnen Schnittstellen an (Definitionen usw. finden Sie im oben aufgeführten JavaDoc). Sammlung gibt Operationen für Gruppen wie Größe (Anzahl der Elemente) und Entfernen (Elemente entfernen) an. Set definiert auch grundsätzlich Methoden wie die in Collection, aber List definiert Methoden, die sich auf Indizes wie indexOf beziehen (Suche nach dem Index des angegebenen Elements). Da Set das Konzept des Index überhaupt nicht hat (es ordnet nicht), ist die Indexverarbeitung eine Verarbeitung, die zur Rolle der Liste gehört. Wenn Sie sich auf die Methode mit dem Namen add konzentrieren, wird die in Collection definierte Methode von Set und List überschrieben, und die Erläuterung der Methode ist für jede Methode unterschiedlich.

Schnittstelle Beschreibung von add
Collection Garantiert, dass das angegebene Element in dieser Sammlung gespeichert ist.
Set Wenn sich das angegebene Element nicht in der Menge befindet, wird es der Menge hinzugefügt.
List Fügt das angegebene Element am Ende dieser Liste hinzu.

In Collection ist add eine Garantie für die Speicherung und keine zusätzliche Verarbeitung. Dies liegt daran, dass es eine Rolle gibt, die nicht hinzugefügt wird, wenn das hinzuzufügende Element bereits wie Set vorhanden ist. In der Rolle der Sammlung lautet der Prozess des Hinzufügens also "Manchmal werden Elemente hinzugefügt und manchmal werden sie nicht hinzugefügt." Manchmal, aber zumindest nach dem Ausführen von add, garantiere ich, dass sich das Element, das ich hinzufügen möchte, in der Gruppe befindet. " Jedes Set- und List-Add hat spezifischere Inhalte. Dies bedeutet, dass jeder durch Vererbung eine spezifischere "Schnittstellenrolle" hat, wodurch die "Methodenrolle" spezifischer wird. Das Überschreiben einer Methode auf einer Schnittstelle ist in Bezug auf die Implementierung nicht sehr sinnvoll, aber es kann gesagt werden, dass es überschrieben wird, um explizit die Absicht auszudrücken, "zu welcher Schnittstelle die Methode gehört".

Rolle? was ist das? Schmeckt es?

Ich hoffe, Sie verstehen, dass jede Schnittstelle und ihre Methode eine Art "Rolle" darstellt. Es stellt sich jedoch die Frage: "Warum ist es wichtig, die Rolle auszudrücken?" Bevor wir das erklären, schauen wir uns die beiden Codes an.

ArrayList<String> list = new ArrayList<String>();
list.add("abc");
List<String> list = new ArrayList<String>();
list.add("abc");

Ich bin sicher, dass viele Leute Code wie diesen gesehen haben. Normalerweise wird der folgende Schreibstil empfohlen. Der Grund ist, dass der folgende Code "abstrakter konzeptabhängige Verarbeitung" ist.

Warum ist es nicht konkret?

Der Grund für das Schreiben von Code, um sich auf abstrakte Dinge zu verlassen, besteht darin, die Verarbeitung der Schnittstellenimplementierungsklasse von der Klasse zu trennen, die sie verwendet. Angenommen, Sie möchten den Prozess, der ArrayList verwendet hat, später in LinkedList ändern. In diesem Fall würden die ersten beiden Codes folgendermaßen aussehen:

LinkedList<String> list = new LinkedList<String>();
list.add("abc");
List<String> list = new LinkedList<String>();
list.add("abc");

Auf den ersten Blick scheinen diese beiden Codes die erste Zeile geändert zu haben. In Anbetracht der zweiten Zeile unter dem Gesichtspunkt der Absicht des Codes hat der folgende Code jedoch weiterhin die Absicht, "zur Liste hinzuzufügen", während der obige Code von "Hinzufügen zu ArrayList" zu "LinkedList" wechselt. Es hat sich in die Absicht "hinzufügen" geändert. Daher muss bestätigt werden, dass sich die Absicht des Codes aufgrund der Änderung der Implementierungsklasse nicht geändert hat.

Wenn Sie Ihre eigene Implementierungsklasse schreiben, wird dies noch nützlicher. Solange es der Rolle der List-Schnittstelle entspricht, reicht jede interne Implementierung aus. Aus Sicht des Benutzers ist es möglich, den Prozess unter der Garantie zu schreiben, dass "die Implementierungsklasse der List-Schnittstelle implementiert wird, um diese Rolle zu erfüllen". Die Quintessenz ist, dass der Benutzer, wenn er nur von der Schnittstelle abhängig ist, den Prozess ohne die Implementierungsklasse schreiben kann. Das ist genau "Trennung von Benutzer und Implementierungsklasse".

インターフェース.png

Zusammenfassung

Ich denke, ich habe verschiedene Dinge gesehen und die Bedeutung der Schnittstelle verstanden. Diese Ideen basieren jedoch auf der Annahme, dass die Implementierungsklasse gemäß der Rolle der Schnittstelle implementiert wird und diese Rolle zur Beschreibung der Verarbeitung des Benutzers verwendet wird. Daher ist es wichtig, die Rolle jeder Schnittstelle bei der Implementierung zu kennen, und Sie können die Vorteile maximieren, indem Sie Ihre eigene Schnittstelle unter Berücksichtigung der Rolle erstellen.

Recommended Posts

Bedeutung der aus der Java Collection gelernten Schnittstelle
[Java] Inhalt der Collection-Schnittstelle und der List-Schnittstelle
Abgelaufene Java-Sammlung
[Java] Bedeutung der serialVersionUID
Methodenname der statischen Factory-Methode, die aus Java 8 gelernt wurde
[Java] Komparator der Collection-Klasse
Java, Schnittstelle für Anfänger
Objektorientiertes Design aus "Gründliche Erfassung der Java SE 11 Silver-Problemsammlung"
Java (Schnittstelle)
[Java] -Schnittstelle
Java9-Sammlung
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
Was ich aus der Java-Geldberechnung gelernt habe
Java Reintroduction-Java Collection
[Java] -Schnittstelle
Eine Sammlung einfacher Fragen für Java-Anfänger
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
[Java] Funktionsschnittstelle
Über Schnittstelle, Java-Schnittstelle
[Java] Übersicht über Java
[Java] Sammlungsframework
ArrayList und die Rolle der Schnittstelle aus List
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
Wie schreibe ich Scala aus der Perspektive von Java
Java-Sprache aus der Sicht von Kotlin und C #
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde
Verwendung von Abstract Class und Interface in Java richtig
Java: Verwenden Sie Stream, um den Inhalt einer Sammlung zu sortieren
Deep Learning Java von Grund auf 6.2 Anfangswert des Gewichts
Informationen zur Java-Funktionsschnittstelle
Rufen Sie Java von JRuby aus auf
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Fragen zum Java-Sammlungsinterview
Aufrufbare Schnittstelle in Java
NIO.2 Überprüfung von Java
Bewertung von Java Shilber
Java-Standardfunktionstyp-Schnittstelle
Eval Java-Quelle von Java
Java - Vereinigung von Kommentaren
Greifen Sie über Java auf API.AI zu
Geschichte der Java-Annotationen
Java (Verdienste des Polymorphismus)
Von Java zu Ruby !!
NIO Bewertung von Java
Java-Lernnotiz (Schnittstelle)
[Java] Drei Funktionen von Java
Zusammenfassung der Java-Unterstützung 2018
Java, das Daten von Android zu Jetson Nanos ROS überspringt
Generieren Sie eine eindeutige Auflistung von Werten aus einer Auflistung, die doppelte Werte enthält
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
[Java] Struktur der Auflistungsklasse festlegen (zu HashSet und TreeSet)
Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt
[Java] Löschen Sie die angegebene Anzahl von Zeichen am Ende von StringBuilder
Generieren Sie Stream aus einem Array primitiver Typen in Java
Holen Sie sich mit Java eine nicht leere Sammlung aus einem optionalen Stream
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.