Différence entre virtuel et abstrait

Virtuel vs Résumé

Virtual et Abstract sont deux mots-clés utilisés dans la plupart des langages de programmation orientés objet (OO) tels que Java et C #. Bien qu'il existe de légères différences de signification dans les différentes langues, les mots clés Virtual et Abstract donnent une idée de la mise en œuvre partielle des entités auxquelles il est attaché..

Abstrait

En règle générale, les classes abstraites, également appelées classes de base abstraites (ABC), ne peuvent pas être instanciées (une instance de cette classe ne peut pas être créée). Ainsi, les classes abstraites n'ont de signification que si le langage de programmation prend en charge l'héritage (possibilité de créer des sous-classes à partir d'une extension de classe). Les classes abstraites représentent généralement un concept abstrait ou une entité avec une implémentation partielle ou nulle. Par conséquent, les classes abstraites agissent comme des classes parent desquelles les classes enfant sont dérivées, de sorte que la classe enfant partage les caractéristiques incomplètes de la classe parent et que des fonctionnalités puissent être ajoutées pour les compléter. Les classes abstraites peuvent contenir des méthodes abstraites. Les sous-classes étendant une classe abstraite peuvent implémenter ces méthodes abstraites (héritées). Si la classe enfant implémente toutes ces méthodes abstraites, il s'agit d'une classe concrète. Mais si ce n'est pas le cas, la classe enfant devient également une classe abstraite. Cela signifie simplement que lorsque le programmeur désigne une classe en tant qu'abstrait, elle dit que la classe sera incomplète et qu'elle comportera des éléments devant être complétés par les sous-classes héritées. C'est un bon moyen de créer un contrat entre deux programmeurs, ce qui simplifie les tâches de développement logiciel. Le programmeur, qui écrit le code à hériter, doit suivre exactement les définitions de la méthode (mais peut bien sûr avoir sa propre implémentation). En Java et en C #, les classes et méthodes abstraites sont déclarées à l'aide du mot clé Abstract..

Virtuel

Les méthodes / fonctions virtuelles offrent la possibilité de remplacer éventuellement son comportement par une classe héritante (en utilisant une fonction avec la même signature). Le concept de fonction virtuelle est important dans le scénario suivant. Supposons qu'une classe est dérivée par une classe enfant, puis chaque fois qu'un objet de la classe dérivée est utilisé, il peut faire référence à un objet de la classe de base ou de la classe dérivée. Toutefois, le comportement d'appel de méthode peut être ambigu si les méthodes de la classe de base sont remplacées. Ainsi, afin de résoudre cette ambiguïté, le mot clé virtuel est utilisé. Si la méthode est marquée comme virtuelle, la fonction de la classe dérivée est appelée (le cas échéant) ou la fonction de la classe de base est également appelée. Par exemple, en C ++, le mot-clé Virtual est utilisé exactement à cette fin. En C #, le mot-clé Virtual est utilisé de la même manière, mais il convient également d'utiliser le mot-clé override pour modifier toutes les méthodes remplacées. Mais en Java, il n’existe pas de mot clé virtuel explicite. Toutes les méthodes non statiques sont considérées comme virtuelles. Les fonctions virtuelles sans corps s'appellent des fonctions virtuelles pures. En Java et C #, les méthodes abstraites sont en fait Pure Virtual.

Différence entre virtuel et abstrait

Bien que Abstract et Virtual soient deux mots-clés / concepts qui donnent une signification d'implémentation incomplète à ses entités associées, ils ont leurs différences. Les méthodes abstraites (qui doivent être définies dans des classes abstraites) n'ont pas du tout d'implémentation, alors que les méthodes virtuelles peuvent en avoir une. Si les méthodes abstraites sont étendues par une classe concrète, toutes les méthodes abstraites héritées doivent être implémentées, tandis que les méthodes virtuelles héritées peuvent ou non être remplacées..