Différence entre virtuel et abstrait

Différence entre virtuel et abstrait
Différence entre virtuel et abstrait

Vidéo: Différence entre virtuel et abstrait

Vidéo: Différence entre virtuel et abstrait
Vidéo: IPHONE 4S VS SAMSUNG GALAXY S2 - КАКОЙ ЕЩЕ МОЖНО БРАТЬ? СРАВНЕНИЕ! 2024, Juillet
Anonim

Virtuel vs Abstrait

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 dans ce que cela signifie dans différentes langues, les mots-clés virtuels et abstraits donnent une impression d'implémentation partielle des entités auxquelles ils s'attachent.

Résumé

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 sens que si le langage de programmation prend en charge l'héritage (possibilité de créer des sous-classes à partir de l'extension d'une classe). Les classes abstraites représentent généralement un concept abstrait ou une entité avec une implémentation partielle ou inexistante. Par conséquent, les classes abstraites agissent comme des classes parentes à partir desquelles les classes enfants sont dérivées, de sorte que la classe enfant partagera les fonctionnalités incomplètes de la classe parente et que des fonctionnalités pourront ê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. Tout cela signifie que, lorsque le programmeur nomme une classe en tant qu'abstrait, il dit que la classe sera incomplète et qu'elle contiendra des éléments qui devront être complétés par les sous-classes héritées. C'est une belle façon de créer un contrat entre deux programmeurs, ce qui simplifie les tâches de développement de logiciels. Le programmeur, qui écrit du code pour 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 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 soit dérivée d'une classe enfant, alors 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. Cependant, 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é Virtual est utilisé. Si la méthode est marquée Virtual, alors la fonction de la classe dérivée est appelée (le cas échéant) ou bien la fonction de la classe de base est 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 en plus, le mot clé override doit être utilisé pour modifier toutes les méthodes remplacées. Mais en Java, il n'y a pas de mot clé virtuel explicite. Toutes les méthodes non statiques sont considérées comme virtuelles. Les fonctions virtuelles sans corps sont appelées fonctions virtuelles pures. En Java et C, les méthodes abstraites sont en fait Pure Virtual.

Différence entre virtuel et abstrait

Bien qu'abstrait et virtuel soient deux mots-clés/concepts qui donnent un sens à l'implémentation incomplète de ses entités associées, ils ont leurs différences. Les méthodes abstraites (qui doivent être définies dans les classes abstraites) n'ont pas du tout d'implémentation, tandis que les méthodes virtuelles peuvent avoir une implémentation. 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.

Conseillé: