Atšķirība starp virtuālo un abstrakto

Atšķirība starp virtuālo un abstrakto
Atšķirība starp virtuālo un abstrakto

Video: Atšķirība starp virtuālo un abstrakto

Video: Atšķirība starp virtuālo un abstrakto
Video: Cloud services: IaaS, PaaS, SaaS, CaaS, FaaS 2024, Novembris
Anonim

Virtuālais pret abstrakto

Virtual un Abstract ir divi atslēgvārdi, ko izmanto lielākajā daļā objektorientēto (OO) programmēšanas valodu, piemēram, Java un C. Lai gan pastāv nelielas atšķirības, ko tas nozīmē dažādās valodās, gan virtuālie, gan abstraktie atslēgvārdi nodrošina daļējas ieviešanas sajūtu entītijām, kurām tie ir pievienoti.

Abstract

Parasti abstraktās klases, kas pazīstamas arī kā Abstract Base Classes (ABC), nevar izveidot (šīs klases gadījumu nevar izveidot). Tātad abstraktajām klasēm ir nozīme tikai tad, ja programmēšanas valoda atbalsta pārmantošanu (spēju izveidot apakšklases, paplašinot klasi). Abstraktās klases parasti attēlo abstraktu jēdzienu vai entītiju ar daļēju ieviešanu vai bez tās. Tāpēc abstraktās klases darbojas kā vecākklases, no kurām tiek atvasinātas pakārtotās klases, tādējādi pakārtotajām klasēm būs kopīgas nepilnīgās vecākklases funkcijas, un to pabeigšanai var pievienot funkcionalitāti. Abstraktās klases var saturēt abstraktās metodes. Apakšklases, kas paplašina abstrakto klasi, var īstenot šīs (mantotās) abstraktās metodes. Ja bērnu klase īsteno visas šādas abstraktās metodes, tā ir konkrēta klase. Bet, ja tā nenotiek, arī bērnu klase kļūst par abstrakto klasi. Tas viss nozīmē to, ka, programmētāja izvirzot klasi kā abstraktu, viņa saka, ka klase būs nepilnīga un tajā būs elementi, kas jāpabeidz mantotajām apakšklasēm. Tas ir jauks veids, kā izveidot līgumu starp diviem programmētājiem, kas vienkāršo programmatūras izstrādes uzdevumus. Programmētājam, kurš raksta kodu, lai mantotu, ir precīzi jāievēro metodes definīcijas (bet, protams, var būt arī sava ieviešana). Programmā Java un C abstraktās klases un metodes tiek deklarētas, izmantojot Abstract atslēgvārdu.

Virtuāls

Virtuālās metodes/funkcijas nodrošina iespēju pēc izvēles ignorēt tās darbību, izmantojot mantojuma klasi (izmantojot funkciju ar tādu pašu parakstu). Virtuālās funkcijas jēdziens ir svarīgs šādā scenārijā. Pieņemsim, ka klasi atvasina bērnklase, tad ikreiz, kad tiek izmantots atvasinātās klases objekts, tā var atsaukties uz bāzes klases vai atvasinātās klases objektu. Taču metožu izsaukuma darbība var būt neskaidra, ja bāzes klases metodes tiek ignorētas. Tātad, lai atrisinātu šo neskaidrību, tiek izmantots virtuālais atslēgvārds. Ja metode ir atzīmēta ar Virtuālo, tad tiek izsaukta atvasinātās klases funkcija (ja tāda ir) vai arī tiek izsaukta bāzes klases funkcija. Piemēram, C++ valodā Virtual atslēgvārds tiek izmantots tieši šim nolūkam. C valodā Virtuālais atslēgvārds tiek izmantots līdzīgā veidā, taču papildus tam, lai modificētu visas ignorētās metodes, jāizmanto atslēgvārda ignorēšana. Bet Java valodā nav skaidra virtuālā atslēgvārda. Visas nestatiskās metodes tiek uzskatītas par virtuālām. Virtuālās funkcijas bez ķermeņa sauc par tīrajām virtuālajām funkcijām. Programmā Java un C abstraktās metodes patiesībā ir tīri virtuālas.

Atšķirība starp virtuālo un abstrakto

Lai gan abstraktais un virtuālais ir divi atslēgvārdi/jēdzieni, kas ar to saistītajām entītijām nodrošina nepilnīgas ieviešanas nozīmi, tiem tomēr ir savas atšķirības. Abstraktajām metodēm (kas jādefinē abstraktajās klasēs) vispār nav ieviešanas, savukārt virtuālajām metodēm var būt implementācija. Ja abstraktās metodes tiek paplašinātas ar konkrētu klasi, ir jārealizē visas mantotās abstraktās metodes, savukārt mantotās virtuālās metodes var ignorēt.

Ieteicams: