Hat Basisklasse Methoden die beide subklassen gleich ausführen?
-
Hallo,
ich frage mich was der sinn einer basisklasse ist. Ich habe methoden die von den erbenden subklassen gleich wie auch verschieden aussehen. Also methoden die beide subklassen gleich ausführen aber dann auch methoden die verschieden ausgeführt werden je nach subklasse.
Ist es da sinnvoll oder gebräuchlich die implementierungen die beide subklassen gleich machen in die basisklasse zu packen?
danke für kurze aufklärung
-
oder anders gefragt: darf/sollte man virtuelle methoden und nicht virtuelle methoden zusammenfassen in einer abstrakten basisklasse??
-
JA
-
Meistens ...
-
GastmitFrage schrieb:
ich frage mich was der sinn einer basisklasse ist.
Funktionalität, die von mehreren abgeleiteten Klassen genutzt wird, in einer einheitlichen Schnittstelle bereitzustellen. Dazu können sowohl Default-Implementierungen sowie auch rein virtuelle Funktionen angebracht sein, abhängig vom konkreten Szenario.
GastmitFrage schrieb:
Ist es da sinnvoll oder gebräuchlich die implementierungen die beide subklassen gleich machen in die basisklasse zu packen?
Ja, sofern eventuelle weitere abgeleitete Klassen diese Aktionen ebenfalls unterstützen. Damit verschaffst du dir die Möglichkeit, Funktionen von der Basisklasse aus aufzurufen (je nachdem mit Polymorphie) und vermeidest Codeduplizierung.
-
Wobei man dennoch hinzufügen sollte das man Vererbung nicht als Lösung für alle Probleme verwenden sollte... (In der Regel sollte man sich an die IST-EIN Regel halten...).
-
asc schrieb:
Wobei man dennoch hinzufügen sollte das man Vererbung nicht als Lösung für alle Probleme verwenden sollte... (In der Regel sollte man sich an die IST-EIN Regel halten...).
Genau, guter Hinweis. Vererbung wird leider viel zu oft eingesetzt, wo Aggregation angebrachter wäre. Nur aus Bequemlichkeit erbt man nicht, dafür ist der Preis meist zu hoch. Durch solche leichtsinnigen Entscheide schränkt man sich nämlich stark im Design ein (grössere Abhängigkeiten der einzelnen Programmbestandteile und dadurch verlorene Flexibilität), was sich unter anderem negativ auf die Wartung auswirkt.
Was passiert, wenn man sich nicht an die IS-A-Regel hält, sieht man hier.
