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

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

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

Videó: Különbség a virtuális és az absztrakt között
Videó: Ismerd meg a felhőt! 2024, Július
Anonim

Virtuális vs absztrakt

A virtuális és az absztrakt két kulcsszó, amelyet a legtöbb objektumorientált (OO) programozási nyelvben használnak, például a Java és a C. Bár a különböző nyelveken némi eltérések mutatkoznak abban, hogy mit jelent, mind a Virtual, mind az Abstract kulcsszavak részleges megvalósítást biztosítanak a hozzájuk kapcsolódó entitásokhoz.

Absztrakt

Az absztrakt osztályok, más néven Abstract Base Classes (ABC) általában nem példányosítható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ődést (alosztályok létrehozásának képességét egy osztály kiterjesztésével). Az absztrakt osztályok általában egy absztrakt fogalmat vagy entitást képviselnek, részben vagy egyáltalán nem implementálva. Ezért az absztrakt osztályok szülőosztályokként működnek, amelyekből az utódosztályok származnak, így az utódosztály megosztja a szülőosztály hiányos jellemzőit, és funkcionalitást lehet hozzáadni a kiegészítéshez. Az absztrakt osztályok tartalmazhatnak absztrakt metódusokat. Az absztrakt osztályt kiterjesztő alosztályok megvalósíthatják ezeket az (öröklött) absztrakt metódusokat. Ha a gyermekosztály az összes ilyen absztrakt metódust megvalósítja, akkor ez egy konkrét osztály. De ha nem, akkor a gyermekosztály is absztrakt osztály lesz. Mindez azt jelenti, hogy amikor a programozó kijelöl egy osztályt absztraktnak, azt mondja, hogy az osztály hiányos lesz, és olyan elemei lesznek, amelyeket az örökös alosztályoknak ki kell egészíteniük. Ez egy jó módja annak, hogy szerződést kössön két programozó között, ami leegyszerűsíti a szoftverfejlesztési feladatokat. A programozónak, aki kódot ír az öröklésre, pontosan követnie kell a metódusdefiníciókat (de természetesen lehet saját implementációja). A Java és a C nyelvben az absztrakt osztályok és metódusok az Abstract kulcsszóval vannak deklarálva.

Virtuális

A virtuális metódusok/függvények lehetőséget adnak arra, hogy opcionálisan felülbírálják a viselkedését egy öröklő osztály által (ugyanolyan aláírású függvény használatával). A virtuális függvény fogalma fontos a következő forgatókönyvben. Tegyük fel, hogy egy osztályt egy gyermekosztály származtat, és amikor a származtatott osztály egy objektumát használjuk, az az alaposztály vagy a származtatott osztály objektumára hivatkozhat. A metódushívás viselkedése azonban kétértelmű lehet, ha az alaposztály metódusait felülbírálják. Tehát ennek a kétértelműségnek a megoldására a Virtuális kulcsszót használjuk. Ha a metódus Virtuális jelzésű, akkor a származtatott osztály függvénye kerül meghívásra (ha van ilyen), vagy pedig az alaposztály függvénye. Például a C++-ban a Virtual kulcsszót pontosan erre a célra használják. A C-ban a Virtual kulcsszót hasonló módon használják, de emellett a kulcsszó-felülírást kell használni az összes felülírt metódus módosításához. De a Java-ban nincs kifejezett Virtual kulcsszó. Minden nem statikus módszer virtuálisnak minősül. A test nélküli virtuális függvényeket tiszta virtuális függvényeknek nevezzük. A Java és a C nyelvben az Abstract metódusok valójában Pure Virtual.

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

Bár az absztrakt és a virtuális két olyan kulcsszó/fogalom, amely a kapcsolódó entitások nem teljes megvalósításának jelentését adja, vannak különbségeik. Az absztrakt metódusoknak (amelyeket az absztrakt osztályokon belül kell meghatározni) egyáltalán nincs implementáció, míg a virtuális metódusoknak lehet implementációja. Ha az absztrakt metódusokat kibővítjük egy konkrét osztállyal, akkor az összes örökölt absztrakt metódust implementálni kell, míg az örökölt virtuális metódusokat felülírhatjuk vagy nem.

Ajánlott: