-
Der code smell beginnt beim instanceof…
Autor: finzi 19.09.20 - 11:45
Bin ich der einzige, dem es bei dem im Artikel angeführten Beispiel kalt den Rücken runterläuft? In meiner Erfahrungswelt deutet in objektorientiertem Code beinahe jegliche Verwendung von instanceof auf ein massives Defizit der Architektur hin – im Besonderen in switch-artigen Konstrukten.
Im konkreten Fall würde man wohl der jedem Tier eine print-Methode geben wollen, die dann entsprechend zu implementieren ist. -
Re: Der code smell beginnt beim instanceof…
Autor: Schard 19.09.20 - 12:59
Für den Java-Fall hast du Recht. Allerdings würde ich es nicht pauschal auf objektorientierten Code erweitern. Beim objektorientiertem Arbeiten mit stark, aber dynamisch typisierenden Sprachen, wie z.B. Python, ist instanceof manchmal hilfreich.
-
Re: Der code smell beginnt beim instanceof…
Autor: Lord Gamma 19.09.20 - 13:23
Schard schrieb:
--------------------------------------------------------------------------------
> Für den Java-Fall hast du Recht. Allerdings würde ich es nicht pauschal auf
> objektorientierten Code erweitern. Beim objektorientiertem Arbeiten mit
> stark, aber dynamisch typisierenden Sprachen, wie z.B. Python, ist
> instanceof manchmal hilfreich.
Objektorientierter Code bedeutet in der Regel, dass Polymorphie so versteckt ist, dass man die Virtual Table nicht manuell pflegen muss.
Siehe auch [www.youtube.com] -
Re: Der code smell beginnt beim instanceof…
Autor: magslamenas 19.09.20 - 14:42
Ich denke, das Beispiel war absichtlich stark vereinfacht gehalten. Spannender wird es wohl, wenn du aufgrund der Klasse des Objekts Aktionen ausführen möchtest, die das Objekt aufgrund der Architektur nicht kennt. Dann ist es auch deutlich von Vorteil, wenn der Compiler dich auf fehlende Optionen für neue Implementierungen des Interfaces hinweist.
-
Re: Der code smell beginnt beim instanceof…
Autor: BLi8819 19.09.20 - 18:43
Wenn ich an einer Stelle eine Logik brauche, wo ich anhand des Objekttyps bestimmte Dinge ausführen möchte, dann möchte ich diese Logik nicht zwangsläufig ins Interface oder in die Vererbungsh. verschieben.
-
Re: Der code smell beginnt beim instanceof…
Autor: Das Osterschnabeltier 19.09.20 - 20:28
finzi schrieb:
--------------------------------------------------------------------------------
> Bin ich der einzige, dem es bei dem im Artikel angeführten Beispiel kalt
> den Rücken runterläuft? In meiner Erfahrungswelt deutet in
> objektorientiertem Code beinahe jegliche Verwendung von instanceof auf ein
> massives Defizit der Architektur hin – im Besonderen in
> switch-artigen Konstrukten.
> Im konkreten Fall würde man wohl der jedem Tier eine print-Methode geben
> wollen, die dann entsprechend zu implementieren ist.
Das Beispiel verstehe ich auch nicht ganz, denn dazu braucht es kein sealed *shrug*.
Ein großer Vorteil von sealed interfaces in switches ist, dass es eine garantiert begrenzte Anzahl an möglichkeiten gibt. Und damit ähnlich wie enums auf "exhaustiveness" geprüft werden kann, wodruch ein ein "default" unnötig wird.