Frage zu abstrakten Klassen bzw. der Polymorphie?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Abstrakt bedeutet ja gerade, dass da nichts implementiert wurde.

Du überschreibst sie also nicht, sondern gibst ihr erst in der "Unterklasse" eine Funktion.

Der Sinn ist, dass du keine Instanz von einem Tier haben kannst. Es muss schon ein konkretes Tier sein


grtgrt  04.02.2021, 17:12

Die abstrakte Klasse definiert - ein für alle Mal -, was allen Tieren gemeinsam ist. Dies führt zu deutlich weniger Redundanz im Code.

1

Der Typ in dem Video hat mit "alter" einfach nur ein unpassendes (lies: falsches) Beispiel für eine abstrakte Methode gewählt, weil die Methode in beiden Subklassen gleich umgesetzt wird. Eine abstrakte Methode nimmst du, wenn sich die Funktionalität in den Subklassen unterscheiden soll.

Also angenommen, wir wollen, dass ein Tier einen Laut abgeben kann - ein Schaf soll "Mäh" und eine Kuh "Muh" zurückgeben. Dann könntest du eine Basisklasse "Tier" anlegen, in der das Alter des Tieres ausgerechnet wird (weil das bei allen Tieren gleich funktioniert) und eine abstrakte Methode "machKrach()", die die beiden Subklassen dann implementieren müssen und die "Mäh" bzw. "Muh" zurückgeben. Der alternative Entwurf wäre, dass du zwei Klassen "Schaf" und "Kuh" anlegst, die von nichts erben und beide das Alter des Tieres (auf identische Weise) ausrechnen - und damit hättest du dann tatsächlich den doppelten Code, den du nicht haben möchtest.


NickHerr1 
Fragesteller
 04.02.2021, 18:36

Erstmal Danke für die Antwort

Könnte man nicht auch einfach den Laut des Tieres als parameter übergeben und sich die Mühe sparen oder gibt es Anwendungszwecke wo sich abstrakte mehr eignen?

LG

0
bluebird5  04.02.2021, 19:00
@NickHerr1
Könnte man nicht auch einfach den Laut des Tieres als parameter übergeben

Das, was du beschreibst, ist im Prinzip das Strategy-Pattern. Ebenfalls ein Weg, um das Problem zu lösen.

https://www.philipphauer.de/study/se/design-pattern/strategy.php

Was nun besser ist, kommt meiner Meinung nach drauf an. Wenn du mehrere Klassen hast, die sich sehr ähnlich sind, dann sind abstrakte Methoden schon okay. Wenn es darum geht, dass du das Verhalten der Klassen selbst öfters anpassen musst, dann ist die Strategy besser. Für jemanden, der gerade erst seit kurzem programmieren lernt, ist das aber vielleicht noch etwas hochgegriffen.

Wichtig ist, dass man es vermeidet, den gleichen Code doppelt zu haben, aber das hast du ja schon richtig erkannt.

0