Interface statt konkreter Klasse: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
{{ | {{CategoryBlock | ||
| | |Baustelle=Ja | ||
| | |Java Grundlagen=Nein | ||
| | |Organisation=Nein | ||
|Programmierstil=Nein | |||
|Bewertungsrichtlinie=Ja | |||
|blattAnnotation=3 | |||
|blattAbzug=4 | |||
}} | |||
{{Inhaltsblock | |||
|vorher==== Beschreibung === | |||
Es ist bestimmt schon aufgefallen, dass es bei zum Beispiel Listen, Maps oder ähnlichem mehrere Wege gibt, diese zu erstellen: | |||
#<syntaxhighlight inline lang="Java">LinkedList list = new LinkedList();</syntaxhighlight> | #<syntaxhighlight inline lang="Java">LinkedList list = new LinkedList();</syntaxhighlight> | ||
#<syntaxhighlight inline lang="Java">List list = new LinkedList();</syntaxhighlight> | #<syntaxhighlight inline lang="Java">List list = new LinkedList();</syntaxhighlight> | ||
| Zeile 19: | Zeile 27: | ||
'''Allgemein ist das Interface einer Klasse zu bevorzugen.''' | '''Allgemein ist das Interface einer Klasse zu bevorzugen.''' | ||
| | }} | ||
| | {{Inhaltsblock | ||
ArrayList list = new ArrayList(); | |color=red | ||
|vorher=Negativbeispiel: | |||
|Beispiel=ArrayList list = new ArrayList(); | |||
// I dont like this, lets change it | // I dont like this, lets change it | ||
ArrayList list = new LinkedList(); | ArrayList list = new LinkedList(); | ||
// Compile-Error | // Compile-Error | ||
|beispielname=InterfaceBad | |||
| | }} | ||
List list = new ArrayList(); | {{Inhaltsblock | ||
|color=green | |||
|vorher=Positivbeispiel: | |||
|Beispiel=List list = new ArrayList(); | |||
// I again dont like this, lets change it again | // I again dont like this, lets change it again | ||
List list = new LinkedList(); | List list = new LinkedList(); | ||
// Still works!! | // Still works!! | ||
|beispielname=InterfaceGood | |||
}} | |||
{{Bewertungsrichtlinie | |||
|baustelle=Ja | |||
|blatt=3 | |||
|beschreibung= | |||
|schweregrad=leicht | |||
|negativ=<syntaxhighlight lang="Java"> | |||
</syntaxhighlight> | |||
|positiv=<syntaxhighlight lang="Java"> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
|weiterlesen=Nein | |weiterlesen=Nein | ||
}} | }} | ||
Version vom 13. Oktober 2025, 15:35 Uhr
| 🚧 | 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:
LinkedList list = new LinkedList();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.
| 🚧 | Diese Seite befindet sich in Bearbeitung | 🚧 |
| 🤓 | Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 3 annotiert und ab Blatt 4 abgezogen wird. | 🤓 |