Diferència entre virtual i abstracte

Diferència entre virtual i abstracte
Diferència entre virtual i abstracte

Vídeo: Diferència entre virtual i abstracte

Vídeo: Diferència entre virtual i abstracte
Vídeo: Difference between IAAS, PAAS, SAAS with real life example 2024, De novembre
Anonim

Virtual vs abstracte

Virtual i Abstract són dues paraules clau que s'utilitzen en la majoria de llenguatges de programació orientats a objectes (OO) com Java i C. Tot i que hi ha petites diferències en el que significa en diferents idiomes, tant les paraules clau virtuals com les abstractes proporcionen una sensació d'implementació parcial a les entitats a les quals s'adjunta.

Abstract

Típicament, les classes abstractes, també conegudes com a classes base abstractes (ABC), no es poden crear una instància (no es pot crear una instància d'aquesta classe). Per tant, les classes abstractes només tenen sentit si el llenguatge de programació admet l'herència (capacitat de crear subclasses a partir d'ampliar una classe). Les classes abstractes solen representar un concepte o entitat abstracte amb implementació parcial o sense implementació. Per tant, les classes abstractes actuen com a classes pares de les quals es deriven les classes fills, de manera que la classe secundaria compartirà les característiques incompletes de la classe pare i es poden afegir funcionalitats per completar-les. Les classes abstractes poden contenir mètodes abstractes. Les subclasses que estenen una classe abstracta poden implementar aquests mètodes abstractes (heretats). Si la classe fill implementa tots aquests mètodes abstractes, és una classe concreta. Però si no ho fa, la classe fill també es converteix en una classe abstracta. El que vol dir tot això és que, quan el programador designa una classe com a Resum, està dient que la classe estarà incompleta i tindrà elements que hauran de completar les subclasses hereves. Aquesta és una bona manera de crear un contracte entre dos programadors, que simplifica les tasques en el desenvolupament de programari. El programador, que escriu codi per heretar, ha de seguir exactament les definicions del mètode (però, per descomptat, pot tenir la seva pròpia implementació). En Java i C, les classes i mètodes abstractes es declaren mitjançant la paraula clau Abstract.

Virtual

Els mètodes/funcions virtuals ofereixen la possibilitat de substituir opcionalment el seu comportament mitjançant una classe hereva (utilitzant una funció amb la mateixa signatura). El concepte de funció virtual és important en el següent escenari. Suposem que una classe és derivada per una classe fill, aleshores, sempre que s'utilitza un objecte de la classe derivada, pot fer referència a un objecte de la classe base o la classe derivada. Però, el comportament de la trucada de mètodes pot ser ambigu si els mètodes de classe base s'anul·len. Per tant, per resoldre aquesta ambigüitat, s'utilitza la paraula clau Virtual. Si el mètode està marcat Virtual, llavors la funció de la classe derivada s'anomena (si n'hi ha) o, en cas contrari, s'anomena la funció de la classe base. Per exemple, en C++, la paraula clau Virtual s'utilitza exactament per a aquest propòsit. En C, la paraula clau Virtual s'utilitza de manera similar, però a més, s'ha d'utilitzar la substitució de la paraula clau per modificar tots els mètodes anul·lats. Però a Java, no hi ha cap paraula clau virtual explícita. Tots els mètodes no estàtics es consideren virtuals. Les funcions virtuals sense cos s'anomenen funcions virtuals pures. En Java i C, els mètodes abstractes són de fet Pure Virtual.

Diferència entre virtual i abstracte

Tot i que Abstract i Virtual són dues paraules clau/conceptes que proporcionen un significat d'implementació incompleta a les seves entitats associades, sí que tenen les seves diferències. Els mètodes abstractes (que s'han de definir dins de les classes abstractes) no tenen cap implementació, mentre que els mètodes virtuals poden tenir una implementació. Si els mètodes abstractes s'amplien amb una classe concreta, s'han d'implementar tots els mètodes abstractes heretats, mentre que els mètodes virtuals heretats es poden substituir o no.

Recomanat: