Virtuaali vs abstrakti
Virtuaali ja tiivistelmä ovat kaksi avainsanaa, joita käytetään useimmissa Object Oriented (OO) -ohjelmointikielissä, kuten Java ja C #. Vaikka sen merkitys eri kielillä on pieniä eroja, sekä virtuaali- että abstraktit avainsanat antavat tunteen osittaisesta toteutuksesta yksiköihin, joihin se liittää.
Abstrakti
Tyypillisesti abstrakteja luokkia, jotka tunnetaan myös nimellä abstraktit perusluokat (ABC), ei voida toteuttaa (kyseisen luokan esiintymää ei voida luoda). Joten, abstraktilla luokilla on merkitystä vain, jos ohjelmointikieli tukee perintöä (kyky luoda alaluokkia luokan laajentamisesta). Abstraktit luokat edustavat yleensä abstraktia käsitettä tai kokonaisuutta, jolla on osittainen toteutus tai jota ei ole toteutettu. Siksi abstraktit luokat toimivat vanhemmaluokkina, joista lastenluokat johdetaan, niin että lastenluokalla on vanhemman luokan puutteelliset ominaisuudet, ja toiminnallisuus voidaan lisätä niiden suorittamiseen. Abstraktit luokat voivat sisältää abstrakteja menetelmiä. Alaluokat, jotka laajentavat abstraktia luokkaa, voivat toteuttaa nämä (perinnölliset) abstraktit menetelmät. Jos lapsiluokka toteuttaa kaikki nämä abstraktit menetelmät, se on konkreettinen luokka. Mutta jos ei, lapsiluokasta tulee myös abstrakti luokka. Kaikki tämä tarkoittaa sitä, että kun ohjelmoija nimittää luokan abstraktiksi, hän sanoo, että luokka on epätäydellinen ja siinä on elementtejä, jotka on täytettävä perittävällä alaluokalla. Tämä on hieno tapa luoda sopimus kahden ohjelmoijan välillä, mikä yksinkertaistaa ohjelmistokehityksen tehtäviä. Ohjelmoijan, joka kirjoittaa koodin periäkseen, on noudatettava menetelmämääritelmiä tarkasti (mutta tietenkin sillä voi olla oma toteutus). Java- ja C # -sovelluksissa abstraktit luokat ja menetelmät ilmoitetaan käyttämällä abstraktia avainsanaa.
virtuaali-
Virtuaaliset menetelmät / toiminnot tarjoavat kyvyn valinnaisesti ohittaa sen käyttäytyminen periytyvällä luokalla (käyttäen samaa allekirjoitusta käyttävää toimintoa). Virtuaalitoiminnan käsite on tärkeä seuraavassa tilanteessa. Oletetaan, että luokan johtaa lastenluokka, silloin kun käytetään johdetun luokan objektia, se voi viitata perusluokan tai johdetun luokan esineeseen. Mutta menetelmäsoittokäyttäytyminen voi olla moniselitteistä, jos perustason menetelmät ohitetaan. Joten tämän epäselvyyden ratkaisemiseksi käytetään virtuaalista avainsanaa. Jos menetelmä on merkitty virtuaalisella, niin johdetun luokan funktiota kutsutaan (jos sellainen on) tai muuten perusluokan funktiota kutsutaan. Esimerkiksi C ++: ssa virtuaalista avainsanaa käytetään juuri tähän tarkoitukseen. C #: ssä virtuaalista avainsanaa käytetään samalla tavalla, mutta lisäksi avainsanan ohitusta tulisi käyttää kaikkien ohitettujen menetelmien muokkaamiseen. Mutta Java-ohjelmassa ei ole nimenomaista virtuaalista avainsanaa. Kaikkia ei-staattisia menetelmiä pidetään virtuaalisina. Virtuaalitoimintoja, joissa ei ole runkoa, kutsutaan puhtaiksi virtuaalitoiminnoiksi. Java- ja C # -sovelluksissa abstraktit menetelmät ovat itse asiassa Pure Virtual.
Ero virtuaalisen ja abstraktin välillä
Vaikka tiivistelmä ja virtuaali ovat kaksi avainsanaa / konseptia, jotka tarjoavat merkityksen puutteellisesta toteutuksesta siihen liittyviin kokonaisuuksiin, niillä on kuitenkin erot. Abstraktilla menetelmillä (jotka on määriteltävä abstraktien luokkien sisällä) ei ole lainkaan toteutusta, kun taas Virtuaalisilla menetelmillä voi olla toteutustapa. Jos tiivistelmämenetelmiä laajennetaan konkreettisella luokalla, kaikki perittyjä tiivistelmämenetelmiä on otettava käyttöön, kun taas perittyjä virtuaalimenetelmiä voidaan tai ei voida korvata.