Erinevus virtuaalse ja abstraktse vahel

Virtuaalne vs abstraktne

Virtuaalne ja abstraktne on kaks märksõna, mida kasutatakse enamikes objektorienteeritud (OO) programmeerimiskeeltes, näiteks Java ja C #. Ehkki erinevates keeltes on selle tähenduses väikseid erinevusi, pakuvad nii virtuaalsed kui ka abstraktsed märksõnad osalist rakendamist üksustele, millele see lisab.

Abstraktne

Tavaliselt ei saa abstraktseid klasse, mida tuntakse ka kui abstraktseid alusklasse (ABC), realiseerida (selle klassi eksemplari ei saa luua). Seega on abstraktsetel klassidel tähendus ainult siis, kui programmeerimiskeel toetab pärimist (võime luua alamklassid klassi laiendamisest). Abstraktsed klassid tähistavad tavaliselt abstraktset kontseptsiooni või üksust kas osaliselt või ilma rakendamata. Seetõttu toimivad abstraktsed klassid lapsevanemaklassidena, millest tuletatakse lasteklassid, nii et lasteklass jagab vanemklassi mittetäielikke funktsioone ja funktsionaalsust saab nende täiendamiseks lisada. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid. Abstraktset klassi laiendavad alaklassid võivad neid (päritud) abstraktseid meetodeid rakendada. Kui lasteklass rakendab kõiki selliseid abstraktseid meetodeid, on see konkreetne klass. Kuid kui see ei õnnestu, muutub lasteklass ka abstraktseks klassiks. See kõik tähendab, et kui programmeerija nimetab klassi abstraktseks, väidab ta, et klass on puudulik ja sellel on elemente, mis tuleb pärandi alaklasside järgi täita. See on kena viis kahe programmeerija vahel lepingu sõlmimiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab pärimiseks koodi, peab täpselt järgima meetodimääratlusi (kuid muidugi võib tal olla oma teostus). Java ja C # korral deklareeritakse abstraktsete klasside ja meetodite kasutamine märksõnaga Abstract.

Virtuaalne

Virtuaalsed meetodid / funktsioonid annavad võimaluse valikulise klassi kaudu selle käitumise alistada (kasutades sama allkirjaga funktsiooni). Virtuaalse funktsiooni mõiste on oluline järgmises stsenaariumis. Oletame, et klassi tuletab lasteklass, siis kui tuletatud klassi objekti kasutatakse, võib see viidata põhiklassi või tuletatud klassi objektile. Kuid meetodikõne käitumine võib olla mitmetähenduslik, kui põhiklassi meetodid on üle jäetud. Selle ebaselguse lahendamiseks kasutatakse virtuaalset märksõna. Kui meetod on märgitud virtuaalseks, kutsutakse tuletatud klassi funktsioon (kui see on olemas) või põhiklassi funktsioon. Näiteks C ++ puhul kasutatakse virtuaalset märksõna täpselt selleks. C #-s kasutatakse virtuaalset märksõna sarnaselt, kuid lisaks tuleks kõigi ülepakutud meetodite muutmiseks kasutada märksõna alistamist. Kuid Java-s pole selget virtuaalset märksõna. Kõiki mittestaatilisi meetodeid peetakse virtuaalseteks. Ilma kehata virtuaalseid funktsioone nimetatakse puhtaks virtuaalseks funktsiooniks. Java ja C # puhul on abstraktsed meetodid tegelikult puhtad virtuaalsed.

Erinevus virtuaalse ja abstraktse vahel

Ehkki Abstraktne ja Virtuaalne on kaks märksõna / kontseptsiooni, mis annavad sellega seotud üksustele mittetäieliku rakendamise tähenduse, on neil siiski oma erinevused. Abstraktsetel meetoditel (mis tuleb määratleda abstraktsetes klassides) pole üldse rakendust, samas kui virtuaalsetel meetoditel võib olla rakendus. Kui abstraktseid meetodeid laiendab konkreetne klass, tuleb rakendada kõiki päritud abstraktseid meetodeid, samal ajal kui päritud virtuaalseid meetodeid võidakse alistada või mitte..