Ich bin oft auf den Begriff "Programmieren auf eine Schnittstelle anstatt auf eine Implementierung" gestoßen, und ich denke, ich verstehe irgendwie, was das bedeutet. Aber ich möchte sicherstellen, dass ich die Vorteile und möglichen Implementierungen verstehe.
"Programmieren auf eine Schnittstelle" bedeutet, dass man sich, wenn möglich, auf eine abstraktere Ebene einer Klasse (eine Schnittstelle, eine abstrakte Klasse oder manchmal eine Art Superklasse) beziehen sollte, anstatt auf eine konkrete Implementierung zu verweisen.
Ein gängiges Beispiel in Java ist die Verwendung von:
List myList = new ArrayList();
statt ArrayList myList = new ArrayList();
.
Ich habe dazu zwei Fragen:
Ich möchte sicherstellen, dass ich die Hauptvorteile dieses Ansatzes verstehe. Ich denke, die Vorteile liegen hauptsächlich in der Flexibilität. Das Deklarieren eines Objekts als Referenz auf höherer Ebene anstelle einer konkreten Implementierung ermöglicht mehr Flexibilität und Wartbarkeit während des gesamten Entwicklungszyklus und des gesamten Codes. Ist das richtig? Ist Flexibilität der Hauptvorteil?
Gibt es mehr Möglichkeiten, eine Schnittstelle zu programmieren? Oder ist "eine Variable als Schnittstelle anstatt als konkrete Implementierung deklarieren" die einzige Implementierung dieses Konzepts?
Ich spreche nicht über das Java-Konstrukt-Interface . Ich spreche über das OO-Prinzip "Programmieren auf eine Schnittstelle, keine Implementierung". In diesem Prinzip bezieht sich die Welt "Schnittstelle" auf jeden "Supertyp" einer Klasse - eine Schnittstelle, eine abstrakte Klasse oder eine einfache Superklasse, die abstrakter und weniger konkret ist als konkretere Unterklassen.