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

Virtuāls vs abstrakts

Virtuālais un abstraktais ir divi atslēgas vārdi, ko lieto lielākajā daļā objektu orientētu (OO) programmēšanas valodu, piemēram, Java un C #. Lai arī dažādās valodās ir nelielas atšķirības, ko tas nozīmē, gan virtuālie, gan abstraktie atslēgvārdi sniedz daļējas ieviešanas sajūtu entītijām, kurām tas piešķir.

Kopsavilkums

Parasti abstraktās klases, kas pazīstamas arī kā Abstract Base Classes (ABC), nevar tikt realizētas (šīs klases gadījumu nevar izveidot). Tātad abstraktajām klasēm ir jēga tikai tad, ja programmēšanas valoda atbalsta mantojumu (spēja radīt apakšklases no klases pagarināšanas). 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āku klases, no kurām tiek iegūtas bērnu klases, lai bērnu klase dalītos ar nepilnīgajām vecāku klases īpašībām, un, lai tās pabeigtu, var pievienot funkcionalitāti. Abstraktās klases var saturēt abstraktās metodes. Apakšklases, kas paplašina abstraktu klasi, var ieviest šī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, bērnu klase kļūst arī par abstraktu klasi. Tas viss nozīmē, ka tad, kad programmētājs nominē klasi kā abstraktu, viņa saka, ka klase būs nepilnīga un tajā būs elementi, kas jāpabeidz mantojošajā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 mantošanas kodu, precīzi jāievēro metožu definīcijas (bet, protams, tam var būt sava ieviešana). 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 mantojošo klasi (izmantojot funkciju ar tādu pašu parakstu). Virtuālās funkcijas jēdziens ir svarīgs šajā scenārijā. Pieņemsim, ka klasi atvasina bērnu klase, tad, kad tiek izmantots atvasinātās klases objekts, tā var atsaukties uz bāzes klases vai atvasinātās klases objektu. Tomēr metodes izsaukuma izturēšanās var būt neviennozīmīga, ja tiek ignorētas pamata klases metodes. Tātad, lai atrisinātu šo neskaidrību, tiek izmantots virtuālais atslēgvārds. Ja metode ir apzīmēta kā Virtuāla, tad tiek izsaukta atvasinātās klases funkcija (ja tāda ir) vai arī tiek izsaukta bāzes klases funkcija. Piemēram, C ++ virtuālais atslēgvārds tiek izmantots tieši šim nolūkam. C # klasē virtuālais atslēgvārds tiek izmantots līdzīgi, bet papildus tam, lai modificētu visas ignorētās metodes, ir jāizmanto atslēgvārda ignorēšana. Bet Java nav skaidra virtuālā atslēgvārda. Visas nestatiskās metodes tiek uzskatītas par virtuālām. Virtuālās funkcijas, kurās nav korpusa, sauc par tīrajām virtuālajām funkcijām. Java un C # abstraktās metodes faktiski ir tīri virtuālas.

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

Lai arī abstrakts un virtuāls ir divi atslēgas vārdi / jēdzieni, kas ar to saistītajām entītijām nodrošina nepilnīgas ieviešanas nozīmi, tiem tomēr ir 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 ieviešana. Ja abstraktās metodes paplašina kāda konkrēta klase, jāievieš visas mantotās abstraktās metodes, savukārt mantotās virtuālās metodes var tikt ignorētas..