Erinevus Virtuaalse Ja Abstraktse Vahel

Erinevus Virtuaalse Ja Abstraktse Vahel
Erinevus Virtuaalse Ja Abstraktse Vahel

Video: Erinevus Virtuaalse Ja Abstraktse Vahel

Video: Erinevus Virtuaalse Ja Abstraktse Vahel
Video: FIFA FOOTBALL GIBLETS KICKER 2024, Aprill
Anonim

Virtuaalne vs abstraktne

Virtuaalne ja abstraktne on kaks märksõna, mida kasutatakse enamikus objektorienteeritud (OO) programmeerimiskeeltes nagu Java ja C #. Kuigi erinevates keeltes on selle erinevusi, on nii virtuaalsed kui ka abstraktsed märksõnad osalistele rakendustele tunnet üksustele, millele see seostub.

Abstraktne

Tavaliselt ei saa abstraktseid klasse, mida nimetatakse ka abstraktseteks baasklassideks (ABC), kiireks muuta (selle klassi eksemplari ei saa luua). Seega on abstraktsetel klassidel mõttekas olla ainult siis, kui programmeerimiskeel toetab pärimist (võime klassi laiendamisest luua alaklasse). Abstraktsed klassid esindavad tavaliselt abstraktset mõistet või üksust, mille rakendamine on osaline või puudub. Seetõttu toimivad abstraktsed klassid vanemklassidena, millest tuletatakse lapseklassid, nii et lasteklass jagab vanemaklassi puudulikke omadusi ja nende täitmiseks saab lisada funktsionaalsust. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid. Abstraktset klassi laiendavad alaklassid võivad rakendada neid (päritud) abstraktseid meetodeid. Kui lapseklass rakendab kõiki selliseid abstraktseid meetodeid, on see konkreetne klass. Aga kui see nii ei ole,lasteklassist saab ka abstraktne klass. See kõik tähendab seda, et kui programmeerija nimetab klassi abstraktseks, ütleb ta, et klass on puudulik ja sellel on elemente, mis tuleb pärivate alamklasside kaudu täita. See on kena viis kahe programmeerija vahel lepingu loomiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab koodi pärimiseks, peab täpselt järgima meetodi definitsioone (kuid loomulikult võib sellel olla ka oma rakendus). Java ja C # puhul deklareeritakse abstraktsed klassid ja meetodid, kasutades abstraktset märksõna. See on kena viis kahe programmeerija vahel lepingu loomiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab koodi pärimiseks, peab täpselt järgima meetodi definitsioone (kuid loomulikult võib sellel olla ka oma rakendus). Java ja C # puhul deklareeritakse abstraktsed klassid ja meetodid, kasutades abstraktset märksõna. See on kena viis kahe programmeerija vahel lepingu loomiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab koodi pärimiseks, peab täpselt järgima meetodi definitsioone (kuid loomulikult võib sellel olla ka oma rakendus). Java ja C # puhul deklareeritakse abstraktsed klassid ja meetodid abstraktse märksõna abil.

Virtuaalne

Virtuaalsed meetodid / funktsioonid võimaldavad soovi korral oma käitumise päriliku klassi abil tühistada (kasutades sama allkirjaga funktsiooni). Virtuaalse funktsiooni mõiste on oluline järgmise stsenaariumi korral. Oletame, et klassi tuletab lapseklass, siis kui kasutatakse tuletatud klassi objekti, võib see viidata baasklassi või tuletatud klassi objektile. Kuid meetodikõne käitumine võib olla mitmetähenduslik, kui baasklassi meetodid tühistatakse. Nii et selle ebaselguse lahendamiseks kasutatakse virtuaalset märksõna. Kui meetod on märgitud virtuaalseks, nimetatakse tuletatud klassi funktsiooni (kui see on olemas) või muul juhul kutsutakse baasklassi funktsiooni. Näiteks C ++ keeles kasutatakse virtuaalset märksõna täpselt selleks. C #-s kasutatakse virtuaalset märksõna sarnaselt, kuid lisakskõigi alistatud meetodite muutmiseks tuleks kasutada märksõna alistamist. Kuid Java-s pole selgesõnalist virtuaalset märksõna. Kõiki mittestaatilisi meetodeid peetakse virtuaalseteks. Kehata virtuaalfunktsioone nimetatakse puhasteks virtuaalseteks funktsioonideks. Java ja C # keeles on abstraktsed meetodid tegelikult Pure Virtual.

Virtuaalse ja abstraktse erinevus

Ehkki abstraktne ja virtuaalne on kaks märksõna / mõistet, mis annavad seostatud üksustele mittetäieliku rakendamise tähenduse, on neil siiski oma erinevused. Abstraktsetel meetoditel (mis tuleb määratleda abstraktsetes klassides) ei ole üldse juurutamist, samas kui virtuaalsetel meetoditel võib olla rakendus. Kui abstraktseid meetodeid laiendab konkreetne klass, tuleb rakendada kõiki päritud abstraktseid meetodeid, samas kui päritud virtuaalsetest meetoditest võidakse üle kirjutada.

Soovitatav: