2011-02-27 6 views
0

Un guide de conception de classe trouvé dans Sutter & Le livre de normes de codage d'Alexandrescu, entre autres, est de rendre les classes de base abstraites, de sorte qu'on ne puisse pas les instancier. C'est pour prévenir a.o. tranchage et problèmes d'assignation polymorphique et de copie.héritage de classes feuille

Cependant, lors de l'utilisation d'une bibliothèque de classes comme par ex. Qt, il est courant d'hériter des classes concrdete de la bibliothèque pour ajouter un comportement supplémentaire. Par exemple, on pourrait créer une classe MyListBox qui hérite de QListBox, en ajoutant un comportement spécifique à l'application pour toutes les zones de liste dans mon application.

Comment cette pratique courante peut-elle être réconciliée avec le conseil d'avoir des classes de base non instanciables?

Répondre

2

Votre première phrase contient la réponse que vous recherchez:

Une conception de classe ligne directrice trouvé dans Sutter & normes de codage de Alexandrescu livre

(mine de l'accent).

C'est juste que - une ligne directrice, pas une règle gravée dans la pierre. Si vous avez des limitations techniques spécifiques, par exemple dans la bibliothèque que vous utilisez, vous pouvez l'ignorer si l'alternative donnée à ce moment particulier est bien pire (comme avoir à utiliser un modèle qui triple la quantité totale de code ou avoir à réécrire la bibliothèque).

Tout le point de ma réponse: Tous ces modèles, lignes directrices et meilleures pratiques sont des moyens par lesquels vous pouvez atteindre votre objectif de programmation. Ils ne sont pas le but, eux-mêmes.

2

Cette directive s'applique uniquement aux classes de base ne doit pas être instanciée (généralement parce que cela n'aurait aucun sens). Ce n'est pas le cas dans votre exemple: par exemple, simplement parce que vous avez hérité de QDialog ne veut pas dire que vous ne voudriez pas utiliser les anciens QDialog s ailleurs dans le code.

Questions connexes