Quand et pourquoi utiliser des classes/méthodes abstraites? [fermé]

j'ai quelques questions de base sur les classes/méthodes abstraites.Je sais que l'utilisation de base des classes abstraites est de créer des modèles pour les classes futures. Mais quel plus utilise ? Quand devriez-vous les préférer aux interfaces et quand Non ? Aussi, quand les méthodes abstraites sont-elles utiles ?

39
demandé sur casperOne 2010-07-27 18:46:41

6 réponses

je connais l'utilisation de base des classes abstraites est de créer des modèles pour l'avenir classe. Mais quel plus utilise d'entre eux?

non seulement vous pouvez définir un modèle pour les enfants, mais les classes abstraites offrent l'avantage supplémentaire de vous permettre de définir la fonctionnalité que vos classes enfants peuvent utiliser plus tard.

Vous ne pouvez pas fournir une implémentation pour une Interface.

Quand devriez-vous les préférez plus interfaces et quand pas?

Les Classes abstraites sont un bon ajustement si vous voulez fournir des détails d'implémentation à vos enfants mais ne voulez pas permettre à une instance de votre classe d'être instanciée directement (ce qui vous permet de définir partiellement une classe).

si vous voulez simplement définir un contrat pour les objets à suivre, utilisez une Interface.

aussi quand les méthodes abstraites sont-elles utiles?

Les méthodes abstraites sont utiles de la même manière que définir des méthodes dans une Interface est utile. C'est une façon pour le concepteur de la classe abstraite de dire "n'importe quel de mes enfants doit mettre en œuvre cette méthode".

51
répondu Justin Niessner 2010-07-27 14:53:02

lire l'article suivant http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/

Classes Abstraites

- > lorsque vous avez une exigence où votre classe de base devrait fournir la valeur par défaut mise en œuvre de certaines méthodes alors que d'autres méthodes doivent être ouverts pour être remplacées par les classes enfant utilisez des classes de résumé.

Pour par exemple à nouveau prendre l'exemple du Catégorie de véhicule ci-dessus. Si nous voulons que tous classe dérivant du véhicule à mettre en œuvre la Voiture() dans un voie fixe alors que les autres méthodes peuvent être dépassés par les classes pour enfants. Dans un tel scénario nous mettons en œuvre la Classe du véhicule en tant que classe abstraite avec une implémentation de Drive tout en laissez les autres méthodes / propriétés comme abstrait pour qu'ils puissent être remplacées par les classes enfant.

–> Le but d'une classe abstraite est afin de fournir une définition commune d'un classe de base qui multiple dérivée les classes peuvent partager.

Par exemple, une bibliothèque de classe peut définir une classe abstraite qui est utilisé comme un paramètre pour plusieurs de ses fonctions et exiger des programmeurs utilisant cette bibliothèque de fournir leur propre mise en œuvre de la classe en créant une classe dérivée.

utilisez une classe abstraite

lors de la création d'une bibliothèque de classe sera largement distribué ou réutilisé-surtout pour les clients, utilisez un abstrait de la classe, de préférence à une interface; parce que, il simplifie la gestion des versions. C'est la pratique utilisée par l'équipe de Microsoft qui a développé la bibliothèque de la classe de Base. (COM a été conçu autour des interfaces.) Utiliser un classe abstraite pour définir une base commune classe pour une famille de types. Utiliser un classe abstraite pour fournir défaut comportement. Sous-classe uniquement une classe de base dans une hiérarchie dont la classe appartient logiquement.

5
répondu Ran 2010-07-27 14:55:07

à un très haut niveau:

Abstraction de toute nature revient à séparer les préoccupations. Le code "Client" d'une abstraction ne se soucie pas de la façon dont le contrat exposé par l'abstraction est rempli. Vous ne vous souciez généralement pas si une classe string utilise une implémentation de stockage interne nulle-terminated ou de longueur de tampon-tracée, par exemple. L'Encapsulation cache les détails, mais en faisant des classes / méthodes/etc. abstrait, vous permettez à la mise en œuvre de modifier ou de nouvelles mises en œuvre à ajouté sans affecter le code client.

2
répondu David Gladfelter 2010-07-27 14:53:12

en général, on utilise une classe abstraite pour fournir une fonctionnalité incomplète qui sera étoffée par des sous-classes de béton. Elle peut fournir des méthodes qui sont utilisées par ses sous-classes; elle peut aussi représenter un noeud intermédiaire dans la hiérarchie de classe, pour représenter un groupement commun de sous-classes de béton, les distinguant d'une certaine manière d'autres sous-classes de sa superclasse. Depuis une interface ne peut pas dériver d'une classe, c'est une autre situation où une classe (abstraite ou autrement) serait nécessaire, plutôt qu'une interface.

une bonne règle empirique est que seuls les noeuds de feuilles d'une hiérarchie de classe devraient jamais être instanciés. Non nœuds feuilles de l'abrégé est un moyen facile de s'assurer que.

1
répondu Carl Manaster 2010-07-27 14:56:22

Abstract les classes/méthodes sont généralement utilisées lorsqu'une classe fournit des fonctionnalités de haut niveau mais laisse de côté certains détails à implémenter par les classes dérivées. Le fait de rendre la classe/méthode abstraite garantit qu'elle ne peut pas être utilisée seule, mais doit être spécialisée pour définir les détails qui ont été omis de la mise en œuvre de haut niveau. C'est le plus souvent utilisé avec la méthode de modèle modèle:

http://en.wikipedia.org/wiki/Template_method_pattern

1
répondu bshields 2010-07-27 14:56:27

si vous êtes à la recherche d'une bonne "ingénierie logicielle" et d'une bonne "documentation de conception", alors je vous conseille d'y jeter un oeil:

https://prof.hti.bfh.ch/index.php?id=3494&L=2

A propos des classes abstraites introduction:

https://prof.hti.bfh.ch/fileadmin/home/due1/uml_dp/script/udp-advancedclassmodeling-200910.pdf

0
répondu Daniel Gartmann 2018-09-19 15:02:41