est-ce une pratique raisonnable d'étendre une classe juste pour réutiliser une seule fonction?

10

Je développe une gamme de filtres post pour un site wordpress, et j'ai construit les 4 premiers avec une seule classe.

Les deux derniers ont une portée suffisamment différente pour ne partager qu'une seule fonction (la fonction de production des liens finaux) dans leurs classes.

Est-il raisonnable, dans ce cas ou dans un certain nombre de cas hypothétiques similaires, d'étendre la classe d'origine afin d'avoir cette fonctionnalité, ou existe-t-il un meilleur moyen?

Doux Fuzz
la source
Je ne comprends pas cette question. Que voulez-vous dire par construire des choses avec une classe? Ces classes héritent-elles de quelque chose? La classe au sommet de la hiérarchie n'aurait-elle pas déjà la fonction commune?
David Thornley

Réponses:

19

Non, si les deux classes sont si différentes qu'elles ne partagent qu'une seule fonction, il y a de fortes chances qu'elles ne soient pas interchangeables - et donc elles briseraient le principe de la sous- station liskov .

Dériver d'une classe de base uniquement s'il est logique de le faire. Le partage d'un seul morceau de code est rarement une justification de l'héritage :)

Dans cet exemple particulier, il semble que vous souhaitiez réutiliser cette fonction via la composition à la place ...

MattDavey
la source
3
Préférez la composition à l'héritage! Dans la plupart des cas, cela vous simplifiera la vie à long terme.
Travis
Composition FTW!
back2dos
Il convient de noter que ma réponse est essentiellement la même que @Sardathrion, je viens de faire le lien avec les principes pertinents :)
MattDavey
7

Si une description de classe contient le mot « et », elle doit être divisée en deux (ou plus) classes. À première vue, vous pourriez faire de cette fonction un membre d'une autre classe référencée par celles que vous avez actuellement.

Sardathrion - contre les abus SE
la source