Quand utiliser des classes abstraites?

Voici l’article MSDN sur les classes abstraites , mais je ne comprends vraiment pas …

Quand devrais-je vraiment utiliser des classes abstraites? Quels sont les avantages d’utiliser des classes abstraites?

Les classes abstraites sont utiles lorsque vous avez besoin d’une classe à des fins d’inheritance et de polymorphism, mais cela n’a aucun sens d’instancier la classe elle-même, uniquement ses sous-classes. Ils sont généralement utilisés lorsque vous souhaitez définir un modèle pour un groupe de sous-classes partageant un code d’implémentation commun, mais vous souhaitez également garantir que les objects de la superclasse ne peuvent pas être créés.

Par exemple, supposons que vous deviez créer des objects Dog, Cat, Hamster et Fish. Ils possèdent des propriétés similaires telles que la couleur, la taille et le nombre de pattes, ainsi que le comportement, de sorte que vous créez une super-classe animale. Cependant, de quelle couleur est un animal? Combien de pattes un object animal possède-t-il? Dans ce cas, il n’est pas très judicieux d’instancier un object de type Animal mais uniquement ses sous-classes.

Les classes abstraites ont également l’avantage supplémentaire du polymorphism, vous permettant d’utiliser le type de la superclasse (abstraite) comme argument de méthode ou comme type de retour. Si, par exemple, vous aviez une classe PetOwner avec une méthode train (), vous pouvez la définir comme prenant un object de type Animal, par exemple train (Animal a) plutôt que de créer une méthode pour chaque sous-type d’Animal.

En utilisant des classes abstraites, nous pouvons rendre la classe plus générique.

Par exemple: si la classe A est une classe abstraite et que les classes classe B, classe C et classe D étendent la classe abstraite A, ces sous-classes hériteront d’une méthode déjà déclarée dans la classe abstraite A.

Vous les utilisez pour des classes qui ne seront jamais créées (si bien qu’elles n’existent pas), mais vous voulez en hériter pour des raisons de polymorphism.

Utilisez des classes abstraites lorsque vous définissez un comportement pour une classe de votre hiérarchie de classes qui ne sera jamais utilisée pour instancier un object directement.

Alors, pensez à vous comme Dieu pendant un moment. Vos classes CBabyBoy et CBanyGirl ne seraient pas abstraites, car ce sont des objects solides qui sont créés. D’un autre côté, vos classes CPerson et CAnimal seraient abstraites – elles sont utiles du sharepoint vue de la hiérarchie de types, mais vous ne lancez jamais CAnimal dingbat = new Animal();

Richard a fourni un exemple: une classe abstraite présente des avantages par rapport aux classes non abstraites.

Je voudrais append une table de faits pour choisir entre une classe abstraite et une interface. L’image peut être trouvée ici .

entrer la description de l'image ici

Fondamentalement, vous devriez utiliser une classe abstraite, quand une entité de votre hiérarchie aura logiquement une ou des méthodes qu’elle ne sait pas implémenter, mais ce sont ses descendants. Il y a des milliards d’exemples de “vie réelle” sur le web, vraiment)