Ero virtuaalisen ja abstraktin välillä

Ero virtuaalisen ja abstraktin välillä
Ero virtuaalisen ja abstraktin välillä

Video: Ero virtuaalisen ja abstraktin välillä

Video: Ero virtuaalisen ja abstraktin välillä
Video: Ero - Ashxarhi Chap 2024, Heinäkuu
Anonim

Virtuaali vs. abstrakti

Virtual ja Abstract ovat kaksi avainsanaa, joita käytetään useimmissa Object Oriented (OO) -ohjelmointikielissä, kuten Java ja C. Vaikka sen merkityksessä on pieniä eroja eri kielillä, sekä virtuaaliset että abstraktit avainsanat antavat tunteen osittaisesta toteutuksesta entiteeteille, joihin ne liittyvät.

Abstrakti

Yleensä abstrakteja luokkia, jotka tunnetaan myös nimellä Abstract Base Classes (ABC), ei voida instantoida (tämän luokan esiintymää ei voida luoda). Abstrakteilla luokilla on siis merkitystä vain, jos ohjelmointikieli tukee periytymistä (kyky luoda alaluokkia luokan laajentamisesta). Abstraktit luokat edustavat yleensä abstraktia käsitettä tai kokonaisuutta, joka on osittain toteutettu tai ei ollenkaan. Siksi abstraktit luokat toimivat pääluokina, joista alaluokat johdetaan, joten aliluokka jakaa yläluokan epätäydelliset ominaisuudet ja toimintoja voidaan lisätä niiden täydentämiseksi. Abstraktit luokat voivat sisältää abstrakteja menetelmiä. Abstraktia luokkaa laajentavat alaluokat voivat toteuttaa nämä (perityt) abstraktit menetelmät. Jos lapsiluokka toteuttaa kaikki tällaiset abstraktit menetelmät, se on konkreettinen luokka. Mutta jos ei, lapsiluokasta tulee myös abstrakti luokka. Kaikki tämä tarkoittaa, että kun ohjelmoija nimeää luokan tiivistelmäksi, hän sanoo, että luokka on epätäydellinen ja siinä on elementtejä, jotka perivien alaluokkien on täydennettävä. Tämä on mukava tapa tehdä sopimus kahden ohjelmoijan välille, mikä yksinkertaistaa ohjelmistokehityksen tehtäviä. Ohjelmoijan, joka kirjoittaa koodia perittäväksi, on noudatettava menetelmämääritelmiä tarkasti (mutta voi tietysti olla oma toteutus). Javassa ja C:ssa abstraktit luokat ja menetelmät määritetään käyttämällä Abstract-avainsanaa.

Virtuaali

Virtuaaliset menetelmät/funktiot tarjoavat mahdollisuuden valinnaisesti ohittaa sen käyttäytyminen perivän luokan avulla (käyttämällä funktiota, jolla on sama allekirjoitus). Virtuaalitoiminnon käsite on tärkeä seuraavassa skenaariossa. Oletetaan, että luokka on johdettu aliluokan avulla, niin aina kun käytetään johdetun luokan objektia, se voi viitata perusluokan tai johdetun luokan objektiin. Mutta menetelmäkutsujen käyttäytyminen voi olla epäselvää, jos perusluokan menetelmät ohitetaan. Joten tämän epäselvyyden ratkaisemiseksi käytetään virtuaalista avainsanaa. Jos menetelmä on merkitty Virtuaaliksi, kutsutaan johdetun luokan funktiota (jos sellainen on) tai muuten kutsutaan perusluokan funktiota. Esimerkiksi C++:ssa Virtual-avainsanaa käytetään juuri tähän tarkoitukseen. C:ssa Virtual-avainsanaa käytetään samalla tavalla, mutta lisäksi avainsanan ohitusta tulisi käyttää kaikkien ohitettujen menetelmien muokkaamiseen. Mutta Javassa ei ole selkeää Virtual-avainsanaa. Kaikki ei-staattiset menetelmät katsotaan virtuaalisiksi. Virtuaalifunktioita, joissa ei ole runkoa, kutsutaan puhtaiksi virtuaalifunktioiksi. Javassa ja C:ssa abstraktit menetelmät ovat itse asiassa puhdasta virtuaalista.

Ero virtuaalisen ja abstraktin välillä

Vaikka Abstract ja Virtual ovat kaksi avainsanaa/käsitettä, jotka antavat merkityksen epätäydellisestä toteutuksesta siihen liittyville kokonaisuuksille, niillä on eroja. Abstrakteilla menetelmillä (jotka täytyy määritellä abstraktien luokkien sisällä) ei ole toteutusta ollenkaan, kun taas virtuaalisilla menetelmillä voi olla toteutus. Jos abstrakteja menetelmiä laajennetaan konkreettisella luokalla, kaikki perityt abstraktit menetelmät on otettava käyttöön, kun taas perityt virtuaaliset menetelmät voidaan ohittaa tai olla ohittamatta.

Suositeltava: