Különbség a virtuális és az absztrakt között

Virtuális vs absztrakt

A virtuális és az absztrakt két kulcsszó, amelyet a legtöbb objektum-orientált (OO) programozási nyelvben használnak, mint például a Java és a C #. Bár vannak eltérések abban, hogy mit jelent ez a különböző nyelveken, a virtuális és az absztrakt kulcsszavak részleges végrehajtást jelentenek azokhoz az entitásokhoz, amelyekhez hozzákapcsolódik.

Absztrakt

Általában az absztrakt osztályok, más néven absztrakt alaposztályok (ABC) is nem realizálhatók (az osztály példánya nem hozható létre). Tehát az absztrakt osztályoknak csak akkor van értelme, ha a programozási nyelv támogatja az öröklést (képesség alosztályok létrehozására az osztály kiterjesztéséből). Az absztrakt osztályok általában egy elvont fogalmat vagy entitást képviselnek, részleges vagy nem megvalósított formában. Ezért az absztrakt osztályok szülőosztályként működnek, ahonnan a gyermek osztályok származnak, így a gyermekosztály megosztja a szülői osztály hiányos tulajdonságait, és kiegészíthető a funkciók kiegészítéséhez. Az absztrakt osztályok tartalmazhatnak absztrakt módszereket. Az elvont osztályt kiterjesztő alosztályok megvalósíthatják ezeket (örökölt) absztrakt módszereket. Ha a gyermekosztály végrehajtja az összes ilyen absztrakt módszert, akkor ez egy konkrét osztály. De ha nem, akkor a gyermekosztály absztrakt osztálytá válik. Mindez azt jelenti, hogy amikor a programozó osztályt jelöl absztraktnak, azt mondja, hogy az osztály hiányos lesz, és olyan elemekkel fog rendelkezni, amelyeket az öröklő alosztályoknak ki kell tölteniük. Ez egy jó módszer a két programozó közötti szerződés megkötésére, amely egyszerűsíti a szoftverfejlesztés feladatait. A programozónak, aki az örökítéshez kódot ír, pontosan be kell tartania a módszer meghatározásait (de természetesen megvan a maga megvalósítása). A Java és a C # esetében az absztrakt osztályokat és módszereket az absztrakt kulcsszó használatával deklaráljuk.

tényleges

A virtuális módszerek / funkciók képesek arra, hogy opcionálisan felülbírálják viselkedését egy öröklő osztály segítségével (ugyanazzal az aláírással rendelkező funkció használata). A virtuális funkció fogalma fontos a következő forgatókönyvben. Tegyük fel, hogy egy osztályt egy gyermek osztály származtatott, akkor amikor a származtatott osztály objektumát használjuk, akkor az alap osztály vagy a származtatott osztály objektumára utalhat. A metódushívás viselkedése azonban nem egyértelmű, ha az alaposztály metódusai felülbírálásra kerülnek. Tehát ennek a kétértelműségnek a megoldására a virtuális kulcsszó kerül felhasználásra. Ha a metódus virtuálisan van megjelölve, akkor a származtatott osztály függvényét hívjuk (ha van ilyen), vagy pedig az alap osztály függvényét hívjuk. Például a C ++ esetében a virtuális kulcsszót pontosan erre a célra használják. A C # esetében a virtuális kulcsszó hasonló módon kerül felhasználásra, de ezen felül a kulcsszó felülbírálása az összes felülbírált módszer módosítására használható. De a Java-ban nincs kifejezetten virtuális kulcsszó. Minden nem statikus módszert virtuálisnak tekintünk. A test nélküli virtuális funkciókat tiszta virtuális funkcióknak nevezzük. A Java és a C # esetében az absztrakt módszerek valóban tiszta virtuálisak.

Különbség a virtuális és az absztrakt között

Noha az absztrakt és a virtuális két kulcsszó / fogalom, amelyek a társult entitások nem teljes megvalósítását jelentik, vannak különbségeik. Az absztrakt módszereknek (amelyeket absztrakt osztályokon belül meg kell határozni) egyáltalán nincs megvalósításuk, míg a virtuális módszereknek megvalósításuk lehet. Ha az absztrakt módszereket egy konkrét osztály kibővíti, akkor az összes örökölt absztrakt módszert végre kell hajtani, míg az örökölt virtuális módszereket felülbírálhatjuk, vagy nem.