2010-06-01 14 views
5

Vous avez une classe qui correspond parfaitement à un résumé, mais cette classe ne peut pas fonctionner normalement sans les données fournies par la classe dérivée. Il n'est pas pratique de transmettre toutes les données au constructeur car elles ne sont pas toutes nécessaires, et beaucoup d'entre elles peuvent être dynamiques (résultat de la fonction enfant).Quelle est la pratique courante de terminer une classe abstraite?

Quelles sont les meilleures pratiques pour composer une telle structure? Ou est-ce un mauvais design en premier lieu?

  1. Déclarez les fonctions abstraites que l'enfant doit implémenter?
  2. Déclarez les fonctions normales, qui sont remplacées dans la classe enfant?

Répondre

1

S'il existe un comportement par défaut raisonnable de la fonction sur laquelle on peut se fier dans la majorité des enfants, il peut être implémenté comme un comportement normal. Sinon (pas de comportement par défaut et/ou la plupart des enfants doivent le remplacer), il vaut mieux le déclarer comme abstrait. L'effet secondaire est que vous n'oublierez jamais de le définir dans une classe enfant parce que l'échec de le faire sera immédiatement signalé.

L'autre possibilité est l'utilisation de conteneurs (par exemple, des tableaux) pour les données spécifiques aux classes enfants, mais qui peuvent toujours faire l'objet de vérifications générales ou d'autres traitements pouvant être effectués dans l'ancêtre commun. De cette façon, vous définissez une variable qui contient les données, mais les données elles-mêmes sont renseignées dans les enfants. Le code de la classe parent peut itérer sur ce conteneur et effectuer un travail de routine sur tous les éléments.

+0

Bonne réponse, merci. –