Interface statt konkreter Klasse

Aus Programmieren-Wiki
🚧 Diese Seite befindet sich in Bearbeitung 🚧
🤓 Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 3 annotiert und ab Blatt 4 abgezogen wird. 🤓

Beschreibung

Es ist bestimmt schon aufgefallen, dass es bei zum Beispiel Listen, Maps oder ähnlichem mehrere Wege gibt, diese zu erstellen:

  1. LinkedList list = new LinkedList();
  2. List list = new LinkedList();

Welche Methode ist besser? Gibt es überhaupt ein "besser"?

Tatsächlich gibt es gute Gründe, den zweiten Weg zu bevorzugen:

Zum einen wird der Code durch das Loslösen einer konkreten Klasse einfacher zu verwenden. Wir können den Personen, die unser Projekt verwenden wollen in der Dokumentation also nur das nötigste an Information übergeben: Es wird eine Liste gebraucht. Welche das genau sein muss, ist dabei erstmal egal.

Dazu lässt sich der Quellcode einfacher warten. Indem wir ein Interface angeben statt einer konkreten Klasse, können wir später Änderungen der Datenstruktur realisieren, ohne weitere Kompilierfehler zu erzeugen.

So können wir zum Beispiel aus List list = new LinkedList() ganz einfach List list = new ArrayList() machen, ohne, dass es zu Fehlern kommt. (Es kann natürlich sein, dass dadurch die Implementierung überarbeitet werden muss. Das Programm kompiliert aber trotzdem).

Das Konzept und die damit vermittelte Richtlinie ist auch bekannt als "Programming to an Interface", also das Programmieren gegen eine Schnittstelle.

Allgemein ist das Interface einer Klasse zu bevorzugen.


Negativbeispiel

ArrayList list = new ArrayList();
// I dont like this, lets change it
ArrayList list = new LinkedList();
// Compile-Error

Positivbeispiel

List list = new ArrayList();
// I again dont like this, lets change it again
List list = new LinkedList();
// Still works!!