Question

J'ai une fonction que 2 classes dérivées utilisent, mais le troisième n'a pas, serait-il logique de laisser simplement dans la classe de base, même si l'une des 3 classes dérivées ne pas l'utiliser?

La seule façon pu penser interdisant la troisième classe consiste à créer essentiellement une classe intermédiaire qui est dérivé de la base, la 2 qui utilisent la fonction commune sont dérivées de la seconde classe.

Est-il possible d'empêcher la 3ème classe d'utiliser la fonction, tout en laissant les deux qui sont censés l'utiliser, l'utiliser?

Est-ce que semblent juste aller trop loin, je veux dire aussi longtemps que je ne suis pas « essayer » d'appeler la fonction de la 3e classe, il ne devrait pas être un problème, je ne me suis intéressé s'il y avait un moyen de empêcher tous ensemble sans beaucoup de tracas.

Était-ce utile?

La solution

Il n'y a pas moyen de le faire directement. En fait, lorsque vous sous-classe, vous dites la sous-classe est une version plus spécifique de la classe de base.

Dans ce cas, vous essayez de dire « la sous-classe est une version plus spécifique de la classe de base, except for the fact that it shouldn't be able to touch XXX ». C'est, en substance, il ne respecte pas le Liskov principe de substitution .

La meilleure façon de gérer est d'ajouter une seconde classe de base dans la hiérarchie, ce qui est je crois que la solution que vous mentionnez.

En gros, faites votre hiérarchie:

base
 | \----   subclass without feature available
 |
 \--base+feature
       \--subclass one with specific feature
       \--subclass two with specific feature

Autres conseils

Vous pouvez faire cette fonction virtuelle. Ensuite passer outre la fonction dans la 3ème classe et lancer une exception. Elle permettra d'éviter aux développeurs d'utiliser la fonction dans la 3ème classe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top