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: Crime Patrol - क्राइम पेट्रोल सतर्क - Dasi-2 - Episode 611 - 24th January, 2016 2024, November
Anonim

Virtuaalne vs abstraktne

Virtual ja Abstract on kaks märksõna, mida kasutatakse enamikus objektorienteeritud (OO) programmeerimiskeeltes, nagu Java ja C. Kuigi erinevates keeltes on selle tähenduses mõningaid erinevusi, annavad nii virtuaalsed kui ka abstraktsed märksõnad osalise rakendamise tunde üksustele, millele need seostuvad.

Abstraktne

Tavaliselt ei saa abstraktseid klasse, mida tuntakse ka kui Abstract Base Classes (ABC), instantseerida (selle klassi eksemplari ei saa luua). Seega on abstraktsed klassid mõttekad ainult siis, kui programmeerimiskeel toetab pärimist (võime luua alamklasse klassi laiendamisest). Abstraktsed klassid esindavad tavaliselt abstraktset kontseptsiooni või olemit, mille rakendamine on osaliselt või üldse mitte. Seetõttu toimivad abstraktsed klassid vanemklassidena, millest alamklassid tuletatakse, nii et alamklassid jagavad põhiklassi mittetäielikke funktsioone ja nende täiendamiseks saab lisada funktsioone. Abstraktsed klassid võivad sisaldada abstraktseid meetodeid. Abstraktset klassi laiendavad alamklassid võivad rakendada neid (päritud) abstraktseid meetodeid. Kui alamklass rakendab kõiki selliseid abstraktseid meetodeid, on see konkreetne klass. Kui aga seda ei juhtu, muutub ka lasteklass abstraktseks klassiks. See kõik tähendab, et kui programmeerija nimetab klassi abstraktseks, ütleb ta, et klass on mittetäielik ja sellel on elemente, mida pärivad alamklassid peavad täitma. See on hea viis kahe programmeerija vahel lepingu sõlmimiseks, mis lihtsustab tarkvaraarenduse ülesandeid. Programmeerija, kes kirjutab pärimiseks koodi, peab täpselt järgima meetodi määratlusi (kuid loomulikult võib tal olla ka oma rakendus). Java ja C puhul deklareeritakse abstraktsed klassid ja meetodid märksõnaga Abstract.

Virtuaalne

Virtuaalsed meetodid/funktsioonid võimaldavad valikuliselt alistada selle käitumise pärimisklassiga (kasutades sama signatuuriga funktsiooni). Virtuaalse funktsiooni kontseptsioon on järgmise stsenaariumi puhul oluline. Oletame, et klass on tuletatud alamklassi poolt, siis kui kasutatakse tuletatud klassi objekti, võib see viidata põhiklassi või tuletatud klassi objektile. Kuid meetodi kutsumise käitumine võib olla mitmetähenduslik, kui põhiklassi meetodid on tühistatud. Selle ebaselguse lahendamiseks kasutatakse märksõna Virtual. Kui meetod on märgitud Virtuaalseks, kutsutakse välja tuletatud klassi funktsioon (kui see on olemas) või kutsutakse välja baasklassi funktsioon. Näiteks C++ keeles kasutatakse Virtual märksõna just selleks otstarbeks. C-s kasutatakse virtuaalset märksõna sarnaselt, kuid lisaks tuleks märksõna alistamist kasutada kõigi alistatud meetodite muutmiseks. Kuid Javas pole selgesõnalist virtuaalset märksõna. Kõiki mittestaatilisi meetodeid peetakse virtuaalseteks. Ilma kehata virtuaalseid funktsioone nimetatakse puhasteks virtuaalfunktsioonideks. Java ja C puhul on abstraktsed meetodid tegelikult puhas virtuaalne.

Erinevus virtuaalse ja abstraktse vahel

Kuigi abstraktne ja virtuaalne on kaks märksõna/mõistet, mis annavad sellega seotud olemitele mittetäieliku rakendamise tähenduse, on neil siiski erinevusi. Abstraktsetel meetoditel (mis tuleb määratleda abstraktsete klasside sees) pole üldse rakendust, samas kui virtuaalsetel meetoditel võib olla rakendus. Kui abstraktseid meetodeid laiendatakse konkreetse klassi võrra, tuleb rakendada kõiki päritud abstraktseid meetodeid, samas kui päritud virtuaalsed meetodid võivad olla tühistatud.

Soovitan: